Skip to content

a experimental things is here for now (I don't have enough time to create branch)

License

Notifications You must be signed in to change notification settings

ArkoseLabsOfficial/mobile-controls-dev

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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;
	}
}

About

a experimental things is here for now (I don't have enough time to create branch)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Haxe 100.0%