package com.fdangelo.circleworld.universeview.objects;
import com.badlogic.gdx.Application.ApplicationType;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.fdangelo.circleworld.GameLogic;
import com.fdangelo.circleworld.GameLogicState;
import com.fdangelo.circleworld.universeengine.objects.Ship;
import com.fdangelo.circleworld.universeengine.objects.ShipInput;
import com.fdangelo.circleworld.universeview.UniverseViewCamera;
public class ShipViewInput {
private final ShipView shipView;
static public ShipInputMode mode = ShipInputMode.Move;
// private GUIStyle centeredLabelStyle;
// private GUIStyle centeredBoxStyle;
public ShipViewInput(final ShipView shipView) {
this.shipView = shipView;
}
public final void Update(final float deltaTime) {
if (GameLogic.getInstace().getState() != GameLogicState.PlayingShip) {
return;
}
switch (mode) {
case Move:
updateMove();
UniverseViewCamera.getInstance().updateZoomInput(deltaTime);
break;
}
}
private final void updateMove() {
final ShipInput shipInput = ((Ship) shipView.getUniverseObject()).input;
if (Gdx.app.getType() == ApplicationType.Android || Gdx.app.getType() == ApplicationType.iOS) {
int touchCount = 0;
int touch1x = -1, touch1y = -1;
int touch2x = -1, touch2y = -1;
if (Gdx.input.isTouched(0)) {
touch1x = Gdx.input.getX(0);
touch1y = Gdx.input.getY(0);
touchCount++;
}
if (Gdx.input.isTouched(1)) {
touch2x = Gdx.input.getX(1);
touch2y = Gdx.input.getY(1);
touchCount++;
}
final float screenWidth = Gdx.graphics.getWidth();
final float screenHeight = Gdx.graphics.getHeight();
if (touchCount >= 1) {
if (touch1x > screenWidth / 2.0f && touch1y > screenHeight * 0.75f || touchCount > 1 && touch2x > screenWidth / 2.0f
&& touch2y > screenHeight * 0.75f) {
shipInput.moveDirection = 1.0f;
}
if (touch1x < screenWidth / 4.0f && touch1y > screenHeight * 0.75f || touchCount > 1 && touch2x < screenWidth / 4.0f
&& touch2y > screenHeight * 0.75f) {
shipInput.rotateDirection = -1.0f;
} else if (touch1x < screenWidth / 2.0f && touch1y > screenHeight * 0.75f || touchCount > 1 && touch2x < screenWidth / 2.0f
&& touch2y > screenHeight * 0.75f) {
shipInput.rotateDirection = 1.0f;
}
}
} else {
if (Gdx.input.isKeyPressed(Input.Keys.A)) {
shipInput.rotateDirection = -1;
} else if (Gdx.input.isKeyPressed(Input.Keys.D)) {
shipInput.rotateDirection = 1;
} else {
shipInput.rotateDirection = 0;
}
if (Gdx.input.isKeyPressed(Input.Keys.W)) {
shipInput.moveDirection = 1;
} else {
shipInput.moveDirection = 0;
}
// if (Gdx.input.isKeyPressed(Input.Keys.T))
// {
// int clickedThingIndex =
// shipView.getUniverseView().getUniverse().FindClosestRenderedThing(shipView.getUniverseObject().getPositionX(),
// shipView.getUniverseObject().getPositionY(), 30.0f);
// if (clickedThingIndex >= 0)
// GameLogic.Instace.PlayerLeaveShip(shipView.getUniverseView().getUniverse().GetPlanet((short)
// clickedThingIndex));
// }
}
}
/*
* #if ENABLE_ONGUI public void OnGUI() { if (GameLogic.Instace.State !=
* GameLogicState.PlayingShip) return; if (centeredLabelStyle == null) {
* centeredLabelStyle = new GUIStyle(GUI.skin.label);
* centeredLabelStyle.alignment = TextAnchor.MiddleCenter; centeredBoxStyle
* = new GUIStyle(GUI.skin.box); centeredBoxStyle.alignment =
* TextAnchor.MiddleCenter; } InputAreas.ResetInputAreas(); switch(mode) {
* case ShipInputMode.Move: DrawMoveGUI(); break; } } private void
* DrawMoveGUI() { //Draw movement keys if (Application.platform ==
* RuntimePlatform.Android || Application.platform ==
* RuntimePlatform.IPhonePlayer) { InputAreas.AddInputArea(new Rect(0,
* Screen.height - Screen.height * 0.25f, Screen.width, Screen.height *
* 0.25f)); GUI.Button(new Rect(0, Screen.height - Screen.height * 0.25f,
* Screen.width / 4, Screen.height * 0.25f), "Rotate Left"); GUI.Button(new
* Rect(Screen.width / 4.0f, Screen.height - Screen.height * 0.25f,
* Screen.width / 4, Screen.height * 0.25f), "Rotate Right"); GUI.Button(new
* Rect(Screen.width / 2.0f, Screen.height - Screen.height * 0.25f,
* Screen.width / 2, Screen.height * 0.25f), "Move Forward"); } //Draw
* switch to avatar button InputAreas.AddInputArea(new Rect(Screen.width -
* (Screen.width / 8) * 3.0f, 0, Screen.width / 8, Screen.height / 8)); if
* (GUI.Button(new Rect(Screen.width - (Screen.width / 8) * 3.0f, 0,
* Screen.width / 8, Screen.height / 8), "LEAVE SHIP")) { int
* clickedThingIndex =
* shipView.UniverseView.Universe.FindClosestRenderedThing
* (shipView.UniverseObject.Position, 30.0f); if (clickedThingIndex >= 0)
* GameLogic
* .Instace.PlayerLeaveShip(shipView.UniverseView.Universe.GetPlanet
* ((ushort) clickedThingIndex)); } } #endif
*/
}