skeleton-wars/Assets/InputManagerScript.cs

294 lines
6.9 KiB
C#

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class InputManagerScript : MonoBehaviour {
public enum MyColor {
red,
green,
blue,
yellow,
cyan
}
private GameObject cursor;
public Image imageMove;
public Image imageAttack;
public Image imageEndTurn;
private float accTime;
private float timeStep;
private float timeExp;
private float timeExpStep;
private float timeExpLimit;
private bool unitMenu;
private bool openMenu;
private bool unitActionSelected;
private bool generalActionSelected;
private bool imageSelected;
private Image[] menuOptions;
private int currentMenuOption;
private GameObject selectedGO;
private int actionOption;
private Color menuCursorColor = new Color (1f, 1f, 0f);
private MyColor currentCursorColor = MyColor.cyan;
private TurnManagerScript tms;
// Use this for initialization
void Start () {
cursor = GameObject.Find ("Cursor");
//cursor.transform.Rotate (new Vector3(90, 0, 0));
unitMenu = false;
openMenu = false;
actionOption = -1;
unitActionSelected = false;
generalActionSelected = false;
selectedGO = null;
currentMenuOption = 0;
imageSelected = false;
}
// Update is called once per frame
void Update () {
if (!openMenu)
moveCursor ();
else if (openMenu)
moveMenuCursor ();
}
void moveMenuCursor() {
if (Input.GetKeyDown (KeyCode.Escape)) {
openMenu = false;
unitMenu = false;
for (int i = 0; i < menuOptions.Length; i++) {
DestroyObject (menuOptions [i]);
}
actionOption = -1;
}
else if (Input.GetKeyDown (KeyCode.D) && menuOptions.Length > 1) {
int previousOption = currentMenuOption;
currentMenuOption = (currentMenuOption+1) % menuOptions.Length;
menuOptions[currentMenuOption].color = menuCursorColor;
menuOptions[previousOption].color = new Color (1f, 1f, 1f);
}
else if (Input.GetKeyDown (KeyCode.A) && menuOptions.Length > 1) {
int previousOption = currentMenuOption;
currentMenuOption -= 1;
if (currentMenuOption < 0)
currentMenuOption = menuOptions.Length - 1;
menuOptions[currentMenuOption].color = menuCursorColor;
menuOptions[previousOption].color = new Color (1f, 1f, 1f);
}
else if (Input.GetKeyDown (KeyCode.Space)) {
actionOption = currentMenuOption;
if (unitMenu) {
unitMenu = false;
unitActionSelected = true;
changeCursorColor(MyColor.green);
} else {
if (actionOption == 0) {
endTurn ();
actionOption = -1;
changeCursorColor (MyColor.cyan);
} else {
generalActionSelected = true;
changeCursorColor(MyColor.green);
}
}
openMenu = false;
for (int i = 0; i < menuOptions.Length; i++) {
DestroyObject (menuOptions [i]);
}
}
}
void moveCursor() {
if (Input.GetKeyDown (KeyCode.A)) {
cursor.transform.Translate (-1f, 0, 0);
updateCursorColor ();
}
if (Input.GetKeyDown (KeyCode.D)) {
cursor.transform.Translate (1f, 0, 0);
updateCursorColor ();
}
if (Input.GetKeyDown (KeyCode.W)) {
cursor.transform.Translate (0, 1f, 0);
updateCursorColor ();
}
if (Input.GetKeyDown (KeyCode.S)) {
cursor.transform.Translate (0, -1f, 0);
updateCursorColor ();
}
if (Input.GetKeyDown (KeyCode.Escape)) {
if (unitActionSelected) {
unitActionSelected = false;
changeCursorColor (MyColor.cyan);
}
}
if (Input.GetKeyDown (KeyCode.Space)) {
if (!unitMenu && !unitActionSelected && !generalActionSelected)
openMenuOnSelection ();
else if (unitActionSelected) {
Vector3 tpos = cursor.transform.position;
switch (actionOption) {
case 0:
if (tms.canAttackTo (selectedGO, (int)tpos.z, (int)tpos.x)) {
tms.attackTo (selectedGO, (int)tpos.z, (int)tpos.x);
changeCursorColor (MyColor.cyan);
} else {
changeCursorColor (MyColor.red);
}
break;
case 1:
if (tms.canMoveTo (selectedGO, (int)tpos.z, (int)tpos.x)) {
tms.moveTo (selectedGO, (int)tpos.z, (int)tpos.x);
changeCursorColor (MyColor.cyan);
} else {
changeCursorColor (MyColor.red);
}
break;
default:
break;
}
unitActionSelected = false;
selectedGO = null;
actionOption = -1;
}
}
}
void updateCursorColor() {
if (!unitActionSelected && currentCursorColor != MyColor.cyan)
changeCursorColor (MyColor.cyan);
else if (unitActionSelected) {
Vector3 pos = cursor.transform.position;
if (actionOption == 0) {
if (tms.canAttackTo (selectedGO, (int)pos.z, (int)pos.x))
changeCursorColor (MyColor.green);
else
changeCursorColor (MyColor.yellow);
}
else if(actionOption == 1) {
if (tms.canMoveTo (selectedGO, (int)pos.z, (int)pos.x))
changeCursorColor (MyColor.green);
else
changeCursorColor (MyColor.yellow);
}
}
}
void openMenuOnSelection () {
Vector3 tilePosition = cursor.transform.position;
int x = (int)tilePosition.z;
int y = (int)tilePosition.x;
selectedGO = tms.getUnitAtTile(x, y);
if (selectedGO != null) {
UnitBehaviour ub = selectedGO.GetComponent<UnitBehaviour> ();
UnitBehaviour.Team myTeam = (UnitBehaviour.Team) tms.currentPlayer;
if (ub.teamID == myTeam) {
if (ub.remainingActions != 0)
loadUnitMenu ();
else
changeCursorColor (MyColor.red);
} else
changeCursorColor (MyColor.red);
} else {
loadGeneralMenu ();
}
}
void loadUnitMenu() {
openMenu = true;
menuOptions = new Image[2];
unitMenu = true;
currentMenuOption = 0;
actionOption = 0;
GameObject canv = GameObject.Find ("Canvas");
menuOptions [0] = Instantiate (imageAttack);
menuOptions[0].transform.SetParent (canv.transform, false);
menuOptions [0].transform.position = new Vector3 (50, 0, 100);
menuOptions[0].color = menuCursorColor;
menuOptions[1] = Instantiate (imageMove);
menuOptions[1].transform.SetParent (canv.transform, false);
menuOptions [1].transform.position = new Vector3 (150, 0, 100);
}
void loadGeneralMenu() {
openMenu = true;
menuOptions = new Image[1];
currentMenuOption = 0;
actionOption = 0;
GameObject canv = GameObject.Find ("Canvas");
menuOptions[0] = Instantiate (imageEndTurn);
menuOptions[0].transform.SetParent (canv.transform, false);
menuOptions [0].transform.position = new Vector3 (50, 0, 100);
menuOptions[0].color = menuCursorColor;
}
private void changeCursorColor(Color c) {
Light li = cursor.GetComponent<Light> () as Light;
li.color = c;
}
private void changeCursorColor(MyColor cc) {
Color c;
switch (cc) {
default:
return;
case MyColor.red:
c = Color.red;
break;
case MyColor.green:
c = Color.green;
break;
case MyColor.blue:
c = Color.blue;
break;
case MyColor.yellow:
c = new Color (1, 1, 0);
break;
case MyColor.cyan:
c = Color.cyan;
break;
}
currentCursorColor = cc;
Light li = cursor.GetComponent<Light> () as Light;
li.color = c;
}
public void setTurnMan(TurnManagerScript s) {
tms = s;
}
void endTurn() {
tms.changeTeam ();
}
}