From 720edc6959864d152c32845cfb3350e822203fe5 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 27 Jan 2022 16:04:20 -0700 Subject: [PATCH] handloose actionsprite actions --- projects/handloose/source/ActionSprite.hx | 1 + projects/handloose/source/ActionSprite.kiss | 3 +- projects/handloose/source/TypingState.hx | 1 + projects/handloose/source/TypingState.kiss | 44 +++++++++++++++------ 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/projects/handloose/source/ActionSprite.hx b/projects/handloose/source/ActionSprite.hx index a29d6ee2..3499220a 100644 --- a/projects/handloose/source/ActionSprite.hx +++ b/projects/handloose/source/ActionSprite.hx @@ -3,6 +3,7 @@ package; import kiss.Prelude; import kiss.List; import flixel.FlxSprite; +import TypingState; @:build(kiss.Kiss.build()) class ActionSprite extends FlxSprite {} diff --git a/projects/handloose/source/ActionSprite.kiss b/projects/handloose/source/ActionSprite.kiss index 9cad5559..7ae77f3c 100644 --- a/projects/handloose/source/ActionSprite.kiss +++ b/projects/handloose/source/ActionSprite.kiss @@ -1,2 +1,3 @@ -(defNew [&prop :Void->Void action] +(defNew [&prop :Void->Void action + &prop :ArrowDir dir] (super)) \ No newline at end of file diff --git a/projects/handloose/source/TypingState.hx b/projects/handloose/source/TypingState.hx index df328fba..29a4fe18 100644 --- a/projects/handloose/source/TypingState.hx +++ b/projects/handloose/source/TypingState.hx @@ -4,6 +4,7 @@ import flixel.FlxG; import flixel.FlxState; import flixel.FlxSprite; import flixel.util.FlxColor; +import flixel.group.FlxGroup; import flixel.input.gamepad.FlxGamepad; import flixel.text.FlxText; import flixel.tweens.FlxTween; diff --git a/projects/handloose/source/TypingState.kiss b/projects/handloose/source/TypingState.kiss index 1ef3d2aa..f2ac9fc4 100644 --- a/projects/handloose/source/TypingState.kiss +++ b/projects/handloose/source/TypingState.kiss @@ -29,6 +29,8 @@ makeTriangleSprite(Up, "", y); makeTriangleSprite(Right, "", y); + add(actionSprites); + var actionSprite = makeTriangleSprite(Right, "a", -SPRITE_SIZE, ()->{trace("a");}); }|#) @@ -37,17 +39,28 @@ (prop &mut :FlxText instructionText null) (method &override :Void update [:Float elapsed] - #|{ - super.update(elapsed); + (super.update elapsed) - var lastId = getFirstInputId(); - }|# - - // Prompt to map the arrows (let [mappedCodes (count inputCodes) nextToMap (nth DIR_ORDER mappedCodes)] (if (= DIR_ORDER.length mappedCodes) - (set instructionText.text "") + // Handle an arrow press + { + (set instructionText.text "") + (whenLet [(Some id) (getFirstInputId) + dir (dictGet inputCodes id)] + (let [&mut :ActionSprite lowestMatching null + &mut :Float highestY -SPRITE_SIZE-1] + (actionSprites.forEachAlive + ->spr (when (= dir spr.dir) + (when (> spr.y highestY) + (set highestY spr.y) + (set lowestMatching spr)))) + (when lowestMatching + (lowestMatching.action) + (lowestMatching.kill)))) + } + // Prompt to map the arrows { (unless instructionText (set instructionText (new FlxText "" TEXT_SIZE)) @@ -58,9 +71,12 @@ (dictSet inputCodes id nextToMap)) }))) + +(prop :FlxTypedGroup actionSprites (new FlxTypedGroup)) + (method :FlxSprite makeTriangleSprite [:ArrowDir dir :String text :Int y &opt :Void->Void action] #|{ - var spr = new ActionSprite(action); + var spr = new ActionSprite(action, dir); spr.makeGraphic(SPRITE_SIZE, SPRITE_SIZE, FlxColor.TRANSPARENT, true); FlxSpriteUtil.beginDraw(FlxColor.WHITE); spr.drawTriangle(0, 0, SPRITE_SIZE); @@ -85,9 +101,15 @@ spr.y = y; if (action != null) { - FlxTween.linearMotion(spr, spr.x, spr.y, spr.x, FlxG.height, 200, false, {onComplete: (_) -> {spr.kill();}}); - } - add(spr); + actionSprites.add(spr); + FlxTween.linearMotion(spr, spr.x, spr.y, spr.x, FlxG.height, 200, false, { + onComplete: (_) -> { + spr.kill(); + } + }); + } else { + add(spr); + } return spr; }|#) \ No newline at end of file