diff options
author | Jakob Stendahl <jakob.stendahl@outlook.com> | 2017-10-06 16:04:38 +0200 |
---|---|---|
committer | Jakob Stendahl <jakob.stendahl@outlook.com> | 2017-10-06 16:04:38 +0200 |
commit | e13fd4cf1fc0ad9eff857295fd5abc15ab01462c (patch) | |
tree | 91786e1557ef801a64e059857dc0ad71c1d281df | |
parent | c5a786326fab8850342005a1eb4da9653c4642c8 (diff) | |
download | TD-e13fd4cf1fc0ad9eff857295fd5abc15ab01462c.tar.gz TD-e13fd4cf1fc0ad9eff857295fd5abc15ab01462c.zip |
Startet på tårn, fiksa dev-mode, laga stats UI
32 files changed, 421 insertions, 45 deletions
diff --git a/td/Assets/Materials/placementIndicatorDanger.mat b/td/Assets/Materials/placementIndicatorDanger.mat Binary files differnew file mode 100644 index 0000000..37e9e47 --- /dev/null +++ b/td/Assets/Materials/placementIndicatorDanger.mat diff --git a/td/Assets/Materials/placementIndicatorDanger.mat.meta b/td/Assets/Materials/placementIndicatorDanger.mat.meta new file mode 100644 index 0000000..ea86123 --- /dev/null +++ b/td/Assets/Materials/placementIndicatorDanger.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fdaa960eb417543e29a712fa18d4a65f +timeCreated: 1507034809 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/td/Assets/Materials/placementIndicatorSuccess.mat b/td/Assets/Materials/placementIndicatorSuccess.mat Binary files differnew file mode 100644 index 0000000..36c1413 --- /dev/null +++ b/td/Assets/Materials/placementIndicatorSuccess.mat diff --git a/td/Assets/Materials/placementIndicatorSuccess.mat.meta b/td/Assets/Materials/placementIndicatorSuccess.mat.meta new file mode 100644 index 0000000..6e21620 --- /dev/null +++ b/td/Assets/Materials/placementIndicatorSuccess.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e03c0257685414ec9a62b58f6eb7dbde +timeCreated: 1507039389 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/td/Assets/Prefabs/Enemies/Enemy.prefab b/td/Assets/Prefabs/Enemies/Enemy.prefab Binary files differindex 5d65c2c..fc3e820 100644 --- a/td/Assets/Prefabs/Enemies/Enemy.prefab +++ b/td/Assets/Prefabs/Enemies/Enemy.prefab diff --git a/td/Assets/Prefabs/Towers.meta b/td/Assets/Prefabs/Towers.meta new file mode 100644 index 0000000..84da145 --- /dev/null +++ b/td/Assets/Prefabs/Towers.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bcbc671350f2542efb1691d76fa90f9e +folderAsset: yes +timeCreated: 1507213929 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/td/Assets/Prefabs/Towers/Guy One.prefab b/td/Assets/Prefabs/Towers/Guy One.prefab Binary files differnew file mode 100644 index 0000000..de1c753 --- /dev/null +++ b/td/Assets/Prefabs/Towers/Guy One.prefab diff --git a/td/Assets/Prefabs/UI/GUI.prefab.meta b/td/Assets/Prefabs/Towers/Guy One.prefab.meta index 856ac47..2747a06 100644 --- a/td/Assets/Prefabs/UI/GUI.prefab.meta +++ b/td/Assets/Prefabs/Towers/Guy One.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: fd69470eb7f824e3bbf2f6bac2d09ec7 -timeCreated: 1506804183 +guid: b3217bd5a74a9409e85e183b0e707047 +timeCreated: 1507213924 licenseType: Free NativeFormatImporter: mainObjectFileID: 100100000 diff --git a/td/Assets/Prefabs/UI/GUI.prefab b/td/Assets/Prefabs/UI/GUI.prefab Binary files differdeleted file mode 100644 index b7a47fa..0000000 --- a/td/Assets/Prefabs/UI/GUI.prefab +++ /dev/null diff --git a/td/Assets/Prefabs/level design.meta b/td/Assets/Prefabs/level design.meta new file mode 100644 index 0000000..5fa139f --- /dev/null +++ b/td/Assets/Prefabs/level design.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f4efb8722711a4322b5c809507092aa6 +folderAsset: yes +timeCreated: 1507240816 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/td/Assets/Prefabs/Grass-dirt.prefab b/td/Assets/Prefabs/level design/Grass-dirt.prefab Binary files differindex d943f20..dd9cf57 100644 --- a/td/Assets/Prefabs/Grass-dirt.prefab +++ b/td/Assets/Prefabs/level design/Grass-dirt.prefab diff --git a/td/Assets/Prefabs/Grass-dirt.prefab.meta b/td/Assets/Prefabs/level design/Grass-dirt.prefab.meta index 0c2256d..0c2256d 100644 --- a/td/Assets/Prefabs/Grass-dirt.prefab.meta +++ b/td/Assets/Prefabs/level design/Grass-dirt.prefab.meta diff --git a/td/Assets/Prefabs/Path straigth.prefab b/td/Assets/Prefabs/level design/Path straigth.prefab Binary files differindex 75c688d..78ad75f 100644 --- a/td/Assets/Prefabs/Path straigth.prefab +++ b/td/Assets/Prefabs/level design/Path straigth.prefab diff --git a/td/Assets/Prefabs/Path straigth.prefab.meta b/td/Assets/Prefabs/level design/Path straigth.prefab.meta index 875d25e..875d25e 100644 --- a/td/Assets/Prefabs/Path straigth.prefab.meta +++ b/td/Assets/Prefabs/level design/Path straigth.prefab.meta diff --git a/td/Assets/Prefabs/Path turn.prefab b/td/Assets/Prefabs/level design/Path turn.prefab Binary files differindex 28d95c1..28d95c1 100644 --- a/td/Assets/Prefabs/Path turn.prefab +++ b/td/Assets/Prefabs/level design/Path turn.prefab diff --git a/td/Assets/Prefabs/Path turn.prefab.meta b/td/Assets/Prefabs/level design/Path turn.prefab.meta index ea595d4..ea595d4 100644 --- a/td/Assets/Prefabs/Path turn.prefab.meta +++ b/td/Assets/Prefabs/level design/Path turn.prefab.meta diff --git a/td/Assets/Prefabs/grassPart.prefab b/td/Assets/Prefabs/level design/grassPart.prefab Binary files differindex 442bbc5..442bbc5 100644 --- a/td/Assets/Prefabs/grassPart.prefab +++ b/td/Assets/Prefabs/level design/grassPart.prefab diff --git a/td/Assets/Prefabs/grassPart.prefab.meta b/td/Assets/Prefabs/level design/grassPart.prefab.meta index 0c263b8..0c263b8 100644 --- a/td/Assets/Prefabs/grassPart.prefab.meta +++ b/td/Assets/Prefabs/level design/grassPart.prefab.meta diff --git a/td/Assets/Prefabs/projectiles.meta b/td/Assets/Prefabs/projectiles.meta new file mode 100644 index 0000000..b66e7d3 --- /dev/null +++ b/td/Assets/Prefabs/projectiles.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1fd8e4afa918142cf86708ca153cfa3c +folderAsset: yes +timeCreated: 1507240769 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/td/Assets/Scenes/Level 1.unity b/td/Assets/Scenes/Level 1.unity Binary files differindex cf659ae..fbf4717 100644 --- a/td/Assets/Scenes/Level 1.unity +++ b/td/Assets/Scenes/Level 1.unity 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: diff --git a/td/ProjectSettings/ProjectSettings.asset b/td/ProjectSettings/ProjectSettings.asset Binary files differindex 3182338..64cfb4a 100644 --- a/td/ProjectSettings/ProjectSettings.asset +++ b/td/ProjectSettings/ProjectSettings.asset diff --git a/td/ProjectSettings/TagManager.asset b/td/ProjectSettings/TagManager.asset Binary files differindex 2c3af94..5c28d30 100644 --- a/td/ProjectSettings/TagManager.asset +++ b/td/ProjectSettings/TagManager.asset |