(loadFrom "nat-archive-tool" "src/nat/Lib.kiss") (defNew [&prop :PlayState playState :ArchiveController controller] (super playState ->[archive e] ?(or (hasComponent e Name) (hasComponent e Circle) (hasComponent e Rectangle)) ->[archive e pos &opt ui] (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 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 entryReps e.id)] (sprite.kill) (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) (entryReps.clear) (playState.entryGroup.kill) (playState.entryGroup.clear) (playState.entryGroup.revive)) (method z [:Entry e] .z (dictGet (readComponent e Positions) _playgroundKey)) // override process to z-sort all sprites after making them (method &override :Void process [:Archive archive &opt :ArchiveUI ui] (super.process archive ui) (FlxG.camera.calculateScrollBounds playState.entryGroup PlayState.SCROLL_BOUND_MARGIN) (playState.entryGroup.sort ->[o s1 s2] (FlxSort.byValues o (z s1.e) (z s2.e)))) (prop defaultSpacing 50) (prop &mut defaultY 0) (method &override :Position defaultPosition [_] (+= defaultY defaultSpacing) (object x 0 y defaultY z 0.0))