mobile-controls

a Mobile Control Library, built for simplicity.
https://github.com/ArkoseLabsOfficial/mobile-controls

To install, run:

haxelib install mobile-controls 1.0.0 

See using Haxelib in Haxelib documentation for more information.

README.md

Mobile Controls


a library made to make the process of adding a mobile controls way easier.



USAGE

Creating & Handling a mobile controls should be fairly easy and very much self-explanatory

  • NOTE: MobilePad & Hitbox are using the same base, so their handling is almost same
// *
// * src/Main.hx
// *

import mobile.MobileConfig;

class Main {
	static function main():Void {
		MobileConfig.init('MobileControls', 'ArkoseLabs/HaxeTale', 'mobile/',
			[
				'MobilePad/DPadModes',
				'MobilePad/ActionModes',
				'Hitbox/HitboxModes',
			], [
				DPAD,
				ACTION,
				HITBOX
			]
		);
	}
}

// *
// * src/PlayState.hx
// *

import mobile.MobileControlManager;
class PlayState extends FlxState {
	public static var instance:PlayState;
	public var manager:MobileControlManager;
	public function new() {
		super();
		instance = this;
		manager = new MobileControlManager(this);
	}
	override function create() {
		super.create();
		/* MobilePad Setup */
		manager.addMobilePad('Test', 'Test');
		manager.addMobilePadCamera();

		/* Hitbox Setup */
		manager.addHitbox('Test');
		manager.addHitboxCamera();

		/* JoyStick Setup */
		function onJoystickMove(angle:Float, strength:Float, directionID:Float, directionName:String):Void
		{
			trace('angle:$angle');
			trace('strength:$strength');
			trace('directionID:$directionID');
			trace('directionName:$directionName');
		}

		// manager.addJoyStick(x, y, texture, callback);
		manager.addJoyStick(0, 0, 'JoyStick/joystick', onJoystickMove); //Example With Texture (NOTE: texture and callback is optional)
		manager.joyStick.scale.set(0.7, 0.7);
		manager.addJoyStickCamera();
	}
	override function update(elapsed:Float) {
		//with using buttonIDs
		if (manager.mobilePad.justPressed('A')) {
			trace('hello from A');
		}
		//alternative (buttonName special)
		if (manager.mobilePad.getButton('buttonA').justPressed) {
			trace('hello from buttonA');
		}

		//with using buttonIDs
		if (manager.hitbox.justPressed('up')) {
			trace('hello from buttonUp');
		}
		//alternative (buttonName special)
		if (manager.hitbox.getButton('buttonUp').justPressed) {
			trace('hello from buttonUp');
		}

		if (manager.joyStick.pressed('up')) {
			trace('hello from joyStick up');
		}
	}
}

// *
// * An Example (Probably This Class Won't Work)
// * src/Controls.hx
// *

import flixel.FlxG;

class Controls {
	public var LEFT(get, never):Bool;
	public var RIGHT(get, never):Bool;
	public var UP(get, never):Bool;
	public var DOWN(get, never):Bool;
	public var LEFT_P(get, never):Bool;
	public var RIGHT_P(get, never):Bool;
	public var UP_P(get, never):Bool;
	public var DOWN_P(get, never):Bool;
	public var LEFT_R(get, never):Bool;
	public var RIGHT_R(get, never):Bool;
	public var UP_R(get, never):Bool;
	public var DOWN_R(get, never):Bool;

	public function get_LEFT() return justPressed('left');
	public function get_RIGHT() return justPressed('right');
	public function get_UP() return justPressed('up');
	public function get_DOWN() return justPressed('down');
	public function get_LEFT_P() return pressed('left');
	public function get_RIGHT_P() return pressed('right');
	public function get_UP_P() return pressed('up');
	public function get_DOWN_P() return pressed('down');
	public function get_LEFT_R() return justReleased('left');
	public function get_RIGHT_R() return justReleased('right');
	public function get_UP_R() return justReleased('up');
	public function get_DOWN_R() return justReleased('down');

	public function new() {}

	public static var mobileBinds:Map<String, Dynamic> = [
		'up'			=> ['mpad_up', 'mpad_w'],
		'left'			=> ['mpad_left', 'mpad_a'],
		'down'			=> ['mpad_down', 'mpad_s'],
		'right'			=> ['mpad_right', 'mpad_d']
	];

	public function justPressed(keyName:String) {
		return mobilePadJustPressed(mobileBinds[keyName]) || joyStickJustPressed(keyName);
	}

	public function pressed(keyName:String) {
		return mobilePadPressed(mobileBinds[keyName]) || joyStickPressed(keyName);
	}
	
	public function released(keyName:String) {
		return mobilePadJustReleased(mobileBinds[keyName]) || joyStickJustReleased(keyName);
	}

	public var requestedInstance(get, default):Dynamic;
	@:noCompletion
	private function get_requestedInstance():Dynamic
	{
		return PlayState.instance;
	}

	private function joyStickPressed(key:String):Bool
	{
		if (key != null && requestedInstance.joyStick != null)
			if (requestedInstance.joyStick.pressed(key) == true)
				return true;

		return false;
	}

	private function joyStickJustPressed(key:String):Bool
	{
		if (key != null && requestedInstance.joyStick != null)
			if (requestedInstance.joyStick.justPressed(key) == true)
				return true;

		return false;
	}

	private function joyStickJustReleased(key:String):Bool
	{
		if (key != null && requestedInstance.joyStick != null)
			if (requestedInstance.joyStick.justReleased(key) == true)
				return true;

		return false;
	}

	private function mobilePadPressed(keys:Array<String>):Bool
	{
		if (keys != null && requestedInstance.mobilePad != null)
			if (requestedInstance.mobilePad.pressed(keys) == true)
				return true;

		return false;
	}

	private function mobilePadJustPressed(keys:Array<String>):Bool
	{
		if (keys != null && requestedInstance.mobilePad != null)
			if (requestedInstance.mobilePad.justPressed(keys) == true)
				return true;

		return false;
	}

	private function mobilePadJustReleased(keys:Array<String>):Bool
	{
		if (keys != null && requestedInstance.mobilePad != null)
			if (requestedInstance.mobilePad.justReleased(keys) == true)
				return true;

		return false;
	}
}
Contributors
KralOyuncu2010x
ArkoseLabs
Version
1.0.0
Published
2 months ago
Dependencies
License
MIT

All libraries are free

Every month, more than a thousand developers use Haxelib to find, share, and reuse code — and assemble it in powerful new ways. Enjoy Haxe; It is great!

Explore Haxe

Haxe Manual

Haxe Code Cookbook

Haxe API documentation

You can try Haxe in the browser! try.haxe.org

Join us on GitHub!

Haxe is being developed on GitHub. Feel free to contribute or report issues to our projects.

Haxe on GitHub