Move EntryRep/id tracking to PlaygroundSystem

This commit is contained in:
2023-02-13 05:15:22 -07:00
parent 7d7fa70d03
commit 3dd221e32e
10 changed files with 50 additions and 44 deletions

View File

@@ -65,7 +65,7 @@
(enableMouseDrag false (hasComponent e Circle))
(set mouseStartDragCallback
->[self _dx _dy]
(doFor sprite (system.getSelectedSprites)
(doFor sprite (system.getSelectedReps)
(unless (= sprite.e.id this.e.id)
(sprite.fixToSprite this))))
@@ -73,7 +73,7 @@
->[self _dx _dy]
{
(savePos)
(doFor sprite (system.getSelectedSprites)
(doFor sprite (system.getSelectedReps)
(unless (= sprite.e.id this.e.id)
(sprite.endFixToSprite)))
}))

View File

@@ -14,4 +14,4 @@ import nat.systems.PlaygroundSystem;
import flixel.util.FlxSort;
@:build(kiss.Kiss.build())
class EntrySpriteSystem extends PlaygroundSystem {}
class EntrySpriteSystem extends PlaygroundSystem<EntrySprite> {}

View File

@@ -1,48 +1,41 @@
(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
&prop :ArchiveController controller]
:ArchiveController controller]
(super
playState
controller
->[archive e]
?(or (hasComponent e Name) (hasComponent e Circle) (hasComponent e Rectangle))
->[archive e pos &opt ui]
(unless (sprites.exists e.id)
(let [sprite (new EntrySprite this _playgroundKey pos archive e controller)]
(set sprite.cameras [FlxG.camera])
(sprite.enableDragToSelect
->:Void {
(controller.AddSelectEntry e)
(sprite.updateColor)
}
->:Void {
(controller.DeSelectEntry e)
(sprite.updateColor)
})
(playState.entryGroup.add sprite)
(dictSet sprites e.id sprite)))
(let [sprite (new EntrySprite this _playgroundKey pos archive e controller)]
(set sprite.cameras [FlxG.camera])
(sprite.enableDragToSelect
->:Void {
(controller.AddSelectEntry e)
(sprite.updateColor)
}
->:Void {
(controller.DeSelectEntry e)
(sprite.updateColor)
})
(playState.entryGroup.add sprite)
sprite)
->[archive e pos e2 pos2 &opt ui]
(let [o .origin (dictGet sprites e.id)
o2 .origin (dictGet sprites e2.id)]
(let [o .origin (dictGet entryReps e.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))
->[archive e &opt ui]
{
(whenLet [sprite (dictGet sprites e.id)]
(whenLet [sprite (dictGet entryReps e.id)]
(sprite.kill)
(playState.entryGroup.remove sprite true)
(sprites.remove e.id))
(playState.entryGroup.remove sprite true))
}))
(method &override :Void clear [:ColorF color]
(set playState.bgColor (FlxColor.fromRGBFloat color.r color.g color.b color.a))
(playState.debugLayer.clear)
(sprites.clear)
(entryReps.clear)
(playState.entryGroup.kill)
(playState.entryGroup.clear)
(playState.entryGroup.revive))
@@ -56,9 +49,6 @@
(FlxG.camera.calculateScrollBounds playState.entryGroup PlayState.SCROLL_BOUND_MARGIN)
(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 &mut defaultY 0)
(method &override :Position defaultPosition [_]

View File

@@ -4,7 +4,7 @@
(prop &mut :EntrySpriteSystem spriteSystem)
(method :PlaygroundSystem playgroundSystem []
(method :PlaygroundSystem<EntrySprite> playgroundSystem []
(set spriteSystem (new EntrySpriteSystem this controller)))
(prop :KeyShortcutHandler<Entry> shortcutHandler (new FlxKeyShortcutHandler<Entry>))
@@ -196,8 +196,9 @@
// by refreshEntry()
(when (spriteSystem.entries.exists e.id)
// refresh the sprites for entries that changed data but still should have sprites
(when (spriteSystem.sprites.exists e.id)
(spriteSystem.onRemoveEntry archive e))
(when (spriteSystem.entryReps.exists e.id)
(spriteSystem.onRemoveEntry archive e)
(spriteSystem.entryReps.remove e.id))
(spriteSystem.processEntry archive e)))
(FlxG.camera.calculateScrollBounds entryGroup SCROLL_BOUND_MARGIN))
@@ -221,7 +222,7 @@
(method :Void onSelectionChanged [:Array<Entry> selectedEntries :Array<Entry> lastSelectedEntries]
(doFor e (selectedEntries.concat lastSelectedEntries)
(whenLet [sprite (dictGet spriteSystem.sprites e.id)]
(whenLet [sprite (dictGet spriteSystem.entryReps e.id)]
(sprite.updateColor))))
(prop &mut :Position->Void resolvePosition)