unity-towers-of-hanoi/Assets/Controls.cs

110 lines
3.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controls : MonoBehaviour
{
public Light control;
public GameObject column1;
public GameObject column2;
public GameObject column3;
public GameObject selectedDisc;
public List<GameObject> discs;
// Start is called before the first frame update
void Start()
{
this.ResetGame();
}
void ResetGame()
{
List<GameObject> reversedDiscs = this.discs;
reversedDiscs.Reverse();
int i = 1;
foreach (GameObject disc in reversedDiscs)
{
this.column1.GetComponent<Cylinder>().discs.Add(disc);
i++;
}
this.column1.GetComponent<Cylinder>().selected = true;
this.column2.GetComponent<Cylinder>().selected = false;
this.column3.GetComponent<Cylinder>().selected = false;
this.selectedDisc = null;
}
GameObject GetSelectedColumn()
{
if (this.column1.GetComponent<Cylinder>().selected)
{
return this.column1;
}
if (this.column2.GetComponent<Cylinder>().selected)
{
return this.column2;
}
return this.column3;
}
void RenderDisc()
{
if (this.selectedDisc)
{
this.selectedDisc.transform.position = this.control.transform.position;
}
}
// Update is called once per frame
void Update()
{
this.RenderDisc();
GameObject selectedColumn = this.GetSelectedColumn();
if (Input.GetKeyUp("a") && selectedColumn != this.column1)
{
selectedColumn.GetComponent<Cylinder>().selected = false;
if (selectedColumn == this.column3)
{
this.column2.GetComponent<Cylinder>().selected = true;
}
else
{
this.column1.GetComponent<Cylinder>().selected = true;
}
}
if (Input.GetKeyUp("d") && selectedColumn != this.column3)
{
selectedColumn.GetComponent<Cylinder>().selected = false;
if (selectedColumn == this.column1)
{
this.column2.GetComponent<Cylinder>().selected = true;
} else
{
this.column3.GetComponent<Cylinder>().selected = true;
}
}
if (Input.GetKeyUp("w") && !this.selectedDisc)
{
this.selectedDisc = selectedColumn.GetComponent<Cylinder>().GetTopDisc();
}
if (Input.GetKeyUp("s") && this.selectedDisc != null)
{
if (selectedColumn.GetComponent<Cylinder>().CanPutDisc(this.selectedDisc)) {
selectedColumn.GetComponent<Cylinder>().discs.Add(this.selectedDisc);
this.selectedDisc = null;
}
}
if (Input.GetKeyUp("r"))
{
Application.LoadLevel(0);
}
}
}