diff --git a/projects/handloose/Project.xml b/projects/handloose/Project.xml
index 09cef035..137a064d 100644
--- a/projects/handloose/Project.xml
+++ b/projects/handloose/Project.xml
@@ -34,6 +34,7 @@
+
diff --git a/projects/handloose/source/TypingState.hx b/projects/handloose/source/TypingState.hx
index 372a4cdd..debc0390 100644
--- a/projects/handloose/source/TypingState.hx
+++ b/projects/handloose/source/TypingState.hx
@@ -6,20 +6,10 @@ import flixel.FlxSprite;
import flixel.util.FlxColor;
import flixel.input.gamepad.FlxGamepad;
import flixel.text.FlxText;
+import haxe.ds.Option;
using flixel.util.FlxSpriteUtil;
-enum ButtonBehavior
-{
- Cycle(behaviors:Array);
- Tab;
- Control;
- Backspace;
- Shift;
- Space;
- Letter(char:String);
-}
-
// In DDR order:
enum ArrowDir
{
@@ -29,112 +19,9 @@ enum ArrowDir
Right;
}
+@:build(kiss.Kiss.build())
class TypingState extends FlxState
{
- var buttonIDs:Map;
- var buttonBehaviors:Map;
-
- override public function create()
- {
- super.create();
-
- // for now, hard-coded for the wii pad only
- buttonIDs = [
- 16 => "-", 12 => "+", 7 => "B", 17 => "Up", 6 => "A", 19 => "Left", 20 => "Right", 9 => "Y", 18 => "Down", 8 => "X"
- ];
-
- buttonBehaviors = [
- "-" => Tab,
- "+" => Control,
- "B" => Cycle([
- Letter("m"), Letter("f"), Letter("w"), Letter("y"), Letter("p"), Letter("v"), Letter("b"), Letter("g"), Letter("k"), Letter("j"), Letter("q"),
- Letter("x"), Letter("z")]),
- "A" => Cycle([
- Letter("g"), Letter("k"), Letter("j"), Letter("q"), Letter("x"), Letter("z"), Letter("m"), Letter("f"), Letter("w"), Letter("y"), Letter("p"),
- Letter("v"), Letter("b")]),
- "Left" => Cycle([
- Letter("s"),
- Letter("h"),
- Letter("r"),
- Letter("d"),
- Letter("l"),
- Letter("u"),
- Letter("c"),
- ]),
- "Up" => Cycle([Letter("e"), Letter("t"), Letter("a"), Letter("o"), Letter("i"), Letter("n")]),
- "Down" => Cycle([Letter("o"), Letter("i"), Letter("n"), Letter("e"), Letter("t"), Letter("a")]),
- "Y" => Backspace,
- "Right" => Shift,
- "X" => Space
- ];
-
- var background = new FlxSprite();
- background.makeGraphic(1280, 720, FlxColor.BLACK);
- // background.x = 0;
- // background.y = 0;
-
- FlxSpriteUtil.beginDraw(FlxColor.WHITE);
-
- var spacing = 20;
- var shapeSize = 100;
- var x = spacing;
- var y = 720 - shapeSize - spacing;
-
- // Split the screen into text area and dance area:
- var splitX = 1280 / 2 + shapeSize;
- background.drawLine(splitX, 0, splitX, 720);
- // Split the left side into upper/lower:
- background.drawLine(0, 720 - shapeSize - spacing * 2, splitX, 720 - shapeSize - spacing * 2);
-
- var bSprite = makeCircleSprite("B", x, y);
- x += shapeSize + spacing;
- var leftSprite = makeTriangleSprite(Left, "", x, y);
- x += shapeSize + spacing;
- var downSprite = makeTriangleSprite(Down, "", x, y);
- x += shapeSize + spacing;
- var upSprite = makeTriangleSprite(Up, "", x, y);
- x += shapeSize + spacing;
- var rightSprite = makeTriangleSprite(Right, "", x, y);
- x += shapeSize + spacing;
- var aSprite = makeCircleSprite("A", x, y);
-
- add(background);
- add(bSprite);
- add(leftSprite);
- add(downSprite);
- add(upSprite);
- add(rightSprite);
- add(aSprite);
- }
-
- function makeTriangleSprite(dir:ArrowDir, text:String, x:Int, y:Int):FlxSprite
- {
- var spr = new FlxSprite();
- spr.makeGraphic(100, 100, FlxColor.TRANSPARENT, true);
- FlxSpriteUtil.beginDraw(FlxColor.WHITE);
- spr.drawTriangle(0, 0, 100);
-
- spr.angle = switch (dir)
- {
- case Left:
- -90;
- case Down:
- 180;
- case Up:
- 0;
- case Right:
- 90;
- };
- var text = new FlxText(text, 24);
- text.angle = -spr.angle;
- text.color = FlxColor.BLACK;
- spr.stamp(text, 50 - Math.floor(text.width / 2), 50 - Math.floor(text.height / 2));
-
- spr.x = x;
- spr.y = y;
- return spr;
- }
-
function makeCircleSprite(text:String, x:Int, y:Int):FlxSprite
{
var spr = new FlxSprite();
@@ -153,20 +40,25 @@ class TypingState extends FlxState
{
super.update(elapsed);
+ var lastId = getFirstInputId();
+ }
+
+ function getFirstInputId():Option {
// Important: can be null if there's no active gamepad yet!
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
if (gamepad != null)
{
- updateGamepadInput(gamepad);
+ var firstGamepadId = gamepad.firstJustPressedRawID();
+ if (firstGamepadId != -1) {
+ return Some(firstGamepadId);
+ }
}
- }
- function updateGamepadInput(gamepad:FlxGamepad):Void
- {
- var id = gamepad.firstJustPressedRawID();
- if (id != -1)
- {
- var whichButton = buttonIDs[id];
+ var firstKeyId = FlxG.keys.firstJustPressed();
+ if (firstKeyId != -1) {
+ return Some(firstKeyId);
+ } else {
+ return None;
}
}
}
diff --git a/projects/handloose/source/TypingState.kiss b/projects/handloose/source/TypingState.kiss
new file mode 100644
index 00000000..df094cf2
--- /dev/null
+++ b/projects/handloose/source/TypingState.kiss
@@ -0,0 +1,73 @@
+(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 spacing = 20;
+ var shapeSize = 100;
+ var x = spacing;
+ var y = 720 - shapeSize - spacing;
+
+ // Split the screen into text area and dance area:
+ var splitX = 1280 / 2 + shapeSize;
+ background.drawLine(splitX, 0, splitX, 720);
+ // Split the left side into upper/lower:
+ background.drawLine(0, 720 - shapeSize - spacing * 2, splitX, 720 - shapeSize - spacing * 2);
+
+ var bSprite = makeCircleSprite("B", x, y);
+ x += shapeSize + spacing;
+ var leftSprite = makeTriangleSprite(Left, "", x, y);
+ x += shapeSize + spacing;
+ var downSprite = makeTriangleSprite(Down, "", x, y);
+ x += shapeSize + spacing;
+ var upSprite = makeTriangleSprite(Up, "", x, y);
+ x += shapeSize + spacing;
+ var rightSprite = makeTriangleSprite(Right, "", x, y);
+ x += shapeSize + spacing;
+ var aSprite = makeCircleSprite("A", x, y);
+
+ add(background);
+ add(bSprite);
+ add(leftSprite);
+ add(downSprite);
+ add(upSprite);
+ add(rightSprite);
+ add(aSprite);
+ }|#)
+
+(var SPRITE_SIZE 100)
+(var TEXT_SIZE 24)
+
+(method :FlxSprite makeTriangleSprite [:ArrowDir dir :String text :Int x :Int y]
+ #|{
+ var spr = new FlxSprite();
+ 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 = x;
+ spr.y = y;
+ return spr;
+ }|#)
\ No newline at end of file