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