Move EntryRep/id tracking to PlaygroundSystem
This commit is contained in:
@@ -280,7 +280,7 @@
|
|||||||
(method getSelectedEntries []
|
(method getSelectedEntries []
|
||||||
(_selectedEntries.copy))
|
(_selectedEntries.copy))
|
||||||
|
|
||||||
(prop &mut :PlaygroundSystem playgroundSystem null)
|
(prop &mut :PlaygroundSystem<Dynamic> playgroundSystem null)
|
||||||
|
|
||||||
(defNew [&prop :Archive archive
|
(defNew [&prop :Archive archive
|
||||||
&prop :ArchiveUI ui]
|
&prop :ArchiveUI ui]
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ interface ArchiveUI {
|
|||||||
/**
|
/**
|
||||||
* A PlaygroundSystem that will display interactible entry representations
|
* A PlaygroundSystem that will display interactible entry representations
|
||||||
*/
|
*/
|
||||||
function playgroundSystem():Null<PlaygroundSystem>;
|
function playgroundSystem():Null<PlaygroundSystem<Dynamic>>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt the user to enter text
|
* Prompt the user to enter text
|
||||||
|
|||||||
@@ -117,4 +117,4 @@
|
|||||||
|
|
||||||
(method :Void hidePrefixMap [])
|
(method :Void hidePrefixMap [])
|
||||||
|
|
||||||
(method :PlaygroundSystem playgroundSystem [] null)
|
(method :PlaygroundSystem<String> playgroundSystem [] null)
|
||||||
@@ -15,4 +15,4 @@ typedef PlaygroundConnectionProcessor = (Archive, Entry, Position, Entry, Positi
|
|||||||
* (EntrySpriteSystem, for example)
|
* (EntrySpriteSystem, for example)
|
||||||
*/
|
*/
|
||||||
@:build(kiss.Kiss.build())
|
@:build(kiss.Kiss.build())
|
||||||
class PlaygroundSystem extends System {}
|
class PlaygroundSystem<EntryRep> extends System {}
|
||||||
|
|||||||
@@ -6,13 +6,21 @@
|
|||||||
|
|
||||||
(prop :Map<String,TagList> playgroundDefaultTags (new Map))
|
(prop :Map<String,TagList> playgroundDefaultTags (new Map))
|
||||||
(prop :Map<String,ColorF> playgroundBGColors (new Map))
|
(prop :Map<String,ColorF> playgroundBGColors (new Map))
|
||||||
|
(prop :Map<String,EntryRep> entryReps (new Map))
|
||||||
|
|
||||||
(defNew [&prop :ArchiveUI ui
|
(defNew [&prop :ArchiveUI ui
|
||||||
|
&prop :ArchiveController controller
|
||||||
:EntryChecker canProcess
|
:EntryChecker canProcess
|
||||||
&prop :PlaygroundEntryProcessor processor
|
&prop :PlaygroundEntryProcessor createEntryRep
|
||||||
&prop :PlaygroundConnectionProcessor connectionProcessor
|
&prop :PlaygroundConnectionProcessor connectionProcessor
|
||||||
:EntryProcessor onRemoveEntry]
|
:EntryProcessor onRemoveEntry]
|
||||||
|
|
||||||
|
[:PlaygroundEntryProcessor processor
|
||||||
|
->[archive e pos &opt ui]
|
||||||
|
(unless (entryReps.exists e.id)
|
||||||
|
(let [eRep (createEntryRep archive e pos ui)]
|
||||||
|
(dictSet entryReps e.id eRep)))]
|
||||||
|
|
||||||
(super
|
(super
|
||||||
->[archive e]
|
->[archive e]
|
||||||
(or (tagsMatch e "playground")
|
(or (tagsMatch e "playground")
|
||||||
@@ -37,7 +45,11 @@
|
|||||||
(dictSet positions _playgroundKey (defaultPosition e))))
|
(dictSet positions _playgroundKey (defaultPosition e))))
|
||||||
(let [pos (dictGet (readComponent e Positions) _playgroundKey)]
|
(let [pos (dictGet (readComponent e Positions) _playgroundKey)]
|
||||||
(processor archive e pos ui)))))
|
(processor archive e pos ui)))))
|
||||||
(set this.onRemoveEntry onRemoveEntry))
|
(set this.onRemoveEntry
|
||||||
|
->[archive e &opt ui] {
|
||||||
|
(onRemoveEntry archive e ui)
|
||||||
|
(entryReps.remove e.id)
|
||||||
|
}))
|
||||||
|
|
||||||
(method switchPlaygroundKey [key]
|
(method switchPlaygroundKey [key]
|
||||||
(set _playgroundKey key)
|
(set _playgroundKey key)
|
||||||
@@ -75,6 +87,9 @@
|
|||||||
(method defaultPosition [:Entry e]
|
(method defaultPosition [:Entry e]
|
||||||
(object x 0.0 y 0.0 z 0.0))
|
(object x 0.0 y 0.0 z 0.0))
|
||||||
|
|
||||||
|
(method getSelectedReps []
|
||||||
|
(filter (for e (controller.getSelectedEntries) (dictGet entryReps e.id))))
|
||||||
|
|
||||||
// TODO overridable circleContainsEntry function (default is to check only the position, Flixel version will use scaled sprite bounding box)
|
// TODO overridable circleContainsEntry function (default is to check only the position, Flixel version will use scaled sprite bounding box)
|
||||||
|
|
||||||
// TODO when a circle contains an entry in the current playground, add it as a child
|
// TODO when a circle contains an entry in the current playground, add it as a child
|
||||||
@@ -52,7 +52,7 @@ class DummyUI implements ArchiveUI {
|
|||||||
public function choosePosition(prompt:String, resolve:Position->Void) {
|
public function choosePosition(prompt:String, resolve:Position->Void) {
|
||||||
resolve({x: 0, y: 0, z: 0});
|
resolve({x: 0, y: 0, z: 0});
|
||||||
}
|
}
|
||||||
public function playgroundSystem():Null<PlaygroundSystem> {
|
public function playgroundSystem():Null<PlaygroundSystem<Dynamic>> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public var shortcutHandler:Null<KeyShortcutHandler<Entry>> = null;
|
public var shortcutHandler:Null<KeyShortcutHandler<Entry>> = null;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
(enableMouseDrag false (hasComponent e Circle))
|
(enableMouseDrag false (hasComponent e Circle))
|
||||||
(set mouseStartDragCallback
|
(set mouseStartDragCallback
|
||||||
->[self _dx _dy]
|
->[self _dx _dy]
|
||||||
(doFor sprite (system.getSelectedSprites)
|
(doFor sprite (system.getSelectedReps)
|
||||||
(unless (= sprite.e.id this.e.id)
|
(unless (= sprite.e.id this.e.id)
|
||||||
(sprite.fixToSprite this))))
|
(sprite.fixToSprite this))))
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
->[self _dx _dy]
|
->[self _dx _dy]
|
||||||
{
|
{
|
||||||
(savePos)
|
(savePos)
|
||||||
(doFor sprite (system.getSelectedSprites)
|
(doFor sprite (system.getSelectedReps)
|
||||||
(unless (= sprite.e.id this.e.id)
|
(unless (= sprite.e.id this.e.id)
|
||||||
(sprite.endFixToSprite)))
|
(sprite.endFixToSprite)))
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -14,4 +14,4 @@ import nat.systems.PlaygroundSystem;
|
|||||||
import flixel.util.FlxSort;
|
import flixel.util.FlxSort;
|
||||||
|
|
||||||
@:build(kiss.Kiss.build())
|
@:build(kiss.Kiss.build())
|
||||||
class EntrySpriteSystem extends PlaygroundSystem {}
|
class EntrySpriteSystem extends PlaygroundSystem<EntrySprite> {}
|
||||||
|
|||||||
@@ -1,48 +1,41 @@
|
|||||||
(loadFrom "nat-archive-tool" "src/nat/Lib.kiss")
|
(loadFrom "nat-archive-tool" "src/nat/Lib.kiss")
|
||||||
|
|
||||||
(prop :Map<String,EntrySprite> sprites (new Map))
|
|
||||||
|
|
||||||
// TODO this can also handle text sprites, and instead of saving out the text bitmap,
|
|
||||||
// just make the FlxText every time at runtime -- so PinNextImage won't be needed
|
|
||||||
// when the media tag is added
|
|
||||||
|
|
||||||
(defNew [&prop :PlayState playState
|
(defNew [&prop :PlayState playState
|
||||||
&prop :ArchiveController controller]
|
:ArchiveController controller]
|
||||||
(super
|
(super
|
||||||
playState
|
playState
|
||||||
|
controller
|
||||||
->[archive e]
|
->[archive e]
|
||||||
?(or (hasComponent e Name) (hasComponent e Circle) (hasComponent e Rectangle))
|
?(or (hasComponent e Name) (hasComponent e Circle) (hasComponent e Rectangle))
|
||||||
->[archive e pos &opt ui]
|
->[archive e pos &opt ui]
|
||||||
(unless (sprites.exists e.id)
|
(let [sprite (new EntrySprite this _playgroundKey pos archive e controller)]
|
||||||
(let [sprite (new EntrySprite this _playgroundKey pos archive e controller)]
|
(set sprite.cameras [FlxG.camera])
|
||||||
(set sprite.cameras [FlxG.camera])
|
(sprite.enableDragToSelect
|
||||||
(sprite.enableDragToSelect
|
->:Void {
|
||||||
->:Void {
|
(controller.AddSelectEntry e)
|
||||||
(controller.AddSelectEntry e)
|
(sprite.updateColor)
|
||||||
(sprite.updateColor)
|
}
|
||||||
}
|
->:Void {
|
||||||
->:Void {
|
(controller.DeSelectEntry e)
|
||||||
(controller.DeSelectEntry e)
|
(sprite.updateColor)
|
||||||
(sprite.updateColor)
|
})
|
||||||
})
|
(playState.entryGroup.add sprite)
|
||||||
(playState.entryGroup.add sprite)
|
sprite)
|
||||||
(dictSet sprites e.id sprite)))
|
|
||||||
->[archive e pos e2 pos2 &opt ui]
|
->[archive e pos e2 pos2 &opt ui]
|
||||||
(let [o .origin (dictGet sprites e.id)
|
(let [o .origin (dictGet entryReps e.id)
|
||||||
o2 .origin (dictGet sprites e2.id)]
|
o2 .origin (dictGet entryReps e2.id)]
|
||||||
(playState.debugLayer.drawLine (+ pos.x o.x) (+ pos.y o.y) (+ pos2.x o2.x) (+ pos2.y o2.y) FlxColor.LIME))
|
(playState.debugLayer.drawLine (+ pos.x o.x) (+ pos.y o.y) (+ pos2.x o2.x) (+ pos2.y o2.y) FlxColor.LIME))
|
||||||
->[archive e &opt ui]
|
->[archive e &opt ui]
|
||||||
{
|
{
|
||||||
(whenLet [sprite (dictGet sprites e.id)]
|
(whenLet [sprite (dictGet entryReps e.id)]
|
||||||
(sprite.kill)
|
(sprite.kill)
|
||||||
(playState.entryGroup.remove sprite true)
|
(playState.entryGroup.remove sprite true))
|
||||||
(sprites.remove e.id))
|
|
||||||
}))
|
}))
|
||||||
|
|
||||||
(method &override :Void clear [:ColorF color]
|
(method &override :Void clear [:ColorF color]
|
||||||
(set playState.bgColor (FlxColor.fromRGBFloat color.r color.g color.b color.a))
|
(set playState.bgColor (FlxColor.fromRGBFloat color.r color.g color.b color.a))
|
||||||
(playState.debugLayer.clear)
|
(playState.debugLayer.clear)
|
||||||
(sprites.clear)
|
(entryReps.clear)
|
||||||
(playState.entryGroup.kill)
|
(playState.entryGroup.kill)
|
||||||
(playState.entryGroup.clear)
|
(playState.entryGroup.clear)
|
||||||
(playState.entryGroup.revive))
|
(playState.entryGroup.revive))
|
||||||
@@ -56,9 +49,6 @@
|
|||||||
(FlxG.camera.calculateScrollBounds playState.entryGroup PlayState.SCROLL_BOUND_MARGIN)
|
(FlxG.camera.calculateScrollBounds playState.entryGroup PlayState.SCROLL_BOUND_MARGIN)
|
||||||
(playState.entryGroup.sort ->[o s1 s2] (FlxSort.byValues o (z s1.e) (z s2.e))))
|
(playState.entryGroup.sort ->[o s1 s2] (FlxSort.byValues o (z s1.e) (z s2.e))))
|
||||||
|
|
||||||
(method getSelectedSprites []
|
|
||||||
(filter (for e (controller.getSelectedEntries) (dictGet sprites e.id))))
|
|
||||||
|
|
||||||
(prop defaultSpacing 50)
|
(prop defaultSpacing 50)
|
||||||
(prop &mut defaultY 0)
|
(prop &mut defaultY 0)
|
||||||
(method &override :Position defaultPosition [_]
|
(method &override :Position defaultPosition [_]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
(prop &mut :EntrySpriteSystem spriteSystem)
|
(prop &mut :EntrySpriteSystem spriteSystem)
|
||||||
|
|
||||||
(method :PlaygroundSystem playgroundSystem []
|
(method :PlaygroundSystem<EntrySprite> playgroundSystem []
|
||||||
(set spriteSystem (new EntrySpriteSystem this controller)))
|
(set spriteSystem (new EntrySpriteSystem this controller)))
|
||||||
|
|
||||||
(prop :KeyShortcutHandler<Entry> shortcutHandler (new FlxKeyShortcutHandler<Entry>))
|
(prop :KeyShortcutHandler<Entry> shortcutHandler (new FlxKeyShortcutHandler<Entry>))
|
||||||
@@ -196,8 +196,9 @@
|
|||||||
// by refreshEntry()
|
// by refreshEntry()
|
||||||
(when (spriteSystem.entries.exists e.id)
|
(when (spriteSystem.entries.exists e.id)
|
||||||
// refresh the sprites for entries that changed data but still should have sprites
|
// refresh the sprites for entries that changed data but still should have sprites
|
||||||
(when (spriteSystem.sprites.exists e.id)
|
(when (spriteSystem.entryReps.exists e.id)
|
||||||
(spriteSystem.onRemoveEntry archive e))
|
(spriteSystem.onRemoveEntry archive e)
|
||||||
|
(spriteSystem.entryReps.remove e.id))
|
||||||
(spriteSystem.processEntry archive e)))
|
(spriteSystem.processEntry archive e)))
|
||||||
|
|
||||||
(FlxG.camera.calculateScrollBounds entryGroup SCROLL_BOUND_MARGIN))
|
(FlxG.camera.calculateScrollBounds entryGroup SCROLL_BOUND_MARGIN))
|
||||||
@@ -221,7 +222,7 @@
|
|||||||
|
|
||||||
(method :Void onSelectionChanged [:Array<Entry> selectedEntries :Array<Entry> lastSelectedEntries]
|
(method :Void onSelectionChanged [:Array<Entry> selectedEntries :Array<Entry> lastSelectedEntries]
|
||||||
(doFor e (selectedEntries.concat lastSelectedEntries)
|
(doFor e (selectedEntries.concat lastSelectedEntries)
|
||||||
(whenLet [sprite (dictGet spriteSystem.sprites e.id)]
|
(whenLet [sprite (dictGet spriteSystem.entryReps e.id)]
|
||||||
(sprite.updateColor))))
|
(sprite.updateColor))))
|
||||||
|
|
||||||
(prop &mut :Position->Void resolvePosition)
|
(prop &mut :Position->Void resolvePosition)
|
||||||
|
|||||||
Reference in New Issue
Block a user