Files
FNF-i486-Engine/source/android/AndroidControlsSubState.hx
JordanSantiagoYT ed28aef844 and roid
fixed android tghign
2023-11-18 02:24:00 -05:00

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