93 lines
2.8 KiB
Plaintext
93 lines
2.8 KiB
Plaintext
(var SPRITE_SPACING 20)
|
|
(var SPRITE_SIZE 100)
|
|
(var TEXT_SIZE 24)
|
|
|
|
(method &override :Void create []
|
|
#|{
|
|
super.create();
|
|
|
|
var background = new FlxSprite();
|
|
background.makeGraphic(1280, 720, FlxColor.BLACK);
|
|
// background.x = 0;
|
|
// background.y = 0;
|
|
|
|
FlxSpriteUtil.beginDraw(FlxColor.WHITE);
|
|
|
|
var x = SPRITE_SPACING;
|
|
var y = FlxG.height - SPRITE_SIZE - SPRITE_SPACING;
|
|
|
|
// Split the screen into text area and dance area:
|
|
var splitX = SPRITE_SPACING * 5 + SPRITE_SIZE * 4;
|
|
background.drawLine(splitX, 0, splitX, FlxG.height);
|
|
// Split the left side into upper/lower:
|
|
background.drawLine(0, FlxG.height - SPRITE_SIZE - SPRITE_SPACING * 2, splitX, FlxG.height - SPRITE_SIZE - SPRITE_SPACING * 2);
|
|
|
|
add(background);
|
|
|
|
makeTriangleSprite(Left, "", y);
|
|
makeTriangleSprite(Down, "", y);
|
|
makeTriangleSprite(Up, "", y);
|
|
makeTriangleSprite(Right, "", y);
|
|
|
|
var actionSprite = makeTriangleSprite(Right, "a", -SPRITE_SIZE, ()->{trace("a");});
|
|
}|#)
|
|
|
|
(prop :Map<Int,ArrowDir> inputCodes (new Map))
|
|
(var DIR_ORDER [ Left Down Up Right ])
|
|
|
|
(prop &mut :FlxText instructionText null)
|
|
(method &override :Void update [:Float 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 "")
|
|
{
|
|
(unless instructionText
|
|
(set instructionText (new FlxText "" TEXT_SIZE))
|
|
(add instructionText))
|
|
(set instructionText.text "Press $nextToMap")
|
|
(instructionText.screenCenter)
|
|
(whenLet [(Some id) (getFirstInputId)]
|
|
(dictSet inputCodes id nextToMap))
|
|
})))
|
|
|
|
(method :FlxSprite makeTriangleSprite [:ArrowDir dir :String text :Int y &opt :Void->Void action]
|
|
#|{
|
|
var spr = new ActionSprite(action);
|
|
spr.makeGraphic(SPRITE_SIZE, SPRITE_SIZE, FlxColor.TRANSPARENT, true);
|
|
FlxSpriteUtil.beginDraw(FlxColor.WHITE);
|
|
spr.drawTriangle(0, 0, SPRITE_SIZE);
|
|
|
|
spr.angle = switch (dir)
|
|
{
|
|
case Left:
|
|
-90;
|
|
case Down:
|
|
180;
|
|
case Up:
|
|
0;
|
|
case Right:
|
|
90;
|
|
};
|
|
var text = new FlxText(text, TEXT_SIZE);
|
|
text.angle = -spr.angle;
|
|
text.color = FlxColor.BLACK;
|
|
spr.stamp(text, Math.floor(SPRITE_SIZE/2) - Math.floor(text.width / 2), Math.floor(SPRITE_SIZE/2) - Math.floor(text.height / 2));
|
|
|
|
spr.x = SPRITE_SPACING + DIR_ORDER.indexOf(dir) * (SPRITE_SIZE + SPRITE_SPACING);
|
|
spr.y = y;
|
|
|
|
if (action != null) {
|
|
FlxTween.linearMotion(spr, spr.x, spr.y, spr.x, FlxG.height, 200, false, {onComplete: (_) -> {spr.kill();}});
|
|
}
|
|
add(spr);
|
|
|
|
return spr;
|
|
}|#) |