mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
push gamepad support for textlistctrl
This commit is contained in:
parent
bb47690dc0
commit
7d0c0ac096
2 changed files with 102 additions and 0 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package gui;
|
||||
|
||||
import hxd.Key;
|
||||
import h2d.filter.Filter;
|
||||
import h2d.HtmlText;
|
||||
import h2d.Flow;
|
||||
|
|
@ -15,6 +16,7 @@ import h2d.Text;
|
|||
import h2d.Font;
|
||||
import src.MarbleGame;
|
||||
import src.Settings;
|
||||
import src.Gamepad;
|
||||
|
||||
class GuiMLTextListCtrl extends GuiControl {
|
||||
public var texts:Array<String>;
|
||||
|
|
@ -39,6 +41,8 @@ class GuiMLTextListCtrl extends GuiControl {
|
|||
var flow:Flow;
|
||||
var _imageLoader:String->Tile;
|
||||
|
||||
var usedGamepad:Bool = false;
|
||||
|
||||
public function new(font:Font, texts:Array<String>, imageLoader:String->Tile, ?filter:Filter = null) {
|
||||
super();
|
||||
this.font = font;
|
||||
|
|
@ -282,4 +286,51 @@ class GuiMLTextListCtrl extends GuiControl {
|
|||
}
|
||||
redrawSelectionRect(hittestrect);
|
||||
}
|
||||
|
||||
public override function update(dt:Float, mouseState:MouseState) {
|
||||
super.update(dt, mouseState);
|
||||
|
||||
var ps = _prevSelected;
|
||||
|
||||
if (Key.isPressed(Key.DOWN) || Gamepad.isPressed(["dpadDown"]) || (Gamepad.getAxis('analogY') > 0.75 && !usedGamepad)) {
|
||||
_prevSelected++;
|
||||
if (_prevSelected >= this.texts.length) {
|
||||
_prevSelected = 0;
|
||||
}
|
||||
}
|
||||
if (Key.isPressed(Key.UP) || Gamepad.isPressed(["dpadUp"]) || (Gamepad.getAxis('analogY') < -0.75 && !usedGamepad)) {
|
||||
_prevSelected--;
|
||||
if (_prevSelected < 0) {
|
||||
_prevSelected = this.texts.length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ps != _prevSelected) {
|
||||
// check if we need to scroll
|
||||
var y = 2 * Settings.uiScale + (_prevSelected * (font.size + 4 * Settings.uiScale)) + g.y;
|
||||
|
||||
var renderRect = this.getRenderRectangle();
|
||||
redrawSelectionRect(renderRect);
|
||||
if (onSelectedFunc != null) {
|
||||
onSelectedFunc(_prevSelected);
|
||||
}
|
||||
|
||||
var hittestrect = this.getHitTestRect(false);
|
||||
|
||||
if (y < 0) {
|
||||
// Scroll up
|
||||
this.scroll = (font.size + 4 * Settings.uiScale) * _prevSelected;
|
||||
this.onScroll(0, this.scroll);
|
||||
} else if (y + font.size + 4 * Settings.uiScale > hittestrect.extent.y) {
|
||||
// Scroll down
|
||||
this.scroll = (font.size + 4 * Settings.uiScale) * _prevSelected;
|
||||
this.onScroll(0, this.scroll);
|
||||
}
|
||||
}
|
||||
|
||||
if (Math.abs(Gamepad.getAxis('analogY')) > 0.75)
|
||||
usedGamepad = true;
|
||||
else
|
||||
usedGamepad = false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package gui;
|
||||
|
||||
import src.Gamepad;
|
||||
import hxd.Key;
|
||||
import h2d.Flow;
|
||||
import h3d.Engine;
|
||||
import h2d.Tile;
|
||||
|
|
@ -33,6 +35,8 @@ class GuiTextListCtrl extends GuiControl {
|
|||
|
||||
public var scrollable:Bool = false;
|
||||
|
||||
var usedGamepad:Bool = false;
|
||||
|
||||
var flow:Flow;
|
||||
|
||||
public function new(font:Font, texts:Array<String>, textColor:Int = 0) {
|
||||
|
|
@ -270,4 +274,51 @@ class GuiTextListCtrl extends GuiControl {
|
|||
}
|
||||
redrawSelectionRect(hittestrect);
|
||||
}
|
||||
|
||||
public override function update(dt:Float, mouseState:MouseState) {
|
||||
super.update(dt, mouseState);
|
||||
|
||||
var ps = _prevSelected;
|
||||
|
||||
if (Key.isPressed(Key.DOWN) || Gamepad.isPressed(["dpadDown"]) || (Gamepad.getAxis('analogY') > 0.75 && !usedGamepad)) {
|
||||
_prevSelected++;
|
||||
if (_prevSelected >= this.texts.length) {
|
||||
_prevSelected = 0;
|
||||
}
|
||||
}
|
||||
if (Key.isPressed(Key.UP) || Gamepad.isPressed(["dpadUp"]) || (Gamepad.getAxis('analogY') < -0.75 && !usedGamepad)) {
|
||||
_prevSelected--;
|
||||
if (_prevSelected < 0) {
|
||||
_prevSelected = this.texts.length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ps != _prevSelected) {
|
||||
// check if we need to scroll
|
||||
var y = 2 * Settings.uiScale + (_prevSelected * (font.size + 4 * Settings.uiScale)) + g.y;
|
||||
|
||||
var renderRect = this.getRenderRectangle();
|
||||
redrawSelectionRect(renderRect);
|
||||
if (onSelectedFunc != null) {
|
||||
onSelectedFunc(_prevSelected);
|
||||
}
|
||||
|
||||
var hittestrect = this.getHitTestRect(false);
|
||||
|
||||
if (y < 0) {
|
||||
// Scroll up
|
||||
this.scroll = (font.size + 4 * Settings.uiScale) * _prevSelected;
|
||||
this.onScroll(0, this.scroll);
|
||||
} else if (y + font.size + 4 * Settings.uiScale > hittestrect.extent.y) {
|
||||
// Scroll down
|
||||
this.scroll = (font.size + 4 * Settings.uiScale) * _prevSelected;
|
||||
this.onScroll(0, this.scroll);
|
||||
}
|
||||
}
|
||||
|
||||
if (Math.abs(Gamepad.getAxis('analogY')) > 0.75)
|
||||
usedGamepad = true;
|
||||
else
|
||||
usedGamepad = false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue