Ver Fonte

Pad - Detect trigger buttons (hlsdl + hldx) (#322)

trethaller há 7 anos atrás
pai
commit
e1e54e360d
2 ficheiros alterados com 23 adições e 2 exclusões
  1. 17 0
      hxd/Pad.hx
  2. 6 2
      samples/Pad.hx

+ 17 - 0
hxd/Pad.hx

@@ -103,6 +103,10 @@ class Pad {
 	};
 	#end
 
+	#if hl
+	public static var ANALOG_BUTTON_THRESHOLDS = { press: 0.3, release: 0.25 };
+	#end
+
 	public static var DEFAULT_CONFIG =
 		#if hlsdl CONFIG_SDL
 		#elseif flash CONFIG_XBOX
@@ -297,6 +301,15 @@ class Pad {
 		buttons[ btnId ] = down;
 		values[ btnId ] = down ? 1 : 0;
 	}
+
+	function _detectAnalogButton(index: Int, v: Float) {
+		if(v > ANALOG_BUTTON_THRESHOLDS.press && v > values[index]) {
+			buttons[ index ] = true;
+		}
+		if(v < ANALOG_BUTTON_THRESHOLDS.release && v < values[index]) {
+			buttons[ index ] = false;
+		}
+	}
 	#end
 
 	#if hlsdl
@@ -304,6 +317,8 @@ class Pad {
 	inline function _setAxis( axisId : Int, value : Int ){
 		var v = value / 0x7FFF;
 
+		_detectAnalogButton(axisId, v);
+
 		// Invert Y axis
 		if( axisId == 1 || axisId == 3 )
 			values[ axisId ] = -v;
@@ -378,6 +393,8 @@ class Pad {
 			for( i in 0...GameController.NUM_AXES ){
 				var ii = GameController.NUM_BUTTONS + i;
 				var v = p.d.getAxis(i);
+				p.prevButtons[ii] = p.buttons[ii];
+				p._detectAnalogButton(ii, v);
 				p.values[ii] = v;
 				if( ii == GameController.CONFIG.analogX )
 					p.xAxis = v;

+ 6 - 2
samples/Pad.hx

@@ -71,7 +71,7 @@ class PadUI extends h2d.Sprite {
 
 		bg = new h2d.Graphics(this);
 		bg.lineStyle(1,0xFFFFFF,0.5);
-		bg.drawRect(0,0,600,160);
+		bg.drawRect(0,0,660,160);
 		bg.lineStyle(1,0xFFFFFF,1);
 		bg.drawRect(20,20,100,100);
 		bg.drawRect(140,20,100,100);
@@ -113,7 +113,7 @@ class PadUI extends h2d.Sprite {
 		buttons = new Map();
 
 		var x = 0;
-		for( n in ["A","B","X","Y","LB","RB","back","start","dpadUp","dpadDown","dpadLeft","dpadRight"] ){
+		for( n in ["A","B","X","Y","LB","RB","LT","RT","back","start","dpadUp","dpadDown","dpadLeft","dpadRight"] ){
 			var t = new h2d.Text(fnt,this);
 			x += 20;
 			t.x = x;
@@ -168,5 +168,9 @@ class PadUI extends h2d.Sprite {
 		if( !wasPressed && pad.isDown(conf.A) && pad.values[conf.LT] > 0 && pad.values[conf.RT] > 0 )
 			pad.rumble( pad.values[conf.LT], pad.values[conf.RT]*0.5 );
 		wasPressed = pad.isDown(conf.A);
+
+		if(hxd.Key.isDown(hxd.Key.ESCAPE)) {
+			hxd.System.exit();
+		}
 	}
 }