aboutsummaryrefslogtreecommitdiff
path: root/td/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'td/Assets/Scripts')
-rw-r--r--td/Assets/Scripts/developerMode.cs36
-rw-r--r--td/Assets/Scripts/gameStats.cs43
-rw-r--r--td/Assets/Scripts/gameStats.cs.meta (renamed from td/Assets/Scripts/touchScript.cs.meta)4
-rw-r--r--td/Assets/Scripts/player.cs48
-rw-r--r--td/Assets/Scripts/player.cs.meta12
-rw-r--r--td/Assets/Scripts/touchScript.cs37
-rw-r--r--td/Assets/Scripts/tower.cs137
-rw-r--r--td/Assets/Scripts/tower.cs.meta12
-rw-r--r--td/Assets/Scripts/waveSpawner.cs76
-rw-r--r--td/Assets/Scripts/waveSpawner.cs.meta12
10 files changed, 374 insertions, 43 deletions
diff --git a/td/Assets/Scripts/developerMode.cs b/td/Assets/Scripts/developerMode.cs
index b0d7704..4f241cf 100644
--- a/td/Assets/Scripts/developerMode.cs
+++ b/td/Assets/Scripts/developerMode.cs
@@ -7,16 +7,35 @@ public class developerMode : MonoBehaviour {
public string output = "";
public string stack = "";
+ public bool cheatsAllowed;
- bool developerModeActive;
GameObject pnlCanvas;
+ GameObject pnlCheats;
+ Button btnToggleCheats;
Text lblConsoleLog;
+ bool developerModeActive;
+ bool cheatMenuOpen;
+
void Start () {
- pnlCanvas = transform.Find ("Canvas").gameObject;
+ /* Panels */
+ pnlCanvas = this.gameObject.transform.GetChild (0).gameObject;
+ pnlCheats = pnlCanvas.transform.Find ("cheatMenu").gameObject;
+ /* Buttons */
+ /* Button handlers */
+ /* Lablels */
lblConsoleLog = pnlCanvas.transform.Find ("consoleLog").gameObject.GetComponent <Text>();
-
+ /* Do setup */
lblConsoleLog.text = "";
+
+ if (cheatsAllowed) {
+ btnToggleCheats = pnlCanvas.transform.Find ("toggleCheats").gameObject.GetComponent <Button> ();
+ if (btnToggleCheats != null) { btnToggleCheats.onClick.AddListener (btnToggleCheatsHandler); }
+ cheatMenuOpen = false;
+ } else {
+ pnlCanvas.transform.Find ("toggleCheats").gameObject.SetActive (false);
+ }
+ pnlCheats.SetActive (false);
}
void Update () {
@@ -32,8 +51,16 @@ public class developerMode : MonoBehaviour {
this.gameObject.transform.GetChild (0).gameObject.SetActive (false);
}
}
-
+ void btnToggleCheatsHandler() {
+ /* Handler for btnToggleCheats */
+ if (cheatsAllowed) {
+ cheatMenuOpen = !cheatMenuOpen;
+ pnlCheats.SetActive (cheatMenuOpen);
+ }
+ }
+
+ #region GetDebugLog
void OnEnable() {
Application.logMessageReceived += HandleLog;
}
@@ -44,5 +71,6 @@ public class developerMode : MonoBehaviour {
string backLog = lblConsoleLog.text;
lblConsoleLog.text = logString + "\n" + backLog;
}
+ #endregion
}
diff --git a/td/Assets/Scripts/gameStats.cs b/td/Assets/Scripts/gameStats.cs
new file mode 100644
index 0000000..af13f99
--- /dev/null
+++ b/td/Assets/Scripts/gameStats.cs
@@ -0,0 +1,43 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.UI;
+using UnityEngine;
+
+public class gameStats : MonoBehaviour {
+
+ public player Player;
+ GameObject canvas;
+ Text txtMoney;
+ Text txtScore;
+ int displayedScore;
+ int displayedMoney;
+
+ void Start() {
+ canvas = transform.GetChild (0).gameObject;
+ txtMoney = canvas.transform.Find ("playerMoney").gameObject.GetComponent <Text>();
+ txtScore = canvas.transform.Find ("playerScore").gameObject.GetComponent <Text>();
+ }
+
+ void Update () {
+
+ if (Player.money () != displayedMoney) {
+ displayedMoney = Player.money ();
+ updateMoney (displayedMoney);
+ }
+
+ if (Player.score () != displayedScore) {
+ displayedScore = Player.score ();
+ updateScore (displayedScore);
+ }
+
+ }
+
+ void updateScore(int newScore) {
+ txtScore.text = ("Score: " + newScore.ToString ());
+ }
+
+ void updateMoney(int newMoney) {
+ txtMoney.text = ("Money: " + newMoney.ToString () + "$");
+ }
+
+}
diff --git a/td/Assets/Scripts/touchScript.cs.meta b/td/Assets/Scripts/gameStats.cs.meta
index ab0ba6c..cd4989c 100644
--- a/td/Assets/Scripts/touchScript.cs.meta
+++ b/td/Assets/Scripts/gameStats.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
-guid: 8b15d2b1b4d2f4f7fadf48b92f7edec2
-timeCreated: 1506804974
+guid: 48789fb36d2d543209c2f6540f1442d9
+timeCreated: 1507127936
licenseType: Free
MonoImporter:
serializedVersion: 2
diff --git a/td/Assets/Scripts/player.cs b/td/Assets/Scripts/player.cs
new file mode 100644
index 0000000..b972477
--- /dev/null
+++ b/td/Assets/Scripts/player.cs
@@ -0,0 +1,48 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class player : MonoBehaviour {
+
+ public int startingMoney;
+
+ GameObject[] towers;
+
+ int playerMoney;
+ int playerScore;
+
+ bool placingTower;
+
+ void Awake() {
+ playerMoney = startingMoney;
+ }
+
+ #region stats
+ public int score() {
+ return playerScore;
+ }
+
+ public void score(int points) {
+ playerScore += points;
+ }
+
+ public int money() {
+ return playerMoney;
+ }
+
+ public void moneyAdd(int sum) {
+ playerMoney += sum;
+ }
+
+ public void moneySubtract(int sum) {
+ playerMoney -= sum;
+ }
+ #endregion
+
+ public void spawnTower(GameObject towerType) {
+ GameObject tower = Instantiate (towerType, new Vector3 (0, 0, 0), Quaternion.identity, transform.Find ("towers").transform);
+ tower script = tower.GetComponent <tower>();
+ script.player = this;
+ }
+
+}
diff --git a/td/Assets/Scripts/player.cs.meta b/td/Assets/Scripts/player.cs.meta
new file mode 100644
index 0000000..c57a461
--- /dev/null
+++ b/td/Assets/Scripts/player.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b033e147f0b23409bb5c7a98a7208d6b
+timeCreated: 1507125120
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/td/Assets/Scripts/touchScript.cs b/td/Assets/Scripts/touchScript.cs
deleted file mode 100644
index c8cdd6a..0000000
--- a/td/Assets/Scripts/touchScript.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class touchScript : MonoBehaviour {
-
-
- private RuntimePlatform platform = Application.platform;
-
- void Update(){
- if(platform == RuntimePlatform.Android || platform == RuntimePlatform.IPhonePlayer){
- if(Input.touchCount > 0) {
- if(Input.GetTouch(0).phase == TouchPhase.Began){
- checkTouch(Input.GetTouch(0).position);
- }
- }
- }else if(platform == RuntimePlatform.WindowsEditor){
- if(Input.GetMouseButtonDown(0)) {
- checkTouch(Input.mousePosition);
- }
- }
- }
-
- void checkTouch(Vector3 pos){
- Vector3 wp = Camera.main.ScreenToWorldPoint(pos);
- Vector2 touchPos = new Vector2(wp.x, wp.y);
- Collider2D hit = Physics2D.OverlapPoint(touchPos);
- Debug.Log("Checking");
- if(hit){
- //hit.transform.gameObject.SendMessage("Clicked",0,SendMessageOptions.DontRequireReceiver);
- Debug.Log("CLICKED");
- }
- }
-
-
-
-}
diff --git a/td/Assets/Scripts/tower.cs b/td/Assets/Scripts/tower.cs
new file mode 100644
index 0000000..0c812b2
--- /dev/null
+++ b/td/Assets/Scripts/tower.cs
@@ -0,0 +1,137 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class tower : MonoBehaviour {
+
+ [Header("Attributes")]
+ public int towerPrice; // The price of the tower, set this in the desiger (tower prefab)
+ public float fireRate; // How long the turret should use to reload, Set in designer (tower prefab)
+ public float turnSpeed; // How fast the turret should rotate. Set in designer (tower prefab)
+ [Range(0, 10)]
+ public float towerRange; // How large the range of the tower is. this is the diameter. Set in designer (tower prefab)
+ [Header("Materials")]
+ public Material materialDanger; // The material used when tower can't be placed, set in the designer (tower prefab)
+ public Material materialSuccess; // The material used when the tower can be placed, or is selected, set in the designer (tower prefab)
+ [Header("Scripting vars")]
+ public player player; // Reference to the player object, should be set when instantiating
+
+ private GameObject placementIndicator; // The placement indicator
+ private Renderer placementIndicatorRenderer; // The renderer of the placement indicator
+ private Plane groundPlane; // Plane used for raycasting when placing tower
+ private float groundYpoint = 0.525f; // What Y-position the Tower should be placed on, this should be constant in every use-case.
+ private bool towerPlaced; // Bool used to descide what to do this frame
+ private bool colliding; // Set if the tower collides with any GameObject, used when placing, to see where it can be placed
+
+ private Transform target;
+ private float fireCountdown;
+
+ void Start () {
+ placementIndicator = transform.GetChild (0).gameObject;
+ placementIndicatorRenderer = placementIndicator.GetComponent<Renderer> ();
+ placementIndicator.transform.localScale = new Vector3 (towerRange*7, 0.00000001f, towerRange*7);
+
+ groundPlane = new Plane (Vector3.up, new Vector3(0f, groundYpoint, 0f));
+ }
+
+ void Update () {
+
+ #region placeTower
+ if (!towerPlaced) {
+ if (Input.touchCount == 1 || Input.GetMouseButton (0)) {
+
+ /* Activate indicator if not already */
+ if (!placementIndicator.activeSelf) { placementIndicator.SetActive (true); }
+ /* Change indicator-color based on placement */
+ if (!colliding) { placementIndicatorRenderer.sharedMaterial = materialDanger; }
+ else { placementIndicatorRenderer.sharedMaterial = materialSuccess; }
+ /* Calculate new position */
+ Ray touchRay = Camera.main.ScreenPointToRay (Input.mousePosition);
+ float rayDistance;
+ if (groundPlane.Raycast (touchRay, out rayDistance)) {
+ transform.position = touchRay.GetPoint (rayDistance);
+ }
+
+ } else {
+
+ /* User let go of the screen, decide if tower can be placed */
+ if (!colliding) { Destroy (gameObject); } // Skal kollidere for å være på et godkjent område
+ else {
+ towerPlaced = true;
+ player.moneySubtract (towerPrice);
+ placementIndicator.SetActive (false);
+ placementIndicatorRenderer.sharedMaterial = materialSuccess;
+ InvokeRepeating ("updateTarget", 0f, 0.5f); // This starts the
+ gameObject.GetComponent <BoxCollider>().enabled = false;
+ }
+
+ }
+
+ return;
+ }
+ #endregion
+
+ // Stop rest of update if no target is aquired
+ if (target == null) {
+ return;
+ }
+ // Target lockon
+ Vector3 direction = target.position - transform.position;
+ Quaternion lookRotation = Quaternion.LookRotation (direction);
+ Vector3 rotation = Quaternion.Lerp (transform.rotation, lookRotation, Time.deltaTime * turnSpeed).eulerAngles;
+ transform.rotation = Quaternion.Euler (0f, rotation.y, 0f);
+
+ if (fireCountdown <= 0f) {
+ // FAIAAAAA
+ fireCountdown = 1f / fireRate;
+ }
+
+ fireCountdown -= Time.deltaTime;
+
+
+ }
+
+ void updateTarget() {
+ /* Method that updates the currentTarget.
+ * The target will be set to the nearest in range */
+ GameObject[] enemies = GameObject.FindGameObjectsWithTag ("enemy");
+ float shortestDistance = Mathf.Infinity;
+ GameObject nearestEnemy = null;
+
+ foreach (var enemy in enemies) {
+ float distanceToEnemy = Vector3.Distance (transform.position, enemy.transform.position);
+ if (distanceToEnemy < shortestDistance) {
+ shortestDistance = distanceToEnemy;
+ nearestEnemy = enemy;
+ }
+ }
+
+ if (nearestEnemy != null && shortestDistance <= towerRange) {
+ Debug.Log ("Target aquired");
+ target = nearestEnemy.transform;
+ } else {
+ target = null;
+ }
+ }
+
+ void OnTriggerEnter(Collider other) {
+ colliding = true;
+ }
+
+ void OnTriggerStay(Collider other) {
+ colliding = true;
+ }
+
+ void OnTriggerExit(Collider other) {
+ colliding = false;
+ }
+
+ void OnDrawGizmosSelected() {
+ /* Show gizmos in designer */
+ Gizmos.color = Color.red;
+ Gizmos.DrawWireSphere (transform.position, towerRange);
+ }
+
+}
+
+
diff --git a/td/Assets/Scripts/tower.cs.meta b/td/Assets/Scripts/tower.cs.meta
new file mode 100644
index 0000000..c31ac8e
--- /dev/null
+++ b/td/Assets/Scripts/tower.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 39d4d93c762d74a628b6292b97f1483f
+timeCreated: 1506962845
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/td/Assets/Scripts/waveSpawner.cs b/td/Assets/Scripts/waveSpawner.cs
new file mode 100644
index 0000000..c3fada3
--- /dev/null
+++ b/td/Assets/Scripts/waveSpawner.cs
@@ -0,0 +1,76 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class waveSpawner : MonoBehaviour {
+
+ public static int EnemiesAlive = 0;
+
+ public Wave[] waves;
+
+ public Transform spawnPoint;
+
+ public float timeBetweenWaves = 5f;
+ private float countdown = 2f;
+
+ public Text waveCountdownText;
+
+
+ private int waveIndex = 0;
+
+ void Update ()
+ {
+ if (EnemiesAlive > 0)
+ {
+ return;
+ }
+
+ if (waveIndex == waves.Length)
+ {
+ // WIN LEVEL!!!
+ this.enabled = false;
+ }
+
+ if (countdown <= 0f)
+ {
+ StartCoroutine(SpawnWave());
+ countdown = timeBetweenWaves;
+ return;
+ }
+
+ countdown -= Time.deltaTime;
+
+ countdown = Mathf.Clamp(countdown, 0f, Mathf.Infinity);
+
+ //waveCountdownText.text = string.Format("{0:00.00}", countdown);
+ }
+
+ IEnumerator SpawnWave ()
+ {
+ Wave wave = waves[waveIndex];
+
+ EnemiesAlive = wave.count;
+
+ for (int i = 0; i < wave.count; i++)
+ {
+ SpawnEnemy(wave.enemy);
+ yield return new WaitForSeconds(1f / wave.rate);
+ }
+
+ waveIndex++;
+ }
+
+ void SpawnEnemy (GameObject enemy)
+ {
+ Instantiate(enemy, spawnPoint.position, spawnPoint.rotation);
+ }
+
+}
+
+[System.Serializable]
+public class Wave {
+ public GameObject enemy;
+ public int count;
+ public float rate;
+} \ No newline at end of file
diff --git a/td/Assets/Scripts/waveSpawner.cs.meta b/td/Assets/Scripts/waveSpawner.cs.meta
new file mode 100644
index 0000000..1f1e3cb
--- /dev/null
+++ b/td/Assets/Scripts/waveSpawner.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9ea53d824cbfc4eb8a4eb4ee6a247bc7
+timeCreated: 1507241433
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: