Skip to content
This repository has been archived by the owner on Mar 1, 2023. It is now read-only.

Commit

Permalink
More input hacking
Browse files Browse the repository at this point in the history
  • Loading branch information
sam committed Aug 1, 2015
1 parent c07863f commit 87d00c6
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 11 deletions.
135 changes: 125 additions & 10 deletions flixel/input/FlxInput.hx
Original file line number Diff line number Diff line change
@@ -1,8 +1,122 @@
package flixel.input;

import flixel.input.FlxInput.FlxInputState;
import flixel.input.FlxInput.InputStateAgePair;

class FlxInput<T> implements IFlxInput
{
public var ID:T;

public var pressed(get, null):Bool;
public var released(get, null):Bool;
public var justPressed(get, null):Bool;
public var justReleased(get, null):Bool;

private var justPressedQueueFalse:Bool;
private var justReleasedQueueFalse:Bool;

public function new(ID:T)
{
this.ID = ID;
reset();
}

public function dumpInputState():Void
{
trace("justPressed: " + justPressed + " justReleased: " + justReleased + " pressed: " + pressed + " released: " + released + " justPressedQueueFalse: " + justPressedQueueFalse + " justReleasedQueueFalse: " + justReleasedQueueFalse);
}

public function press():Void
{
if (released)
{
justPressed = true;
justPressedQueueFalse = false;
}

pressed = true;
released = false;
}

public function release():Void
{
if (pressed)
{
justReleased = true;
justReleasedQueueFalse = false;
}

released = true;
pressed = false;
}

public function update():Void
{
if (justPressedQueueFalse)
{
justPressed = false;
justPressedQueueFalse = false;
}

if (justReleasedQueueFalse)
{
justReleased = false;
justReleasedQueueFalse = false;
}

if (justPressed)
{
justPressedQueueFalse = true;
}

if (justReleased)
{
justReleasedQueueFalse = true;
}
}

public function reset():Void
{
pressed = false;
released = true;
justPressed = false;
justReleased = false;
justPressedQueueFalse = false;
justReleasedQueueFalse = false;
}

public function hasState(state:FlxInputState):Bool
{
return switch (state)
{
case JUST_RELEASED: justReleased;
case RELEASED: released;
case PRESSED: pressed;
case JUST_PRESSED: justPressed;
}
}

private function get_released():Bool
{
return released;
}

private function get_justReleased():Bool
{
return justReleased;
}

private function get_justPressed():Bool
{
return justPressed;
}

private function get_pressed():Bool
{
return pressed;
}
}

/*
class FlxInput<T> implements IFlxInput
{
public var ID:T;
Expand Down Expand Up @@ -105,15 +219,6 @@ class FlxInput<T> implements IFlxInput
}
}
@:enum
abstract FlxInputState(Int) from Int
{
var JUST_RELEASED = -1;
var RELEASED = 0;
var PRESSED = 1;
var JUST_PRESSED = 2;
}

class InputStateAgePair {
public inline function new(state:FlxInputState, updatesAge:Int = 0)
{
Expand All @@ -123,4 +228,14 @@ class InputStateAgePair {
public var state:FlxInputState;
public var updatesAge:Int;
}
*/

@:enum
abstract FlxInputState(Int) from Int
{
var JUST_RELEASED = -1;
var RELEASED = 0;
var PRESSED = 1;
var JUST_PRESSED = 2;
}
2 changes: 1 addition & 1 deletion flixel/ui/FlxButton.hx
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ class FlxTypedButton<T:FlxSprite> extends FlxSprite implements IFlxInput
#if !FLX_NO_MOUSE
private function onUpEventListener(_):Void
{
if (visible && exists && active && status == FlxButton.PRESSED)
if (visible && exists && active && status == FlxButton.PRESSED) // TODO problem is that PRESSED isn't updated until after the up event listener fires?
{
onUpHandler();
}
Expand Down

0 comments on commit 87d00c6

Please sign in to comment.