282 lines
9.3 KiB
Haxe
282 lines
9.3 KiB
Haxe
package android;
|
|
|
|
import android.flixel.FlxButton;
|
|
import android.flixel.FlxHitbox;
|
|
import android.flixel.FlxNewHitbox;
|
|
import android.flixel.FlxVirtualPad;
|
|
import flixel.FlxSubState;
|
|
import flixel.math.FlxPoint;
|
|
import flixel.text.FlxText;
|
|
import flixel.FlxSprite;
|
|
import flixel.addons.display.FlxBackdrop;
|
|
import flixel.FlxG;
|
|
import flixel.util.FlxColor;
|
|
import flixel.graphics.frames.FlxAtlasFrames;
|
|
import flixel.tweens.FlxTween;
|
|
import flixel.addons.display.FlxGridOverlay;
|
|
import flixel.tweens.FlxEase;
|
|
|
|
|
|
import flixel.addons.transition.FlxTransitionableState;
|
|
|
|
|
|
import flixel.util.FlxSave;
|
|
|
|
import flixel.input.touch.FlxTouch;
|
|
|
|
|
|
|
|
import openfl.utils.Assets;
|
|
|
|
|
|
class AndroidControlsSubState extends FlxSubState {
|
|
final controlsItems:Array<String> = ['Pad-Right', 'Pad-Left', 'Pad-Custom', 'Pad-Duo', 'Hitbox', 'Keyboard'];
|
|
var virtualPad:FlxVirtualPad;
|
|
var hitbox:FlxHitbox;
|
|
var newHitbox:FlxNewHitbox;
|
|
var upPosition:FlxText;
|
|
var downPosition:FlxText;
|
|
var leftPosition:FlxText;
|
|
var rightPosition:FlxText;
|
|
var inputText:FlxText;
|
|
var noAndroidControlsText:FlxText;
|
|
var tipText:FlxText;
|
|
var leftArrow:FlxSprite;
|
|
var rightArrow:FlxSprite;
|
|
var currentlySelected:Int = AndroidControls.getMode();
|
|
var buttonBinded:Bool = false;
|
|
var bindButton:FlxButton;
|
|
var resetButton:FlxButton;
|
|
var background:FlxSprite;
|
|
var velocityBackground:FlxBackdrop;
|
|
|
|
override function create() {
|
|
cameras = [FlxG.cameras.list[FlxG.cameras.list.length-1]];
|
|
background = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.fromHSB(FlxG.random.int(0, 359), FlxG.random.float(0, 0.8), FlxG.random.float(0.3, 1)));
|
|
background.alpha = 0.00001;
|
|
background.scrollFactor.set();
|
|
add(background);
|
|
|
|
velocityBackground = new FlxBackdrop(FlxGridOverlay.createGrid(30, 30, 60, 60, true, 0x3B161932, 0x0), XY);
|
|
velocityBackground.velocity.set(FlxG.random.bool(50) ? 90 : -90, FlxG.random.bool(50) ? 90 : -90);
|
|
velocityBackground.visible = true;
|
|
velocityBackground.alpha = 0;
|
|
add(velocityBackground);
|
|
|
|
resetButton = new FlxButton(FlxG.width - 200, 50, 'Reset', function() {
|
|
if (resetButton.visible) {
|
|
virtualPad.buttonUp.x = FlxG.width - 258;
|
|
virtualPad.buttonUp.y = FlxG.height - 408;
|
|
virtualPad.buttonDown.x = FlxG.width - 258;
|
|
virtualPad.buttonDown.y = FlxG.height - 201;
|
|
virtualPad.buttonRight.x = FlxG.width - 132;
|
|
virtualPad.buttonRight.y = FlxG.height - 309;
|
|
virtualPad.buttonLeft.x = FlxG.width - 384;
|
|
virtualPad.buttonLeft.y = FlxG.height - 309;
|
|
}
|
|
});
|
|
resetButton.label.setFormat('VCR OSD Mono', 16, FlxColor.WHITE, CENTER);
|
|
|
|
resetButton.setGraphicSize(Std.int(resetButton.width) * 3);
|
|
resetButton.color = FlxColor.RED;
|
|
resetButton.visible = false;
|
|
add(resetButton);
|
|
|
|
virtualPad = new FlxVirtualPad(NONE, NONE);
|
|
virtualPad.visible = false;
|
|
add(virtualPad);
|
|
|
|
newHitbox = new FlxNewHitbox();
|
|
newHitbox.visible = false;
|
|
add(newHitbox);
|
|
|
|
hitbox = new FlxHitbox();
|
|
hitbox.visible = false;
|
|
add(hitbox);
|
|
|
|
noAndroidControlsText = new FlxText(0, 50, 0, 'You dont have any Android Controls!', 32);
|
|
inputText = new FlxText(0, 100, 0, '', 32);
|
|
noAndroidControlsText.setFormat('VCR OSD Mono', 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
|
inputText.setFormat('VCR OSD Mono', 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
|
|
|
noAndroidControlsText.borderSize = 2.4;
|
|
noAndroidControlsText.screenCenter();
|
|
noAndroidControlsText.visible = false;
|
|
inputText.borderSize = 2.4;
|
|
inputText.screenCenter(X);
|
|
add(noAndroidControlsText);
|
|
add(inputText);
|
|
|
|
leftArrow = new FlxSprite(inputText.x - 60, inputText.y - 25);
|
|
leftArrow.frames = FlxAtlasFrames.fromSparrow(Assets.getBitmapData('assets/android/menu/arrows.png'),
|
|
Assets.getText('assets/android/menu/arrows.xml'));
|
|
leftArrow.animation.addByPrefix('idle', 'arrow left');
|
|
leftArrow.animation.play('idle');
|
|
add(leftArrow);
|
|
|
|
rightArrow = new FlxSprite(inputText.x + inputText.width + 10, inputText.y - 25);
|
|
rightArrow.frames = FlxAtlasFrames.fromSparrow(Assets.getBitmapData('assets/android/menu/arrows.png'),
|
|
Assets.getText('assets/android/menu/arrows.xml'));
|
|
rightArrow.animation.addByPrefix('idle', 'arrow right');
|
|
rightArrow.animation.play('idle');
|
|
add(rightArrow);
|
|
|
|
tipText = new FlxText(10, FlxG.height - 24, 0, 'Press BACK on your phone to get back to the options menu', 16);
|
|
leftPosition = new FlxText(10, FlxG.height - 64, 0, '', 16);
|
|
rightPosition = new FlxText(10, FlxG.height - 44, 0, '', 16);
|
|
downPosition = new FlxText(10, FlxG.height - 84, 0, '', 16);
|
|
upPosition = new FlxText(10, FlxG.height - 104, 0, '', 16);
|
|
tipText.setFormat('VCR OSD Mono', 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
|
rightPosition.setFormat('VCR OSD Mono', 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
|
leftPosition.setFormat('VCR OSD Mono', 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
|
downPosition.setFormat('VCR OSD Mono', 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
|
upPosition.setFormat('VCR OSD Mono', 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
|
|
|
tipText.scrollFactor.set();
|
|
rightPosition.borderSize = 2.4;
|
|
leftPosition.borderSize = 2.4;
|
|
downPosition.borderSize = 2.4;
|
|
upPosition.borderSize = 2.4;
|
|
|
|
add(tipText);
|
|
add(rightPosition);
|
|
add(leftPosition);
|
|
add(downPosition);
|
|
add(upPosition);
|
|
|
|
changeSelection();
|
|
|
|
super.create();
|
|
|
|
FlxTween.tween(background, {alpha: 0.6}, 1, {ease: FlxEase.circInOut});
|
|
FlxTween.tween(velocityBackground, {alpha: 1}, 0.5, {ease: FlxEase.quadOut});
|
|
}
|
|
|
|
override function update(elapsed:Float) {
|
|
if (FlxG.android.justPressed.BACK || FlxG.android.justReleased.BACK) {
|
|
AndroidControls.setMode(currentlySelected);
|
|
|
|
if (controlsItems[Math.floor(currentlySelected)] == 'Pad-Custom')
|
|
AndroidControls.setCustomMode(virtualPad);
|
|
|
|
FlxTransitionableState.skipNextTransOut = true;
|
|
FlxG.resetState();
|
|
}
|
|
|
|
super.update(elapsed);
|
|
|
|
inputText.screenCenter(X);
|
|
leftArrow.x = inputText.x - 60;
|
|
rightArrow.x = inputText.x + inputText.width + 10;
|
|
|
|
for (touch in FlxG.touches.list) {
|
|
if (touch.overlaps(leftArrow) && touch.justPressed)
|
|
changeSelection(-1);
|
|
else if (touch.overlaps(rightArrow) && touch.justPressed)
|
|
changeSelection(1);
|
|
|
|
if (controlsItems[Math.floor(currentlySelected)] == 'Pad-Custom') {
|
|
if (buttonBinded) {
|
|
if (touch.justReleased) {
|
|
bindButton = null;
|
|
buttonBinded = false;
|
|
} else
|
|
moveButton(touch, bindButton);
|
|
} else {
|
|
if (virtualPad.buttonUp.justPressed)
|
|
moveButton(touch, virtualPad.buttonUp);
|
|
|
|
if (virtualPad.buttonDown.justPressed)
|
|
moveButton(touch, virtualPad.buttonDown);
|
|
|
|
if (virtualPad.buttonRight.justPressed)
|
|
moveButton(touch, virtualPad.buttonRight);
|
|
|
|
if (virtualPad.buttonLeft.justPressed)
|
|
moveButton(touch, virtualPad.buttonLeft);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (virtualPad != null) {
|
|
if (virtualPad.buttonUp != null)
|
|
upPosition.text = 'Button Up X:' + virtualPad.buttonUp.x + ' Y:' + virtualPad.buttonUp.y;
|
|
|
|
if (virtualPad.buttonDown != null)
|
|
downPosition.text = 'Button Down X:' + virtualPad.buttonDown.x + ' Y:' + virtualPad.buttonDown.y;
|
|
|
|
if (virtualPad.buttonLeft != null)
|
|
leftPosition.text = 'Button Left X:' + virtualPad.buttonLeft.x + ' Y:' + virtualPad.buttonLeft.y;
|
|
|
|
if (virtualPad.buttonRight != null)
|
|
rightPosition.text = 'Button Right x:' + virtualPad.buttonRight.x + ' Y:' + virtualPad.buttonRight.y;
|
|
}
|
|
}
|
|
|
|
function changeSelection(change:Int = 0):Void {
|
|
currentlySelected += change;
|
|
|
|
if (currentlySelected < 0)
|
|
currentlySelected = controlsItems.length - 1;
|
|
if (currentlySelected >= controlsItems.length)
|
|
currentlySelected = 0;
|
|
|
|
inputText.text = controlsItems[currentlySelected];
|
|
|
|
var daChoice:String = controlsItems[Math.floor(currentlySelected)];
|
|
|
|
switch (daChoice) {
|
|
case 'Pad-Right':
|
|
hitbox.visible = false;
|
|
virtualPad.destroy();
|
|
virtualPad = new FlxVirtualPad(RIGHT_FULL, NONE);
|
|
add(virtualPad);
|
|
case 'Pad-Left':
|
|
hitbox.visible = false;
|
|
virtualPad.destroy();
|
|
virtualPad = new FlxVirtualPad(LEFT_FULL, NONE);
|
|
add(virtualPad);
|
|
case 'Pad-Custom':
|
|
hitbox.visible = false;
|
|
virtualPad.destroy();
|
|
virtualPad = AndroidControls.getCustomMode(new FlxVirtualPad(RIGHT_FULL, NONE));
|
|
add(virtualPad);
|
|
case 'Pad-Duo':
|
|
hitbox.visible = false;
|
|
virtualPad.destroy();
|
|
virtualPad = new FlxVirtualPad(BOTH_FULL, NONE);
|
|
add(virtualPad);
|
|
case 'Hitbox':
|
|
virtualPad.visible = false;
|
|
case 'Keyboard':
|
|
hitbox.visible = false;
|
|
virtualPad.visible = false;
|
|
}
|
|
|
|
if (daChoice != "Hitbox") {
|
|
hitbox.visible = false;
|
|
newHitbox.visible = false;
|
|
} else {
|
|
if (ClientPrefs.hitboxSelection != 'New') {
|
|
hitbox.visible = true;
|
|
} else {
|
|
newHitbox.visible = true;
|
|
}
|
|
}
|
|
|
|
noAndroidControlsText.visible = daChoice == 'Keyboard';
|
|
resetButton.visible = daChoice == 'Pad-Custom';
|
|
upPosition.visible = daChoice == 'Pad-Custom';
|
|
downPosition.visible = daChoice == 'Pad-Custom';
|
|
leftPosition.visible = daChoice == 'Pad-Custom';
|
|
rightPosition.visible = daChoice == 'Pad-Custom';
|
|
}
|
|
|
|
function moveButton(touch:FlxTouch, button:FlxButton):Void {
|
|
bindButton = button;
|
|
bindButton.x = touch.x - Std.int(bindButton.width / 2);
|
|
bindButton.y = touch.y - Std.int(bindButton.height / 2);
|
|
buttonBinded = true;
|
|
}
|
|
}
|