From d4af52c91a717d0ee324f81ad5a673d4a6ba9207 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Mon, 27 Nov 2023 00:08:06 +0800 Subject: *move --- .../.vs/ProjectEvaluation/roguetower.metadata.v5.2 | Bin 181985 -> 184117 bytes .../.vs/ProjectEvaluation/roguetower.projects.v5.2 | Bin 129555 -> 129960 bytes .../.vs/RogueTower/DesignTimeBuild/.dtbcache.v2 | Bin 85659 -> 85719 bytes .../3ed82583-c8f4-4d18-b3bf-6235d36bcecf.vsidx | Bin 0 -> 132148 bytes .../53548182-5dd3-46a3-8253-f9dcdfb12a9f.vsidx | Bin 0 -> 113771 bytes .../543ecb80-83ee-4e8b-a04a-2776c4c9ef4f.vsidx | Bin 0 -> 102255 bytes .../61c5dbcc-e7d6-47e0-88d3-815371600b57.vsidx | Bin 98387 -> 0 bytes .../7b4c99b2-72ff-4090-94cf-18bba1e1dcaf.vsidx | Bin 0 -> 103320 bytes .../8769e304-966a-4f20-8edb-b49794ec629b.vsidx | Bin 98583 -> 0 bytes .../b3819db5-cc71-4f36-af5c-f0fadf36299a.vsidx | Bin 100747 -> 0 bytes .../d9f30e7c-84a7-43ea-ba2d-6d8db0296461.vsidx | Bin 101045 -> 0 bytes Assembly_CSharp/.vs/RogueTower/v17/.suo | Bin 17408 -> 18944 bytes Assembly_CSharp/Building/Grave.cs | 3 - Assembly_CSharp/Building/HauntedHouse.cs | 111 -- Assembly_CSharp/Building/House.cs | 49 - Assembly_CSharp/Building/IronVein.cs | 3 - Assembly_CSharp/Building/Landmine.cs | 67 - Assembly_CSharp/Building/ManaBank.cs | 68 - Assembly_CSharp/Building/ManaCrystal.cs | 3 - Assembly_CSharp/Building/ManaSiphon.cs | 92 -- Assembly_CSharp/Building/Mine.cs | 81 -- Assembly_CSharp/Building/Shrine.cs | 11 - Assembly_CSharp/Building/TreasureChest.cs | 26 - Assembly_CSharp/Building/University.cs | 150 --- Assembly_CSharp/GamePlay/BiPlane.cs | 161 --- Assembly_CSharp/GamePlay/Encampment.cs | 26 - Assembly_CSharp/GamePlay/Explosion.cs | 27 - Assembly_CSharp/GamePlay/ParticleBeam.cs | 19 - Assembly_CSharp/GamePlay/Projectile.cs | 141 -- Assembly_CSharp/GamePlay/ProjectileFX.cs | 47 - Assembly_CSharp/GamePlay/Sawblade.cs | 87 -- Assembly_CSharp/GamePlay/SnowFlake.cs | 23 - Assembly_CSharp/Other/Explosion.cs | 27 + Assembly_CSharp/Projectile/Landmine.cs | 67 + Assembly_CSharp/Projectile/MorterShell.cs | 81 ++ Assembly_CSharp/Projectile/ParticleBeam.cs | 19 + Assembly_CSharp/Projectile/Projectile.cs | 141 ++ Assembly_CSharp/Projectile/ProjectileFX.cs | 47 + Assembly_CSharp/Projectile/Sawblade.cs | 87 ++ Assembly_CSharp/Projectile/SnowFlake.cs | 23 + Assembly_CSharp/RogueTower.csproj | 3 - Assembly_CSharp/Tower/Dropper.cs | 126 -- Assembly_CSharp/Tower/FlameThrower.cs | 68 - Assembly_CSharp/Tower/Lookout.cs | 97 -- Assembly_CSharp/Tower/Morter.cs | 39 - Assembly_CSharp/Tower/MorterShell.cs | 81 -- Assembly_CSharp/Tower/Obelisk.cs | 99 -- Assembly_CSharp/Tower/RadarTower.cs | 71 - Assembly_CSharp/Tower/TeslaCoil.cs | 45 - Assembly_CSharp/Tower/Tower.cs | 509 ------- Assembly_CSharp/Tower/TowerFlyweight.cs | 279 ---- Assembly_CSharp/Tower/TowerManager.cs | 1386 -------------------- Assembly_CSharp/Tower/TowerType.cs | 18 - Assembly_CSharp/_Building/Encampment.cs | 26 + Assembly_CSharp/_Building/Grave.cs | 3 + Assembly_CSharp/_Building/HauntedHouse.cs | 111 ++ Assembly_CSharp/_Building/House.cs | 49 + Assembly_CSharp/_Building/IronVein.cs | 3 + Assembly_CSharp/_Building/ManaBank.cs | 68 + Assembly_CSharp/_Building/ManaCrystal.cs | 3 + Assembly_CSharp/_Building/ManaSiphon.cs | 92 ++ Assembly_CSharp/_Building/Mine.cs | 81 ++ Assembly_CSharp/_Building/Shrine.cs | 11 + Assembly_CSharp/_Building/TreasureChest.cs | 26 + Assembly_CSharp/_Building/University.cs | 150 +++ Assembly_CSharp/_Tower/BiPlane.cs | 161 +++ Assembly_CSharp/_Tower/Dropper.cs | 126 ++ Assembly_CSharp/_Tower/FlameThrower.cs | 68 + Assembly_CSharp/_Tower/Lookout.cs | 97 ++ Assembly_CSharp/_Tower/Morter.cs | 39 + Assembly_CSharp/_Tower/Obelisk.cs | 99 ++ Assembly_CSharp/_Tower/RadarTower.cs | 71 + Assembly_CSharp/_Tower/TeslaCoil.cs | 45 + Assembly_CSharp/_Tower/Tower.cs | 509 +++++++ Assembly_CSharp/_Tower/TowerFlyweight.cs | 279 ++++ Assembly_CSharp/_Tower/TowerManager.cs | 1386 ++++++++++++++++++++ Assembly_CSharp/_Tower/TowerType.cs | 18 + .../bin/Debug/netstandard2.0/Assembly-CSharp.dll | Bin 159232 -> 159232 bytes .../bin/Debug/netstandard2.0/Assembly-CSharp.pdb | Bin 81108 -> 81320 bytes .../obj/Debug/netstandard2.0/Assembly-CSharp.dll | Bin 159232 -> 159232 bytes .../obj/Debug/netstandard2.0/Assembly-CSharp.pdb | Bin 81108 -> 81320 bytes .../RogueTower.csproj.CoreCompileInputs.cache | 2 +- 82 files changed, 4014 insertions(+), 4017 deletions(-) create mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/3ed82583-c8f4-4d18-b3bf-6235d36bcecf.vsidx create mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/53548182-5dd3-46a3-8253-f9dcdfb12a9f.vsidx create mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/543ecb80-83ee-4e8b-a04a-2776c4c9ef4f.vsidx delete mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/61c5dbcc-e7d6-47e0-88d3-815371600b57.vsidx create mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/7b4c99b2-72ff-4090-94cf-18bba1e1dcaf.vsidx delete mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/8769e304-966a-4f20-8edb-b49794ec629b.vsidx delete mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/b3819db5-cc71-4f36-af5c-f0fadf36299a.vsidx delete mode 100644 Assembly_CSharp/.vs/RogueTower/FileContentIndex/d9f30e7c-84a7-43ea-ba2d-6d8db0296461.vsidx delete mode 100644 Assembly_CSharp/Building/Grave.cs delete mode 100644 Assembly_CSharp/Building/HauntedHouse.cs delete mode 100644 Assembly_CSharp/Building/House.cs delete mode 100644 Assembly_CSharp/Building/IronVein.cs delete mode 100644 Assembly_CSharp/Building/Landmine.cs delete mode 100644 Assembly_CSharp/Building/ManaBank.cs delete mode 100644 Assembly_CSharp/Building/ManaCrystal.cs delete mode 100644 Assembly_CSharp/Building/ManaSiphon.cs delete mode 100644 Assembly_CSharp/Building/Mine.cs delete mode 100644 Assembly_CSharp/Building/Shrine.cs delete mode 100644 Assembly_CSharp/Building/TreasureChest.cs delete mode 100644 Assembly_CSharp/Building/University.cs delete mode 100644 Assembly_CSharp/GamePlay/BiPlane.cs delete mode 100644 Assembly_CSharp/GamePlay/Encampment.cs delete mode 100644 Assembly_CSharp/GamePlay/Explosion.cs delete mode 100644 Assembly_CSharp/GamePlay/ParticleBeam.cs delete mode 100644 Assembly_CSharp/GamePlay/Projectile.cs delete mode 100644 Assembly_CSharp/GamePlay/ProjectileFX.cs delete mode 100644 Assembly_CSharp/GamePlay/Sawblade.cs delete mode 100644 Assembly_CSharp/GamePlay/SnowFlake.cs create mode 100644 Assembly_CSharp/Other/Explosion.cs create mode 100644 Assembly_CSharp/Projectile/Landmine.cs create mode 100644 Assembly_CSharp/Projectile/MorterShell.cs create mode 100644 Assembly_CSharp/Projectile/ParticleBeam.cs create mode 100644 Assembly_CSharp/Projectile/Projectile.cs create mode 100644 Assembly_CSharp/Projectile/ProjectileFX.cs create mode 100644 Assembly_CSharp/Projectile/Sawblade.cs create mode 100644 Assembly_CSharp/Projectile/SnowFlake.cs delete mode 100644 Assembly_CSharp/Tower/Dropper.cs delete mode 100644 Assembly_CSharp/Tower/FlameThrower.cs delete mode 100644 Assembly_CSharp/Tower/Lookout.cs delete mode 100644 Assembly_CSharp/Tower/Morter.cs delete mode 100644 Assembly_CSharp/Tower/MorterShell.cs delete mode 100644 Assembly_CSharp/Tower/Obelisk.cs delete mode 100644 Assembly_CSharp/Tower/RadarTower.cs delete mode 100644 Assembly_CSharp/Tower/TeslaCoil.cs delete mode 100644 Assembly_CSharp/Tower/Tower.cs delete mode 100644 Assembly_CSharp/Tower/TowerFlyweight.cs delete mode 100644 Assembly_CSharp/Tower/TowerManager.cs delete mode 100644 Assembly_CSharp/Tower/TowerType.cs create mode 100644 Assembly_CSharp/_Building/Encampment.cs create mode 100644 Assembly_CSharp/_Building/Grave.cs create mode 100644 Assembly_CSharp/_Building/HauntedHouse.cs create mode 100644 Assembly_CSharp/_Building/House.cs create mode 100644 Assembly_CSharp/_Building/IronVein.cs create mode 100644 Assembly_CSharp/_Building/ManaBank.cs create mode 100644 Assembly_CSharp/_Building/ManaCrystal.cs create mode 100644 Assembly_CSharp/_Building/ManaSiphon.cs create mode 100644 Assembly_CSharp/_Building/Mine.cs create mode 100644 Assembly_CSharp/_Building/Shrine.cs create mode 100644 Assembly_CSharp/_Building/TreasureChest.cs create mode 100644 Assembly_CSharp/_Building/University.cs create mode 100644 Assembly_CSharp/_Tower/BiPlane.cs create mode 100644 Assembly_CSharp/_Tower/Dropper.cs create mode 100644 Assembly_CSharp/_Tower/FlameThrower.cs create mode 100644 Assembly_CSharp/_Tower/Lookout.cs create mode 100644 Assembly_CSharp/_Tower/Morter.cs create mode 100644 Assembly_CSharp/_Tower/Obelisk.cs create mode 100644 Assembly_CSharp/_Tower/RadarTower.cs create mode 100644 Assembly_CSharp/_Tower/TeslaCoil.cs create mode 100644 Assembly_CSharp/_Tower/Tower.cs create mode 100644 Assembly_CSharp/_Tower/TowerFlyweight.cs create mode 100644 Assembly_CSharp/_Tower/TowerManager.cs create mode 100644 Assembly_CSharp/_Tower/TowerType.cs (limited to 'Assembly_CSharp') diff --git a/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.metadata.v5.2 b/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.metadata.v5.2 index e66f637..330eebb 100644 Binary files a/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.metadata.v5.2 and b/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.metadata.v5.2 differ diff --git a/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.projects.v5.2 b/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.projects.v5.2 index 67ef60e..a6e3e53 100644 Binary files a/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.projects.v5.2 and b/Assembly_CSharp/.vs/ProjectEvaluation/roguetower.projects.v5.2 differ diff --git a/Assembly_CSharp/.vs/RogueTower/DesignTimeBuild/.dtbcache.v2 b/Assembly_CSharp/.vs/RogueTower/DesignTimeBuild/.dtbcache.v2 index 6820748..c61c6e0 100644 Binary files a/Assembly_CSharp/.vs/RogueTower/DesignTimeBuild/.dtbcache.v2 and b/Assembly_CSharp/.vs/RogueTower/DesignTimeBuild/.dtbcache.v2 differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/3ed82583-c8f4-4d18-b3bf-6235d36bcecf.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/3ed82583-c8f4-4d18-b3bf-6235d36bcecf.vsidx new file mode 100644 index 0000000..cfbe803 Binary files /dev/null and b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/3ed82583-c8f4-4d18-b3bf-6235d36bcecf.vsidx differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/53548182-5dd3-46a3-8253-f9dcdfb12a9f.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/53548182-5dd3-46a3-8253-f9dcdfb12a9f.vsidx new file mode 100644 index 0000000..1b7038b Binary files /dev/null and b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/53548182-5dd3-46a3-8253-f9dcdfb12a9f.vsidx differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/543ecb80-83ee-4e8b-a04a-2776c4c9ef4f.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/543ecb80-83ee-4e8b-a04a-2776c4c9ef4f.vsidx new file mode 100644 index 0000000..2f00599 Binary files /dev/null and b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/543ecb80-83ee-4e8b-a04a-2776c4c9ef4f.vsidx differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/61c5dbcc-e7d6-47e0-88d3-815371600b57.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/61c5dbcc-e7d6-47e0-88d3-815371600b57.vsidx deleted file mode 100644 index 5f20522..0000000 Binary files a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/61c5dbcc-e7d6-47e0-88d3-815371600b57.vsidx and /dev/null differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/7b4c99b2-72ff-4090-94cf-18bba1e1dcaf.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/7b4c99b2-72ff-4090-94cf-18bba1e1dcaf.vsidx new file mode 100644 index 0000000..cec47cd Binary files /dev/null and b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/7b4c99b2-72ff-4090-94cf-18bba1e1dcaf.vsidx differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/8769e304-966a-4f20-8edb-b49794ec629b.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/8769e304-966a-4f20-8edb-b49794ec629b.vsidx deleted file mode 100644 index bd7a68e..0000000 Binary files a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/8769e304-966a-4f20-8edb-b49794ec629b.vsidx and /dev/null differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/b3819db5-cc71-4f36-af5c-f0fadf36299a.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/b3819db5-cc71-4f36-af5c-f0fadf36299a.vsidx deleted file mode 100644 index a3e4157..0000000 Binary files a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/b3819db5-cc71-4f36-af5c-f0fadf36299a.vsidx and /dev/null differ diff --git a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/d9f30e7c-84a7-43ea-ba2d-6d8db0296461.vsidx b/Assembly_CSharp/.vs/RogueTower/FileContentIndex/d9f30e7c-84a7-43ea-ba2d-6d8db0296461.vsidx deleted file mode 100644 index 87358ed..0000000 Binary files a/Assembly_CSharp/.vs/RogueTower/FileContentIndex/d9f30e7c-84a7-43ea-ba2d-6d8db0296461.vsidx and /dev/null differ diff --git a/Assembly_CSharp/.vs/RogueTower/v17/.suo b/Assembly_CSharp/.vs/RogueTower/v17/.suo index 9774c05..95827ff 100644 Binary files a/Assembly_CSharp/.vs/RogueTower/v17/.suo and b/Assembly_CSharp/.vs/RogueTower/v17/.suo differ diff --git a/Assembly_CSharp/Building/Grave.cs b/Assembly_CSharp/Building/Grave.cs deleted file mode 100644 index 45abddc..0000000 --- a/Assembly_CSharp/Building/Grave.cs +++ /dev/null @@ -1,3 +0,0 @@ -public class Grave : SpawnableObject -{ -} diff --git a/Assembly_CSharp/Building/HauntedHouse.cs b/Assembly_CSharp/Building/HauntedHouse.cs deleted file mode 100644 index 9a23eda..0000000 --- a/Assembly_CSharp/Building/HauntedHouse.cs +++ /dev/null @@ -1,111 +0,0 @@ -using UnityEngine; - -public class HauntedHouse : IncomeGenerator, IBuildable -{ - [SerializeField] - private LayerMask graveLayerMask; - - [SerializeField] - private GameObject UIObject; - - [SerializeField] - private int goldBackOnDemolish; - - private bool isGathering; - - private int graveCount; - - private int manaUsed; - - private float timer; - - private SimpleUI myUI; - - protected override void Start() - { - base.Start(); - DetectGraves(); - } - - private void Update() - { - if (myUI != null && isGathering) - { - string text = "Mana used: " + manaUsed; - text = text + "\nNearby graves: x" + graveCount; - text = text + "\nTax efficiency: x" + GameManager.instance.hauntedHouseEfficiency; - text = text + "\nDeath tax due: " + Mathf.Max((int)Mathf.Sqrt(manaUsed * GameManager.instance.hauntedHouseEfficiency * graveCount), 1) + "g"; - text = text + "\nNet tax collected: " + base.netGold + "g."; - myUI.SetDiscriptionText(text); - } - if (!isGathering || !SpawnManager.instance.combat) - { - return; - } - if (timer <= 0f) - { - if (ResourceManager.instance.CheckMana(1)) - { - ResourceManager.instance.SpendMana(1); - manaUsed++; - timer = 1f; - } - } - else - { - timer -= Time.deltaTime; - } - } - - public override void GenerateIncome() - { - incomePerRound = Mathf.Max((int)Mathf.Sqrt(manaUsed * GameManager.instance.hauntedHouseEfficiency * graveCount), 1); - base.GenerateIncome(); - manaUsed = 0; - incomePerRound = 1; - } - - public void SetStats() - { - } - - private void DetectGraves() - { - if (Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckGrave(hitInfo); - } - if (Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckGrave(hitInfo); - } - if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckGrave(hitInfo); - } - if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckGrave(hitInfo); - } - } - - private void CheckGrave(RaycastHit hit) - { - if (hit.collider.GetComponent() != null && (double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) <= 0.001) - { - graveCount++; - isGathering = true; - } - } - - public void SpawnUI() - { - myUI = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); - myUI.SetDemolishable(base.gameObject, goldBackOnDemolish); - } - - public void Demolish() - { - RemoveIncomeGeneration(); - } -} diff --git a/Assembly_CSharp/Building/House.cs b/Assembly_CSharp/Building/House.cs deleted file mode 100644 index 16bb26d..0000000 --- a/Assembly_CSharp/Building/House.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class House : SpawnableObject -{ - private List defenders = new List(); - - [SerializeField] - private IncomeGenerator myIncomeGenerator; - - protected override void Start() - { - base.Start(); - SpawnManager.instance.houses.Add(this); - } - - public void AddDefender(Tower t) - { - if (!defenders.Contains(t)) - { - defenders.Add(t); - } - CheckTowers(); - } - - public void CheckTowers() - { - for (int num = defenders.Count - 1; num > -1; num--) - { - if (defenders[num] == null) - { - defenders.RemoveAt(num); - } - } - myIncomeGenerator.incomeTimesLevel = defenders.Count; - } - - public override void SpawnUI() - { - SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); - if (defenders.Count > 0) - { - string text = "This house is protected by " + defenders.Count + " towers."; - text = text + "\nIts next gift will be " + (SpawnManager.instance.level + 1) * defenders.Count + "g."; - text = text + "\nNet gold gifted: " + myIncomeGenerator.netGold + "g."; - component.SetDiscriptionText(text); - } - } -} diff --git a/Assembly_CSharp/Building/IronVein.cs b/Assembly_CSharp/Building/IronVein.cs deleted file mode 100644 index 06af952..0000000 --- a/Assembly_CSharp/Building/IronVein.cs +++ /dev/null @@ -1,3 +0,0 @@ -public class IronVein : SpawnableObject -{ -} diff --git a/Assembly_CSharp/Building/Landmine.cs b/Assembly_CSharp/Building/Landmine.cs deleted file mode 100644 index 5422016..0000000 --- a/Assembly_CSharp/Building/Landmine.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Collections; -using UnityEngine; - -public class Landmine : Projectile -{ - public float blastRadius = 0.5f; - - private bool armed; - - [SerializeField] - private GameObject explosion; - - protected override void Start() - { - base.Start(); - SpawnManager.instance.destroyOnNewLevel.Add(base.gameObject); - } - - public void SetEndPosition(Vector3 endPos) - { - StartCoroutine(ThrowMine(endPos)); - } - - protected override void FixedUpdate() - { - } - - private void OnTriggerEnter(Collider other) - { - if (armed && other.gameObject.layer == LayerMask.NameToLayer("Enemy")) - { - Explode(); - } - } - - private void Explode() - { - Collider[] array = Physics.OverlapSphere(base.transform.position, blastRadius, layermask, QueryTriggerInteraction.Collide); - for (int i = 0; i < array.Length; i++) - { - IDamageable component = array[i].GetComponent(); - if (component != null) - { - DealDamage(component); - } - } - Object.Instantiate(explosion, base.transform.position, Quaternion.identity).transform.localScale = Vector3.one * 0.5f; - SpawnManager.instance.destroyOnNewLevel.Remove(base.gameObject); - Object.Destroy(base.gameObject); - } - - private IEnumerator ThrowMine(Vector3 endPos) - { - Vector3 direction = endPos - base.transform.position; - float throwTime = 1f; - base.transform.localScale = Vector3.zero; - for (float i = 0f; i < 1f; i += Time.deltaTime / throwTime) - { - base.transform.localScale = Vector3.one * i; - base.transform.Translate(direction * Time.deltaTime / throwTime); - yield return null; - } - base.transform.localScale = Vector3.one; - base.transform.position = endPos; - armed = true; - } -} diff --git a/Assembly_CSharp/Building/ManaBank.cs b/Assembly_CSharp/Building/ManaBank.cs deleted file mode 100644 index b82d36e..0000000 --- a/Assembly_CSharp/Building/ManaBank.cs +++ /dev/null @@ -1,68 +0,0 @@ -using UnityEngine; - -public class ManaBank : MonoBehaviour, IBuildable -{ - [SerializeField] - private int gatherRatePerSec; - - [SerializeField] - private int maxManaIncrease; - - [SerializeField] - private GameObject UIObject; - - [SerializeField] - private int goldBackOnDemolish; - - private float timer = 1f; - - private void Start() - { - maxManaIncrease += ResourceManager.instance.manaBankBonusMana; - ResourceManager.instance.UpdateManaGatherRate(gatherRatePerSec); - ResourceManager.instance.AddMaxMana(maxManaIncrease); - ResourceManager.instance.manaBanks.Add(this); - } - - private void Update() - { - if (timer <= 0f) - { - Gather(); - timer = 1f; - } - else if (SpawnManager.instance.combat) - { - timer -= Time.deltaTime; - } - } - - public void SetStats() - { - } - - public void UpgradeMaxMana(int addition) - { - ResourceManager.instance.AddMaxMana(addition); - maxManaIncrease += addition; - } - - public void SpawnUI() - { - SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); - component.SetDemolishable(base.gameObject, goldBackOnDemolish); - component.SetDiscriptionText("This bank currently stores " + maxManaIncrease + " mana. It is generating " + ((float)Mathf.FloorToInt(10f * ResourceManager.instance.manaMaxRegenPercent * (float)maxManaIncrease) / 10f + 1f) + " mana/s through sorcery and clever investing."); - } - - public void Demolish() - { - ResourceManager.instance.UpdateManaGatherRate(-gatherRatePerSec); - ResourceManager.instance.AddMaxMana(-maxManaIncrease); - ResourceManager.instance.manaBanks.Remove(this); - } - - private void Gather() - { - ResourceManager.instance.AddMana(gatherRatePerSec); - } -} diff --git a/Assembly_CSharp/Building/ManaCrystal.cs b/Assembly_CSharp/Building/ManaCrystal.cs deleted file mode 100644 index 4b84e56..0000000 --- a/Assembly_CSharp/Building/ManaCrystal.cs +++ /dev/null @@ -1,3 +0,0 @@ -public class ManaCrystal : SpawnableObject -{ -} diff --git a/Assembly_CSharp/Building/ManaSiphon.cs b/Assembly_CSharp/Building/ManaSiphon.cs deleted file mode 100644 index 89e578e..0000000 --- a/Assembly_CSharp/Building/ManaSiphon.cs +++ /dev/null @@ -1,92 +0,0 @@ -using UnityEngine; - -public class ManaSiphon : MonoBehaviour, IBuildable -{ - [SerializeField] - private int gatherRatePerSec; - - [SerializeField] - private LayerMask layermask; - - [SerializeField] - private GameObject UIObject; - - [SerializeField] - private int goldBackOnDemolish; - - private bool gathering; - - private float timer = 1f; - - private void Start() - { - DetectMana(); - if (gathering) - { - ResourceManager.instance.UpdateManaGatherRate(gatherRatePerSec); - } - } - - private void Update() - { - if (timer <= 0f) - { - Gather(); - timer = 1f; - } - else if (gathering && SpawnManager.instance.combat) - { - timer -= Time.deltaTime; - } - } - - public void SetStats() - { - } - - public void SpawnUI() - { - SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); - component.SetDemolishable(base.gameObject, goldBackOnDemolish); - if (gathering) - { - component.SetDiscriptionText("Currently gathering 1 mana/sec."); - } - } - - public void Demolish() - { - if (gathering) - { - ResourceManager.instance.UpdateManaGatherRate(-gatherRatePerSec); - } - } - - private void Gather() - { - ResourceManager.instance.AddMana(gatherRatePerSec); - } - - private void DetectMana() - { - if ((!Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore)) - { - Rotate(hitInfo); - } - } - - private bool Rotate(RaycastHit hit) - { - if (hit.collider.GetComponent() == null) - { - return false; - } - if ((double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) > 0.001) - { - return false; - } - base.transform.LookAt(hit.collider.transform.position, Vector3.up); - gathering = true; - return true; - } -} diff --git a/Assembly_CSharp/Building/Mine.cs b/Assembly_CSharp/Building/Mine.cs deleted file mode 100644 index 55d7b6f..0000000 --- a/Assembly_CSharp/Building/Mine.cs +++ /dev/null @@ -1,81 +0,0 @@ -using UnityEngine; - -public class Mine : MonoBehaviour, IBuildable -{ - [SerializeField] - private int goldBackOnDemolish; - - [SerializeField] - private LayerMask layermask; - - [SerializeField] - private GameObject UIObject; - - private bool gathering; - - private void Start() - { - SpawnManager.instance.mines.Add(this); - DetectIron(); - } - - public void SetStats() - { - } - - public void Repair() - { - if (gathering && Random.Range(0f, 1f) < 0.1f) - { - GameManager.instance.RepairTower(10); - } - } - - private void SetBonus(int value) - { - GameManager.instance.IncreaseTowerHealth(value); - } - - public void SpawnUI() - { - SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); - component.SetDemolishable(base.gameObject, goldBackOnDemolish); - if (gathering) - { - component.SetDiscriptionText("Currently mining. Tower maximum health increased by 1 and a 10% chance to repair damage."); - } - } - - private void DetectIron() - { - if ((!Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore)) - { - Rotate(hitInfo); - } - } - - private bool Rotate(RaycastHit hit) - { - if (hit.collider.GetComponent() == null) - { - return false; - } - if ((double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) > 0.001) - { - return false; - } - base.transform.LookAt(hit.collider.transform.position, Vector3.up); - gathering = true; - SetBonus(1); - return true; - } - - public void Demolish() - { - SpawnManager.instance.mines.Remove(this); - if (gathering) - { - SetBonus(-1); - } - } -} diff --git a/Assembly_CSharp/Building/Shrine.cs b/Assembly_CSharp/Building/Shrine.cs deleted file mode 100644 index bbdfd2d..0000000 --- a/Assembly_CSharp/Building/Shrine.cs +++ /dev/null @@ -1,11 +0,0 @@ -public class Shrine : SpawnableObject -{ - protected override void Start() - { - base.Start(); - if (spawned) - { - AchievementManager.instance.shrineSpawned = true; - } - } -} diff --git a/Assembly_CSharp/Building/TreasureChest.cs b/Assembly_CSharp/Building/TreasureChest.cs deleted file mode 100644 index cf18502..0000000 --- a/Assembly_CSharp/Building/TreasureChest.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -public class TreasureChest : MonoBehaviour, IBuildable -{ - [SerializeField] - private GameObject uiObject; - - public int numberOfDrops = 1; - - private void Start() - { - } - - public void SpawnUI() - { - Object.Instantiate(uiObject, base.transform.position, Quaternion.identity).GetComponent().myChest = base.gameObject; - } - - public void Demolish() - { - } - - public void SetStats() - { - } -} diff --git a/Assembly_CSharp/Building/University.cs b/Assembly_CSharp/Building/University.cs deleted file mode 100644 index 5115f50..0000000 --- a/Assembly_CSharp/Building/University.cs +++ /dev/null @@ -1,150 +0,0 @@ -using UnityEngine; - -public class University : MonoBehaviour, IBuildable -{ - [SerializeField] - private GameObject UIObject; - - [SerializeField] - private GameObject mainUIObject; - - public int goldBackOnDemolish; - - [SerializeField] - private LayerMask layermask; - - private bool active; - - public int healthPercent { get; private set; } - - public int armorPercent { get; private set; } - - public int shieldPercent { get; private set; } - - public int healthGained { get; private set; } - - public int armorGained { get; private set; } - - public int shieldGained { get; private set; } - - private void Start() - { - SpawnManager.instance.universities.Add(this); - DetectShrines(); - } - - public void SetStats() - { - } - - public void Research() - { - if (active) - { - if (Random.Range(0f, 100f) <= (float)(healthPercent + GameManager.instance.universityBonus)) - { - healthGained++; - TowerManager.instance.AddBonusHealthDamage(TowerType.Global, 1); - UniBonusUI.instance.UniBonus(1, 0, 0); - DamageNumber component = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); - component.SetText("New Discoveries!", "Grey", 1f); - component.SetHoldTime(2f); - AchievementManager.instance.NewDiscoveriesAchievement(); - } - if (Random.Range(0f, 100f) <= (float)(armorPercent + GameManager.instance.universityBonus)) - { - armorGained++; - UniBonusUI.instance.UniBonus(0, 1, 0); - TowerManager.instance.AddBonusArmorDamage(TowerType.Global, 1); - DamageNumber component2 = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); - component2.SetText("New Discoveries!", "Grey", 1f); - component2.SetHoldTime(2f); - AchievementManager.instance.NewDiscoveriesAchievement(); - } - if (Random.Range(0f, 100f) <= (float)(shieldPercent + GameManager.instance.universityBonus)) - { - shieldGained++; - UniBonusUI.instance.UniBonus(0, 0, 1); - TowerManager.instance.AddBonusShieldDamage(TowerType.Global, 1); - DamageNumber component3 = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); - component3.SetText("New Discoveries!", "Grey", 1f); - component3.SetHoldTime(2f); - AchievementManager.instance.NewDiscoveriesAchievement(); - } - } - } - - public void FundHealthStudies() - { - int num = (healthPercent + armorPercent + shieldPercent + 1) * 20; - if (ResourceManager.instance.CheckMoney(num)) - { - healthPercent++; - ResourceManager.instance.Spend(num); - AchievementManager.instance.FundResearchAchievement(num); - } - } - - public void FundArmorStudies() - { - int num = (healthPercent + armorPercent + shieldPercent + 1) * 20; - if (ResourceManager.instance.CheckMoney(num)) - { - armorPercent++; - ResourceManager.instance.Spend(num); - AchievementManager.instance.FundResearchAchievement(num); - } - } - - public void FundShieldStudies() - { - int num = (healthPercent + armorPercent + shieldPercent + 1) * 20; - if (ResourceManager.instance.CheckMoney(num)) - { - shieldPercent++; - ResourceManager.instance.Spend(num); - AchievementManager.instance.FundResearchAchievement(num); - } - } - - public void SpawnUI() - { - if (!active) - { - Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent().SetDemolishable(base.gameObject, goldBackOnDemolish); - } - else - { - Object.Instantiate(mainUIObject, base.transform.position, Quaternion.identity).GetComponent().SetStats(this); - } - } - - public void Demolish() - { - SpawnManager.instance.universities.Remove(this); - } - - private void DetectShrines() - { - if ((!Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore)) - { - Rotate(hitInfo); - } - } - - private bool Rotate(RaycastHit hit) - { - if (hit.collider.GetComponent() == null) - { - return false; - } - if ((double)(hit.collider.transform.position.y - base.transform.position.y) > 0.001) - { - return false; - } - base.transform.LookAt(hit.collider.transform.position, Vector3.up); - active = true; - SetStats(); - return true; - } -} diff --git a/Assembly_CSharp/GamePlay/BiPlane.cs b/Assembly_CSharp/GamePlay/BiPlane.cs deleted file mode 100644 index bcf32e5..0000000 --- a/Assembly_CSharp/GamePlay/BiPlane.cs +++ /dev/null @@ -1,161 +0,0 @@ -using UnityEngine; - -public class BiPlane : MonoBehaviour -{ - [SerializeField] - private TowerType towerType; - - [SerializeField] - private float speed; - - [SerializeField] - private float turnTime = 3f; - - [SerializeField] - private float minDistance = 3f; - - [SerializeField] - private float maxDistance = 12f; - - [SerializeField] - private float attackDistance = 6f; - - public GameObject target; - - private int directionMultiplier = 1; - - private Vector3 previousPos; - - private bool flyingTowards = true; - - private float desiredAltitude = 5f; - - private float desiredTilt; - - public int damage; - - public int healthDamage; - - public int armorDamage; - - public int shieldDamage; - - public float rps; - - public float slowPercent; - - public float bleedPercent; - - public float burnPercent; - - public float poisonPercent; - - public float critChance; - - public float stunChance; - - private int ammo; - - [SerializeField] - private int maxAmmo = 20; - - private float timeOfLastShot; - - [SerializeField] - private LayerMask bulletHitMask; - - [SerializeField] - private GameObject projectile; - - [SerializeField] - private float projectileSpeed; - - [SerializeField] - private Transform muzzle; - - [SerializeField] - private Transform artTransform; - - private void Start() - { - ammo = maxAmmo; - } - - private void Update() - { - FlightPath(); - } - - private void FixedUpdate() - { - } - - private void FlightPath() - { - Vector3 vector; - if (target != null) - { - vector = target.transform.position; - } - else - { - vector = Vector3.zero; - vector.y = 5f; - } - if (Vector3.SqrMagnitude(vector - base.transform.position) <= minDistance * minDistance) - { - flyingTowards = false; - Reload(); - } - else if (Vector3.SqrMagnitude(vector - base.transform.position) >= maxDistance * maxDistance) - { - flyingTowards = true; - } - float num = ((!flyingTowards) ? 0f : Vector2.SignedAngle(new Vector2(base.transform.forward.x, base.transform.forward.z), new Vector2(vector.x - base.transform.position.x, vector.z - base.transform.position.z))); - float num2; - if (target != null && flyingTowards && Vector3.SqrMagnitude(vector - base.transform.position) <= attackDistance * attackDistance) - { - desiredAltitude += (Mathf.Min(vector.y, 1f) - desiredAltitude) * Time.deltaTime * 1.5f; - num2 = base.transform.position.y - desiredAltitude; - if (Mathf.Abs(num) < 22.5f) - { - Fire(); - } - } - else - { - desiredAltitude += (5f - desiredAltitude) * Time.deltaTime * 3f; - num2 = base.transform.position.y - desiredAltitude; - } - num = Mathf.Clamp(num * 6f, -90f, 90f); - num2 = Mathf.Clamp(num2 * 6f, -45f, 45f); - base.transform.Rotate(new Vector3(0f, (0f - num) * Time.deltaTime / turnTime, 0f)); - base.transform.eulerAngles = new Vector3(num2, base.transform.eulerAngles.y, 0f); - base.transform.Translate(Vector3.forward * Time.deltaTime * speed); - desiredTilt += (num - desiredTilt) * Time.deltaTime; - artTransform.eulerAngles = new Vector3(base.transform.eulerAngles.x, base.transform.eulerAngles.y, desiredTilt); - } - - private void Reload() - { - ammo = maxAmmo; - } - - private void Fire() - { - if (ammo > 0 && timeOfLastShot + rps <= Time.time) - { - ammo--; - timeOfLastShot = Time.time; - LaunchProjectile(); - } - } - - private void LaunchProjectile() - { - Vector3 position = target.transform.position; - position += new Vector3(Random.Range(-0.33f, 0.33f) + Random.Range(-0.33f, 0.33f), Random.Range(-0.33f, 0.33f) + Random.Range(-0.33f, 0.33f), Random.Range(-0.33f, 0.33f) + Random.Range(-0.33f, 0.33f)); - muzzle.LookAt(position); - Object.Instantiate(projectile, muzzle.position, muzzle.rotation).GetComponent().SetStats(towerType, target, projectileSpeed, damage, healthDamage, armorDamage, shieldDamage, slowPercent, bleedPercent, burnPercent, poisonPercent, critChance, stunChance); - } -} diff --git a/Assembly_CSharp/GamePlay/Encampment.cs b/Assembly_CSharp/GamePlay/Encampment.cs deleted file mode 100644 index eaa8ab7..0000000 --- a/Assembly_CSharp/GamePlay/Encampment.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -public class Encampment : Dropper -{ - protected override void Fire() - { - if (consumesMana) - { - int manaCost = (int)((float)base.damage * manaConsumptionRate); - if (!ResourceManager.instance.CheckMana(manaCost)) - { - return; - } - ResourceManager.instance.SpendMana(manaCost); - } - if (dropPoints.Length != 0) - { - Vector2 vector = dropPoints[Random.Range(0, dropPoints.Length)]; - Vector3 endPosition = new Vector3(vector.x + Random.Range(-0.125f, 0.125f) + base.transform.position.x, 0f, vector.y + Random.Range(-0.125f, 0.125f) + base.transform.position.z); - GameObject obj = Object.Instantiate(projectile, base.transform.position, Quaternion.identity); - obj.GetComponent().SetStats(towerType, null, projectileSpeed, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); - obj.GetComponent().blastRadius = base.blastRadius; - obj.GetComponent().SetEndPosition(endPosition); - } - } -} diff --git a/Assembly_CSharp/GamePlay/Explosion.cs b/Assembly_CSharp/GamePlay/Explosion.cs deleted file mode 100644 index a01aa17..0000000 --- a/Assembly_CSharp/GamePlay/Explosion.cs +++ /dev/null @@ -1,27 +0,0 @@ -using UnityEngine; - -public class Explosion : MonoBehaviour -{ - [SerializeField] - private float duration = 2f; - - [SerializeField] - private Sound sound; - - private void Start() - { - if (sound != 0) - { - SFXManager.instance.PlaySound(sound, base.transform.position); - } - } - - private void FixedUpdate() - { - duration -= Time.fixedDeltaTime; - if (duration <= 0f) - { - Object.Destroy(base.gameObject); - } - } -} diff --git a/Assembly_CSharp/GamePlay/ParticleBeam.cs b/Assembly_CSharp/GamePlay/ParticleBeam.cs deleted file mode 100644 index 6a7bf2a..0000000 --- a/Assembly_CSharp/GamePlay/ParticleBeam.cs +++ /dev/null @@ -1,19 +0,0 @@ -using UnityEngine; - -public class ParticleBeam : Projectile -{ - [SerializeField] - private GameObject beamTrail; - - protected override void MoveProjectile() - { - base.MoveProjectile(); - beamTrail.transform.position = base.transform.position + new Vector3(Random.Range(-1f, 1f), Random.Range(0f, 1f), Random.Range(-1f, 1f)); - } - - protected new virtual void OnHit(RaycastHit hit) - { - beamTrail.transform.position = hit.point; - base.OnHit(hit); - } -} diff --git a/Assembly_CSharp/GamePlay/Projectile.cs b/Assembly_CSharp/GamePlay/Projectile.cs deleted file mode 100644 index 3c15fe4..0000000 --- a/Assembly_CSharp/GamePlay/Projectile.cs +++ /dev/null @@ -1,141 +0,0 @@ -using UnityEngine; - -public class Projectile : MonoBehaviour -{ - [SerializeField] - protected Sound launchSound; - - [SerializeField] - protected Sound hitSound; - - protected TowerType shotBy; - - [SerializeField] - protected LayerMask layermask; - - [SerializeField] - protected float speed; - - [SerializeField] - protected bool homing; - - [SerializeField] - protected float maximumLifeTime = 10f; - - [SerializeField] - public GameObject detachOnDestruction; - - [SerializeField] - public ProjectileFX extraFX; - - protected GameObject target; - - protected int damage; - - protected int healthDamage; - - protected int armorDamage; - - protected int shieldDamage; - - protected float slowPercent; - - protected float bleedPercent; - - protected float burnPercent; - - protected float poisonPercent; - - protected float critChance; - - protected float stunChance; - - protected virtual void Start() - { - if (launchSound != 0) - { - SFXManager.instance.PlaySound(launchSound, base.transform.position); - } - } - - protected virtual void FixedUpdate() - { - maximumLifeTime -= Time.fixedDeltaTime; - if (maximumLifeTime < 0f) - { - Object.Destroy(base.gameObject); - } - CheckForHits(); - MoveProjectile(); - if (homing) - { - AlterCourse(); - } - } - - public virtual void SetStats(TowerType whoShotMe, GameObject _target, float spd, int dmg, int healthDmg, int armorDmg, int shieldDmg, float slow, float bleed, float burn, float poison, float crit, float stun) - { - shotBy = whoShotMe; - target = _target; - speed = spd; - damage = dmg; - healthDamage = healthDmg; - armorDamage = armorDmg; - shieldDamage = shieldDmg; - slowPercent = slow; - bleedPercent = bleed; - burnPercent = burn; - poisonPercent = poison; - critChance = crit; - stunChance = stun; - } - - protected virtual void MoveProjectile() - { - base.transform.Translate(Vector3.forward * speed * Time.fixedDeltaTime); - } - - protected virtual void AlterCourse() - { - if (!(target == null)) - { - Quaternion rotation = Quaternion.LookRotation(0.25f * Vector3.up + target.transform.position - base.transform.position, Vector3.up); - base.transform.rotation = rotation; - } - } - - protected virtual void CheckForHits() - { - if (Physics.Raycast(base.transform.position, base.transform.forward, out var hitInfo, speed * Time.fixedDeltaTime, layermask, QueryTriggerInteraction.Collide)) - { - OnHit(hitInfo); - } - } - - protected virtual void OnHit(RaycastHit hit) - { - IDamageable component = hit.transform.GetComponent(); - if (component != null) - { - DealDamage(component); - } - if (detachOnDestruction != null) - { - detachOnDestruction.transform.parent = null; - } - if (extraFX != null) - { - extraFX.OnDetach(); - } - Object.Destroy(base.gameObject); - } - - protected virtual void DealDamage(IDamageable target) - { - target.TakeDamage(shotBy, damage, healthDamage, armorDamage, shieldDamage, slowPercent, bleedPercent, burnPercent, poisonPercent, critChance, stunChance); - if (hitSound != 0) - { - SFXManager.instance.PlaySound(hitSound, base.transform.position); - } - } -} diff --git a/Assembly_CSharp/GamePlay/ProjectileFX.cs b/Assembly_CSharp/GamePlay/ProjectileFX.cs deleted file mode 100644 index df82c3d..0000000 --- a/Assembly_CSharp/GamePlay/ProjectileFX.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using UnityEngine; - -public class ProjectileFX : MonoBehaviour -{ - [SerializeField] - private GameObject bleedingPS; - - [SerializeField] - private GameObject burrningPS; - - [SerializeField] - private GameObject poisonPS; - - public void SetFX(float bleeding, float burning, float poison, float slow, bool arcane) - { - if (OptionsMenu.instance.extraProjectileEffects) - { - if (bleeding > 0f) - { - bleedingPS.SetActive(value: true); - } - if (burning > 0f) - { - burrningPS.SetActive(value: true); - } - if (poison > 0f) - { - poisonPS.SetActive(value: true); - } - } - } - - public void OnDetach() - { - StartCoroutine(Die()); - } - - private IEnumerator Die() - { - bleedingPS.GetComponent().Stop(withChildren: true); - burrningPS.GetComponent().Stop(withChildren: true); - poisonPS.GetComponent().Stop(withChildren: true); - yield return new WaitForSeconds(1.1f); - Object.Destroy(base.gameObject); - } -} diff --git a/Assembly_CSharp/GamePlay/Sawblade.cs b/Assembly_CSharp/GamePlay/Sawblade.cs deleted file mode 100644 index 19038df..0000000 --- a/Assembly_CSharp/GamePlay/Sawblade.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class Sawblade : Projectile -{ - private Pathfinder targetPathfinder; - - private Waypoint nextWaypoint; - - private bool pathMode; - - private HashSet targetsHit = new HashSet(); - - public override void SetStats(TowerType whoShotMe, GameObject _target, float spd, int dmg, int healthDmg, int armorDmg, int shieldDmg, float slow, float bleed, float burn, float poison, float crit, float stun) - { - base.SetStats(whoShotMe, _target, spd, dmg, healthDmg, armorDmg, shieldDmg, slow, bleed, burn, poison, crit, stun); - targetPathfinder = target.GetComponent(); - nextWaypoint = targetPathfinder.currentWaypoint; - } - - protected override void AlterCourse() - { - if (!pathMode && targetPathfinder != null) - { - nextWaypoint = targetPathfinder.currentWaypoint; - } - if (!pathMode && (target == null || Vector3.SqrMagnitude(target.transform.position - base.transform.position) < 0.125f)) - { - nextWaypoint = GetPreviousWaypoint(); - pathMode = true; - } - Vector3 position; - if (!pathMode) - { - position = target.transform.position; - } - else - { - if (Vector3.SqrMagnitude(nextWaypoint.transform.position - base.transform.position) < 0.125f) - { - nextWaypoint = GetPreviousWaypoint(); - } - position = nextWaypoint.transform.position; - } - Quaternion rotation = Quaternion.LookRotation(position - base.transform.position, Vector3.up); - base.transform.rotation = rotation; - } - - protected override void CheckForHits() - { - Collider[] array = Physics.OverlapBox(base.transform.position, Vector3.one * 0.25f, Quaternion.identity, layermask, QueryTriggerInteraction.Collide); - foreach (Collider collider in array) - { - if (!pathMode && collider.gameObject == target) - { - nextWaypoint = GetPreviousWaypoint(); - pathMode = true; - } - if (targetsHit.Contains(collider)) - { - continue; - } - IDamageable component = collider.GetComponent(); - if (component != null) - { - DealDamage(component); - damage--; - if (damage <= 0) - { - Object.Destroy(base.gameObject); - } - } - targetsHit.Add(collider); - } - } - - private Waypoint GetPreviousWaypoint() - { - Waypoint[] previousWaypoints = nextWaypoint.GetPreviousWaypoints(); - if (previousWaypoints.Length == 0) - { - Object.Destroy(base.gameObject); - return nextWaypoint; - } - return previousWaypoints[Random.Range(0, previousWaypoints.Length)]; - } -} diff --git a/Assembly_CSharp/GamePlay/SnowFlake.cs b/Assembly_CSharp/GamePlay/SnowFlake.cs deleted file mode 100644 index 238b829..0000000 --- a/Assembly_CSharp/GamePlay/SnowFlake.cs +++ /dev/null @@ -1,23 +0,0 @@ -using UnityEngine; - -public class SnowFlake : Projectile -{ - protected override void Start() - { - base.Start(); - base.transform.Translate(new Vector3(Random.Range(-0.25f, 0.25f), Random.Range(-0.25f, 0.25f), Random.Range(-0.25f, 0.25f))); - } - - protected override void MoveProjectile() - { - base.transform.Translate(Vector3.down * speed * Time.fixedDeltaTime); - } - - protected override void CheckForHits() - { - if (Physics.SphereCast(base.transform.position, 0.125f, Vector3.down, out var hitInfo, speed * Time.fixedDeltaTime, layermask, QueryTriggerInteraction.Collide)) - { - OnHit(hitInfo); - } - } -} diff --git a/Assembly_CSharp/Other/Explosion.cs b/Assembly_CSharp/Other/Explosion.cs new file mode 100644 index 0000000..a01aa17 --- /dev/null +++ b/Assembly_CSharp/Other/Explosion.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +public class Explosion : MonoBehaviour +{ + [SerializeField] + private float duration = 2f; + + [SerializeField] + private Sound sound; + + private void Start() + { + if (sound != 0) + { + SFXManager.instance.PlaySound(sound, base.transform.position); + } + } + + private void FixedUpdate() + { + duration -= Time.fixedDeltaTime; + if (duration <= 0f) + { + Object.Destroy(base.gameObject); + } + } +} diff --git a/Assembly_CSharp/Projectile/Landmine.cs b/Assembly_CSharp/Projectile/Landmine.cs new file mode 100644 index 0000000..5422016 --- /dev/null +++ b/Assembly_CSharp/Projectile/Landmine.cs @@ -0,0 +1,67 @@ +using System.Collections; +using UnityEngine; + +public class Landmine : Projectile +{ + public float blastRadius = 0.5f; + + private bool armed; + + [SerializeField] + private GameObject explosion; + + protected override void Start() + { + base.Start(); + SpawnManager.instance.destroyOnNewLevel.Add(base.gameObject); + } + + public void SetEndPosition(Vector3 endPos) + { + StartCoroutine(ThrowMine(endPos)); + } + + protected override void FixedUpdate() + { + } + + private void OnTriggerEnter(Collider other) + { + if (armed && other.gameObject.layer == LayerMask.NameToLayer("Enemy")) + { + Explode(); + } + } + + private void Explode() + { + Collider[] array = Physics.OverlapSphere(base.transform.position, blastRadius, layermask, QueryTriggerInteraction.Collide); + for (int i = 0; i < array.Length; i++) + { + IDamageable component = array[i].GetComponent(); + if (component != null) + { + DealDamage(component); + } + } + Object.Instantiate(explosion, base.transform.position, Quaternion.identity).transform.localScale = Vector3.one * 0.5f; + SpawnManager.instance.destroyOnNewLevel.Remove(base.gameObject); + Object.Destroy(base.gameObject); + } + + private IEnumerator ThrowMine(Vector3 endPos) + { + Vector3 direction = endPos - base.transform.position; + float throwTime = 1f; + base.transform.localScale = Vector3.zero; + for (float i = 0f; i < 1f; i += Time.deltaTime / throwTime) + { + base.transform.localScale = Vector3.one * i; + base.transform.Translate(direction * Time.deltaTime / throwTime); + yield return null; + } + base.transform.localScale = Vector3.one; + base.transform.position = endPos; + armed = true; + } +} diff --git a/Assembly_CSharp/Projectile/MorterShell.cs b/Assembly_CSharp/Projectile/MorterShell.cs new file mode 100644 index 0000000..ce93441 --- /dev/null +++ b/Assembly_CSharp/Projectile/MorterShell.cs @@ -0,0 +1,81 @@ +using UnityEngine; + +public class MorterShell : Projectile +{ + [SerializeField] + private GameObject artObject; + + [SerializeField] + private LayerMask layersAffectedByBlast; + + public float blastRadius = 1f; + + private Vector3 destination; + + private float timeOfFlight; + + [SerializeField] + private float vSpeed; + + [SerializeField] + private float hSpeed; + + [SerializeField] + private float gravity = 5f; + + [SerializeField] + private GameObject explosion; + + private float lookAhead; + + private Vector3 previousPos; + + public void SetMorterPhysics(Vector3 pos) + { + destination = pos; + timeOfFlight = speed; + vSpeed = gravity * timeOfFlight / 2f; + hSpeed = Vector3.Magnitude(base.transform.position - destination) / timeOfFlight; + lookAhead = vSpeed + hSpeed; + } + + protected override void MoveProjectile() + { + previousPos = base.transform.position; + base.transform.Translate(Vector3.forward * hSpeed * Time.fixedDeltaTime); + base.transform.Translate(Vector3.up * vSpeed * Time.fixedDeltaTime); + vSpeed -= gravity * Time.fixedDeltaTime; + artObject.transform.rotation = Quaternion.LookRotation(base.transform.position - previousPos, Vector3.up); + } + + protected override void CheckForHits() + { + if (!(vSpeed > 0f) && Physics.Raycast(artObject.transform.position, artObject.transform.forward, out var hitInfo, lookAhead * Time.fixedDeltaTime, layermask, QueryTriggerInteraction.Collide)) + { + OnHit(hitInfo); + } + } + + protected override void OnHit(RaycastHit hit) + { + Collider[] array = Physics.OverlapSphere(base.transform.position, blastRadius, layersAffectedByBlast, QueryTriggerInteraction.Collide); + for (int i = 0; i < array.Length; i++) + { + IDamageable component = array[i].GetComponent(); + if (component != null) + { + DealDamage(component); + } + } + if (detachOnDestruction != null) + { + detachOnDestruction.transform.parent = null; + } + if (extraFX != null) + { + extraFX.OnDetach(); + } + Object.Instantiate(explosion, base.transform.position, Quaternion.identity); + Object.Destroy(base.gameObject); + } +} diff --git a/Assembly_CSharp/Projectile/ParticleBeam.cs b/Assembly_CSharp/Projectile/ParticleBeam.cs new file mode 100644 index 0000000..6a7bf2a --- /dev/null +++ b/Assembly_CSharp/Projectile/ParticleBeam.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +public class ParticleBeam : Projectile +{ + [SerializeField] + private GameObject beamTrail; + + protected override void MoveProjectile() + { + base.MoveProjectile(); + beamTrail.transform.position = base.transform.position + new Vector3(Random.Range(-1f, 1f), Random.Range(0f, 1f), Random.Range(-1f, 1f)); + } + + protected new virtual void OnHit(RaycastHit hit) + { + beamTrail.transform.position = hit.point; + base.OnHit(hit); + } +} diff --git a/Assembly_CSharp/Projectile/Projectile.cs b/Assembly_CSharp/Projectile/Projectile.cs new file mode 100644 index 0000000..3c15fe4 --- /dev/null +++ b/Assembly_CSharp/Projectile/Projectile.cs @@ -0,0 +1,141 @@ +using UnityEngine; + +public class Projectile : MonoBehaviour +{ + [SerializeField] + protected Sound launchSound; + + [SerializeField] + protected Sound hitSound; + + protected TowerType shotBy; + + [SerializeField] + protected LayerMask layermask; + + [SerializeField] + protected float speed; + + [SerializeField] + protected bool homing; + + [SerializeField] + protected float maximumLifeTime = 10f; + + [SerializeField] + public GameObject detachOnDestruction; + + [SerializeField] + public ProjectileFX extraFX; + + protected GameObject target; + + protected int damage; + + protected int healthDamage; + + protected int armorDamage; + + protected int shieldDamage; + + protected float slowPercent; + + protected float bleedPercent; + + protected float burnPercent; + + protected float poisonPercent; + + protected float critChance; + + protected float stunChance; + + protected virtual void Start() + { + if (launchSound != 0) + { + SFXManager.instance.PlaySound(launchSound, base.transform.position); + } + } + + protected virtual void FixedUpdate() + { + maximumLifeTime -= Time.fixedDeltaTime; + if (maximumLifeTime < 0f) + { + Object.Destroy(base.gameObject); + } + CheckForHits(); + MoveProjectile(); + if (homing) + { + AlterCourse(); + } + } + + public virtual void SetStats(TowerType whoShotMe, GameObject _target, float spd, int dmg, int healthDmg, int armorDmg, int shieldDmg, float slow, float bleed, float burn, float poison, float crit, float stun) + { + shotBy = whoShotMe; + target = _target; + speed = spd; + damage = dmg; + healthDamage = healthDmg; + armorDamage = armorDmg; + shieldDamage = shieldDmg; + slowPercent = slow; + bleedPercent = bleed; + burnPercent = burn; + poisonPercent = poison; + critChance = crit; + stunChance = stun; + } + + protected virtual void MoveProjectile() + { + base.transform.Translate(Vector3.forward * speed * Time.fixedDeltaTime); + } + + protected virtual void AlterCourse() + { + if (!(target == null)) + { + Quaternion rotation = Quaternion.LookRotation(0.25f * Vector3.up + target.transform.position - base.transform.position, Vector3.up); + base.transform.rotation = rotation; + } + } + + protected virtual void CheckForHits() + { + if (Physics.Raycast(base.transform.position, base.transform.forward, out var hitInfo, speed * Time.fixedDeltaTime, layermask, QueryTriggerInteraction.Collide)) + { + OnHit(hitInfo); + } + } + + protected virtual void OnHit(RaycastHit hit) + { + IDamageable component = hit.transform.GetComponent(); + if (component != null) + { + DealDamage(component); + } + if (detachOnDestruction != null) + { + detachOnDestruction.transform.parent = null; + } + if (extraFX != null) + { + extraFX.OnDetach(); + } + Object.Destroy(base.gameObject); + } + + protected virtual void DealDamage(IDamageable target) + { + target.TakeDamage(shotBy, damage, healthDamage, armorDamage, shieldDamage, slowPercent, bleedPercent, burnPercent, poisonPercent, critChance, stunChance); + if (hitSound != 0) + { + SFXManager.instance.PlaySound(hitSound, base.transform.position); + } + } +} diff --git a/Assembly_CSharp/Projectile/ProjectileFX.cs b/Assembly_CSharp/Projectile/ProjectileFX.cs new file mode 100644 index 0000000..df82c3d --- /dev/null +++ b/Assembly_CSharp/Projectile/ProjectileFX.cs @@ -0,0 +1,47 @@ +using System.Collections; +using UnityEngine; + +public class ProjectileFX : MonoBehaviour +{ + [SerializeField] + private GameObject bleedingPS; + + [SerializeField] + private GameObject burrningPS; + + [SerializeField] + private GameObject poisonPS; + + public void SetFX(float bleeding, float burning, float poison, float slow, bool arcane) + { + if (OptionsMenu.instance.extraProjectileEffects) + { + if (bleeding > 0f) + { + bleedingPS.SetActive(value: true); + } + if (burning > 0f) + { + burrningPS.SetActive(value: true); + } + if (poison > 0f) + { + poisonPS.SetActive(value: true); + } + } + } + + public void OnDetach() + { + StartCoroutine(Die()); + } + + private IEnumerator Die() + { + bleedingPS.GetComponent().Stop(withChildren: true); + burrningPS.GetComponent().Stop(withChildren: true); + poisonPS.GetComponent().Stop(withChildren: true); + yield return new WaitForSeconds(1.1f); + Object.Destroy(base.gameObject); + } +} diff --git a/Assembly_CSharp/Projectile/Sawblade.cs b/Assembly_CSharp/Projectile/Sawblade.cs new file mode 100644 index 0000000..19038df --- /dev/null +++ b/Assembly_CSharp/Projectile/Sawblade.cs @@ -0,0 +1,87 @@ +using System.Collections.Generic; +using UnityEngine; + +public class Sawblade : Projectile +{ + private Pathfinder targetPathfinder; + + private Waypoint nextWaypoint; + + private bool pathMode; + + private HashSet targetsHit = new HashSet(); + + public override void SetStats(TowerType whoShotMe, GameObject _target, float spd, int dmg, int healthDmg, int armorDmg, int shieldDmg, float slow, float bleed, float burn, float poison, float crit, float stun) + { + base.SetStats(whoShotMe, _target, spd, dmg, healthDmg, armorDmg, shieldDmg, slow, bleed, burn, poison, crit, stun); + targetPathfinder = target.GetComponent(); + nextWaypoint = targetPathfinder.currentWaypoint; + } + + protected override void AlterCourse() + { + if (!pathMode && targetPathfinder != null) + { + nextWaypoint = targetPathfinder.currentWaypoint; + } + if (!pathMode && (target == null || Vector3.SqrMagnitude(target.transform.position - base.transform.position) < 0.125f)) + { + nextWaypoint = GetPreviousWaypoint(); + pathMode = true; + } + Vector3 position; + if (!pathMode) + { + position = target.transform.position; + } + else + { + if (Vector3.SqrMagnitude(nextWaypoint.transform.position - base.transform.position) < 0.125f) + { + nextWaypoint = GetPreviousWaypoint(); + } + position = nextWaypoint.transform.position; + } + Quaternion rotation = Quaternion.LookRotation(position - base.transform.position, Vector3.up); + base.transform.rotation = rotation; + } + + protected override void CheckForHits() + { + Collider[] array = Physics.OverlapBox(base.transform.position, Vector3.one * 0.25f, Quaternion.identity, layermask, QueryTriggerInteraction.Collide); + foreach (Collider collider in array) + { + if (!pathMode && collider.gameObject == target) + { + nextWaypoint = GetPreviousWaypoint(); + pathMode = true; + } + if (targetsHit.Contains(collider)) + { + continue; + } + IDamageable component = collider.GetComponent(); + if (component != null) + { + DealDamage(component); + damage--; + if (damage <= 0) + { + Object.Destroy(base.gameObject); + } + } + targetsHit.Add(collider); + } + } + + private Waypoint GetPreviousWaypoint() + { + Waypoint[] previousWaypoints = nextWaypoint.GetPreviousWaypoints(); + if (previousWaypoints.Length == 0) + { + Object.Destroy(base.gameObject); + return nextWaypoint; + } + return previousWaypoints[Random.Range(0, previousWaypoints.Length)]; + } +} diff --git a/Assembly_CSharp/Projectile/SnowFlake.cs b/Assembly_CSharp/Projectile/SnowFlake.cs new file mode 100644 index 0000000..238b829 --- /dev/null +++ b/Assembly_CSharp/Projectile/SnowFlake.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +public class SnowFlake : Projectile +{ + protected override void Start() + { + base.Start(); + base.transform.Translate(new Vector3(Random.Range(-0.25f, 0.25f), Random.Range(-0.25f, 0.25f), Random.Range(-0.25f, 0.25f))); + } + + protected override void MoveProjectile() + { + base.transform.Translate(Vector3.down * speed * Time.fixedDeltaTime); + } + + protected override void CheckForHits() + { + if (Physics.SphereCast(base.transform.position, 0.125f, Vector3.down, out var hitInfo, speed * Time.fixedDeltaTime, layermask, QueryTriggerInteraction.Collide)) + { + OnHit(hitInfo); + } + } +} diff --git a/Assembly_CSharp/RogueTower.csproj b/Assembly_CSharp/RogueTower.csproj index b932131..4530366 100644 --- a/Assembly_CSharp/RogueTower.csproj +++ b/Assembly_CSharp/RogueTower.csproj @@ -257,7 +257,4 @@ ..\..\Rogue Tower_Data\Managed\UnityEngine.XRModule.dll - - - \ No newline at end of file diff --git a/Assembly_CSharp/Tower/Dropper.cs b/Assembly_CSharp/Tower/Dropper.cs deleted file mode 100644 index 0dc7a10..0000000 --- a/Assembly_CSharp/Tower/Dropper.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class Dropper : Tower -{ - [SerializeField] - private int manaPerSecond; - - [SerializeField] - private float dropHeight = 3f; - - [SerializeField] - private LayerMask dropSetMask; - - [SerializeField] - protected Vector2[] dropPoints; - - [SerializeField] - private bool requireTargetToDrop; - - private int currentLevel; - - public float dropperRPMdisplay; - - private float timeOfNextManaCheck; - - private bool canFire = true; - - protected override void Start() - { - base.Start(); - SetDropPoints(); - } - - public override void SetStats() - { - base.SetStats(); - rps = 60f / rpm * (10f / (10f + (float)dropPoints.Length)); - dropperRPMdisplay = rpm * (10f + (float)dropPoints.Length) / 10f; - } - - private void SetDropPoints() - { - List list = new List(); - for (int i = -(int)base.range; (float)i <= base.range; i++) - { - for (int j = -(int)base.range; (float)j <= base.range; j++) - { - if (Physics.Raycast(new Vector3(base.transform.position.x + (float)i, dropHeight, base.transform.position.z + (float)j), Vector3.down, out var hitInfo, 1.5f * dropHeight, dropSetMask, QueryTriggerInteraction.Ignore) && hitInfo.transform.gameObject.layer == LayerMask.NameToLayer("Path")) - { - list.Add(new Vector2(i, j)); - } - } - } - dropPoints = list.ToArray(); - rps = 60f / rpm * (10f / (10f + (float)dropPoints.Length)); - dropperRPMdisplay = rpm * (10f + (float)dropPoints.Length) / 10f; - } - - protected override void Update() - { - if (SpawnManager.instance.level != currentLevel) - { - SetDropPoints(); - currentLevel = SpawnManager.instance.level; - } - if (currentTarget != null) - { - if (turret != null) - { - AimTurret(); - } - GainXP(); - } - if (manaPerSecond > 0 && Time.time >= timeOfNextManaCheck && SpawnManager.instance.combat) - { - timeOfNextManaCheck = Time.time + 1f; - if (ResourceManager.instance.CheckMana(manaPerSecond)) - { - ResourceManager.instance.SpendMana(manaPerSecond); - canFire = true; - } - else - { - canFire = false; - } - } - timeSinceLastShot += Time.deltaTime; - if (canFire && TargetingCheck() && timeSinceLastShot > rps && SpawnManager.instance.combat) - { - Fire(); - timeSinceLastShot = 0f; - } - } - - private bool TargetingCheck() - { - if (requireTargetToDrop) - { - if (currentTarget != null) - { - return true; - } - return false; - } - return true; - } - - protected override void Fire() - { - if (consumesMana) - { - int manaCost = (int)((float)base.damage * manaConsumptionRate); - if (!ResourceManager.instance.CheckMana(manaCost)) - { - return; - } - ResourceManager.instance.SpendMana(manaCost); - } - if (dropPoints.Length != 0) - { - Vector2 vector = dropPoints[Random.Range(0, dropPoints.Length)]; - Object.Instantiate(projectile, new Vector3(vector.x, dropHeight, vector.y) + base.transform.position, Quaternion.identity).GetComponent().SetStats(towerType, null, projectileSpeed, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); - } - } -} diff --git a/Assembly_CSharp/Tower/FlameThrower.cs b/Assembly_CSharp/Tower/FlameThrower.cs deleted file mode 100644 index d415d88..0000000 --- a/Assembly_CSharp/Tower/FlameThrower.cs +++ /dev/null @@ -1,68 +0,0 @@ -using UnityEngine; - -public class FlameThrower : Tower -{ - [SerializeField] - private ParticleSystem flames; - - public bool flaming; - - private bool hasMana = true; - - [SerializeField] - private AudioSource audioS; - - private bool soundPlaying; - - protected override void Update() - { - if (hasMana && currentTarget != null && !flaming) - { - flames.Play(); - PlaySound(onOff: true); - flaming = true; - } - else if (!hasMana || (currentTarget == null && flaming)) - { - flames.Stop(); - PlaySound(onOff: false); - flaming = false; - } - base.Update(); - } - - protected override void Fire() - { - if (consumesMana) - { - int manaCost = (int)((float)base.damage * manaConsumptionRate); - if (!ResourceManager.instance.CheckMana(manaCost)) - { - hasMana = false; - return; - } - ResourceManager.instance.SpendMana(manaCost); - hasMana = true; - } - RaycastHit[] array = Physics.SphereCastAll(muzzle.position, base.range / 6f, muzzle.transform.forward, base.range * 1.5f, enemyLayerMask, QueryTriggerInteraction.Collide); - foreach (RaycastHit raycastHit in array) - { - raycastHit.collider.GetComponent()?.TakeDamage(towerType, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); - } - } - - private void PlaySound(bool onOff) - { - if (onOff && !soundPlaying) - { - audioS.volume = OptionsMenu.instance.masterVolume * OptionsMenu.instance.sfxVolume; - audioS.Play(); - soundPlaying = true; - } - else if (!onOff && soundPlaying) - { - audioS.Stop(); - soundPlaying = false; - } - } -} diff --git a/Assembly_CSharp/Tower/Lookout.cs b/Assembly_CSharp/Tower/Lookout.cs deleted file mode 100644 index 3abd55b..0000000 --- a/Assembly_CSharp/Tower/Lookout.cs +++ /dev/null @@ -1,97 +0,0 @@ -using UnityEngine; - -public class Lookout : Tower -{ - [SerializeField] - private GameObject markIcon; - - private GameObject currentMark; - - protected override void Update() - { - if (currentTarget != null) - { - markIcon.SetActive(value: true); - UpdateMark(); - GainXP(); - } - else - { - markIcon.SetActive(value: false); - } - } - - private void UpdateMark() - { - if (currentTarget != currentMark) - { - if (currentMark != null) - { - currentMark.GetComponent().mark = null; - } - currentMark = currentTarget; - currentMark.GetComponent().mark = this; - } - markIcon.transform.position = currentMark.transform.position; - } - - protected override GameObject SelectEnemy(Collider[] possibleTargets) - { - GameObject result = null; - float num = -1f; - for (int i = 0; i < possibleTargets.Length; i++) - { - float num2 = 1f; - Enemy component = possibleTargets[i].GetComponent(); - if (!(component.mark != this) || !(component.mark != null)) - { - if (CheckPriority(Priority.Progress)) - { - num2 /= Mathf.Max(0.001f, possibleTargets[i].GetComponent().distanceFromEnd); - } - if (CheckPriority(Priority.NearDeath)) - { - num2 /= Mathf.Max(0.001f, component.CurrentHealth()); - } - if (CheckPriority(Priority.MostHealth)) - { - num2 *= (float)Mathf.Max(1, component.health); - } - if (CheckPriority(Priority.MostArmor)) - { - num2 *= (float)Mathf.Max(1, component.armor); - } - if (CheckPriority(Priority.MostShield)) - { - num2 *= (float)Mathf.Max(1, component.shield); - } - if (CheckPriority(Priority.LeastHealth)) - { - num2 /= (float)Mathf.Max(1, component.health); - } - if (CheckPriority(Priority.LeastArmor)) - { - num2 /= (float)Mathf.Max(1, component.armor); - } - if (CheckPriority(Priority.LeastShield)) - { - num2 /= (float)Mathf.Max(1, component.shield); - } - if (CheckPriority(Priority.Fastest)) - { - num2 *= Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); - } - if (CheckPriority(Priority.Slowest)) - { - num2 /= Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); - } - if (num2 > num) - { - result = component.gameObject; - num = num2; - } - } - } - return result; - } -} diff --git a/Assembly_CSharp/Tower/Morter.cs b/Assembly_CSharp/Tower/Morter.cs deleted file mode 100644 index 2170da3..0000000 --- a/Assembly_CSharp/Tower/Morter.cs +++ /dev/null @@ -1,39 +0,0 @@ -using UnityEngine; - -public class Morter : Tower -{ - protected override void AimTurret() - { - } - - protected override void Fire() - { - if (consumesMana) - { - int manaCost = (int)((float)base.damage * finalManaConsumption); - if (!ResourceManager.instance.CheckMana(manaCost)) - { - return; - } - ResourceManager.instance.SpendMana(manaCost); - } - float num = projectileSpeed * Mathf.Clamp(Vector3.SqrMagnitude(currentTarget.transform.position - base.transform.position) / (2f * baseRange * baseRange), 1f, float.MaxValue); - Vector3 vector = currentTarget.GetComponent().GetFuturePosition(num) - turret.transform.position; - GameObject gameObject = Object.Instantiate(rotation: Quaternion.LookRotation(new Vector3(vector.x, 0f, vector.z), Vector3.up), original: projectile, position: muzzle.position); - gameObject.GetComponent().SetStats(towerType, currentTarget, num, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); - gameObject.GetComponent().SetMorterPhysics(currentTarget.GetComponent().GetFuturePosition(num)); - gameObject.GetComponent().blastRadius = base.blastRadius; - if (extraProjectileFX != null) - { - GameObject gameObject2 = Object.Instantiate(extraProjectileFX, gameObject.transform.position, gameObject.transform.rotation); - gameObject2.transform.SetParent(gameObject.transform); - gameObject2.GetComponent().SetFX(base.bleedPercent, base.burnPercent, base.poisonPercent, base.slowPercent, consumesMana); - Projectile component = gameObject.GetComponent(); - if (component.detachOnDestruction == null) - { - component.detachOnDestruction = gameObject2; - component.extraFX = gameObject2.GetComponent(); - } - } - } -} diff --git a/Assembly_CSharp/Tower/MorterShell.cs b/Assembly_CSharp/Tower/MorterShell.cs deleted file mode 100644 index ce93441..0000000 --- a/Assembly_CSharp/Tower/MorterShell.cs +++ /dev/null @@ -1,81 +0,0 @@ -using UnityEngine; - -public class MorterShell : Projectile -{ - [SerializeField] - private GameObject artObject; - - [SerializeField] - private LayerMask layersAffectedByBlast; - - public float blastRadius = 1f; - - private Vector3 destination; - - private float timeOfFlight; - - [SerializeField] - private float vSpeed; - - [SerializeField] - private float hSpeed; - - [SerializeField] - private float gravity = 5f; - - [SerializeField] - private GameObject explosion; - - private float lookAhead; - - private Vector3 previousPos; - - public void SetMorterPhysics(Vector3 pos) - { - destination = pos; - timeOfFlight = speed; - vSpeed = gravity * timeOfFlight / 2f; - hSpeed = Vector3.Magnitude(base.transform.position - destination) / timeOfFlight; - lookAhead = vSpeed + hSpeed; - } - - protected override void MoveProjectile() - { - previousPos = base.transform.position; - base.transform.Translate(Vector3.forward * hSpeed * Time.fixedDeltaTime); - base.transform.Translate(Vector3.up * vSpeed * Time.fixedDeltaTime); - vSpeed -= gravity * Time.fixedDeltaTime; - artObject.transform.rotation = Quaternion.LookRotation(base.transform.position - previousPos, Vector3.up); - } - - protected override void CheckForHits() - { - if (!(vSpeed > 0f) && Physics.Raycast(artObject.transform.position, artObject.transform.forward, out var hitInfo, lookAhead * Time.fixedDeltaTime, layermask, QueryTriggerInteraction.Collide)) - { - OnHit(hitInfo); - } - } - - protected override void OnHit(RaycastHit hit) - { - Collider[] array = Physics.OverlapSphere(base.transform.position, blastRadius, layersAffectedByBlast, QueryTriggerInteraction.Collide); - for (int i = 0; i < array.Length; i++) - { - IDamageable component = array[i].GetComponent(); - if (component != null) - { - DealDamage(component); - } - } - if (detachOnDestruction != null) - { - detachOnDestruction.transform.parent = null; - } - if (extraFX != null) - { - extraFX.OnDetach(); - } - Object.Instantiate(explosion, base.transform.position, Quaternion.identity); - Object.Destroy(base.gameObject); - } -} diff --git a/Assembly_CSharp/Tower/Obelisk.cs b/Assembly_CSharp/Tower/Obelisk.cs deleted file mode 100644 index 549f3b4..0000000 --- a/Assembly_CSharp/Tower/Obelisk.cs +++ /dev/null @@ -1,99 +0,0 @@ -using UnityEngine; - -public class Obelisk : Tower -{ - [SerializeField] - private GameObject beam; - - [SerializeField] - private AudioSource audioS; - - private bool soundPlaying; - - private IDamageable lastThingIHit; - - private float timeOnTarget; - - protected override void Update() - { - if (currentTarget != null) - { - if (turret != null) - { - AimTurret(); - } - GainXP(); - } - else - { - beam.SetActive(value: false); - PlaySound(onOff: false); - } - timeSinceLastShot += Time.deltaTime; - if (currentTarget != null && timeSinceLastShot > rps) - { - Fire(); - timeSinceLastShot = 0f; - } - } - - protected override void Fire() - { - if (consumesMana) - { - int manaCost = (int)((float)base.damage * manaConsumptionRate); - if (!ResourceManager.instance.CheckMana(manaCost)) - { - beam.SetActive(value: false); - PlaySound(onOff: false); - return; - } - ResourceManager.instance.SpendMana(manaCost); - } - DealDamage(); - } - - protected override void AimTurret() - { - Vector3 forward = currentTarget.transform.position - turret.transform.position + Vector3.up * 0.5f; - Quaternion rotation = Quaternion.LookRotation(forward, Vector3.up); - turret.transform.rotation = rotation; - beam.transform.localScale = new Vector3(1f, 1f, forward.magnitude); - } - - private void DealDamage() - { - IDamageable component = currentTarget.GetComponent(); - if (component != null) - { - if (component == lastThingIHit) - { - timeOnTarget += rps; - } - else - { - timeOnTarget = 0f; - lastThingIHit = component; - } - int num = Mathf.Clamp(Mathf.FloorToInt(timeOnTarget * TowerManager.instance.obeliskTimeOnTargetMultiplier), 0, base.damage); - component.TakeDamage(towerType, base.damage + num, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); - beam.SetActive(value: true); - PlaySound(onOff: true); - } - } - - private void PlaySound(bool onOff) - { - if (onOff && !soundPlaying) - { - audioS.volume = OptionsMenu.instance.masterVolume * OptionsMenu.instance.sfxVolume; - audioS.Play(); - soundPlaying = true; - } - else if (!onOff && soundPlaying) - { - audioS.Stop(); - soundPlaying = false; - } - } -} diff --git a/Assembly_CSharp/Tower/RadarTower.cs b/Assembly_CSharp/Tower/RadarTower.cs deleted file mode 100644 index e0d8d1d..0000000 --- a/Assembly_CSharp/Tower/RadarTower.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; - -public class RadarTower : Tower -{ - [SerializeField] - private GameObject biPlanePrefab; - - [SerializeField] - private BiPlane myPlane; - - protected override void Start() - { - if (myPlane == null) - { - myPlane = Object.Instantiate(biPlanePrefab, base.transform.position + new Vector3(-50f, 5f, 0f), Quaternion.identity).GetComponent(); - } - base.Start(); - } - - public override void SetStats() - { - base.SetStats(); - if (myPlane == null) - { - myPlane = Object.Instantiate(biPlanePrefab, base.transform.position + new Vector3(-50f, 5f, 0f), Quaternion.identity).GetComponent(); - } - myPlane.damage = base.damage; - myPlane.healthDamage = base.healthDamage; - myPlane.armorDamage = base.armorDamage; - myPlane.shieldDamage = base.shieldDamage; - myPlane.rps = rps; - myPlane.slowPercent = base.slowPercent; - myPlane.bleedPercent = base.bleedPercent; - myPlane.burnPercent = base.burnPercent; - myPlane.poisonPercent = base.poisonPercent; - myPlane.critChance = base.critChance; - myPlane.stunChance = base.stunChance; - } - - protected override void Update() - { - if (currentTarget != null) - { - if (turret != null) - { - AimTurret(); - } - GainXP(); - } - timeSinceLastShot += Time.deltaTime; - if (currentTarget != null && timeSinceLastShot > 3f) - { - SendTargetInfo(currentTarget); - timeSinceLastShot = 0f; - } - } - - private void SendTargetInfo(GameObject target) - { - if (myPlane.target == null) - { - myPlane.target = target; - } - } - - public override void Demolish() - { - Object.Destroy(myPlane.gameObject); - base.Demolish(); - } -} diff --git a/Assembly_CSharp/Tower/TeslaCoil.cs b/Assembly_CSharp/Tower/TeslaCoil.cs deleted file mode 100644 index 97954e7..0000000 --- a/Assembly_CSharp/Tower/TeslaCoil.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections; -using UnityEngine; - -public class TeslaCoil : Tower -{ - [SerializeField] - private GameObject lightningTrail; - - protected override void AimTurret() - { - } - - protected override void Fire() - { - if (consumesMana) - { - int manaCost = (int)((float)base.damage * manaConsumptionRate); - if (!ResourceManager.instance.CheckMana(manaCost)) - { - return; - } - ResourceManager.instance.SpendMana(manaCost); - } - Vector3 position = base.transform.position; - position.y = 0f; - Collider[] array = Physics.OverlapSphere(position, base.range, enemyLayerMask, QueryTriggerInteraction.Collide); - for (int i = 0; i < array.Length; i++) - { - array[i].GetComponent()?.TakeDamage(towerType, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); - } - SFXManager.instance.PlaySound(Sound.TeslaZap, base.transform.position); - StartCoroutine(DrawLightning()); - } - - private IEnumerator DrawLightning() - { - for (float i = 0f; i <= (float)Math.PI * 2f; i += 0.5f) - { - Vector3 vector = new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); - lightningTrail.transform.position = vector + new Vector3(base.transform.position.x + Mathf.Sin(i) * base.range, 0.75f, base.transform.position.z + Mathf.Cos(i) * base.range); - yield return new WaitForEndOfFrame(); - } - } -} diff --git a/Assembly_CSharp/Tower/Tower.cs b/Assembly_CSharp/Tower/Tower.cs deleted file mode 100644 index 4098bd6..0000000 --- a/Assembly_CSharp/Tower/Tower.cs +++ /dev/null @@ -1,509 +0,0 @@ -using UnityEngine; - -public class Tower : MonoBehaviour, IBuildable -{ - public enum Priority - { - Progress, - NearDeath, - MostHealth, - MostArmor, - MostShield, - LeastHealth, - LeastArmor, - LeastShield, - Fastest, - Slowest, - Marked - } - - public TowerType towerType; - - public bool squareUI; - - [SerializeField] - protected GameObject towerUI; - - public Priority[] priorities = new Priority[3]; - - [SerializeField] - protected GameObject turret; - - [SerializeField] - protected bool towerVerticalyAims = true; - - [SerializeField] - protected Transform muzzle; - - [SerializeField] - protected GameObject projectile; - - [SerializeField] - protected float projectileSpeed = 10f; - - [SerializeField] - protected GameObject extraProjectileFX; - - [SerializeField] - protected int baseDamage; - - [SerializeField] - protected int baseHealthDamage; - - [SerializeField] - protected int baseArmorDamage; - - [SerializeField] - protected int baseShieldDamage; - - public float rpm; - - protected float rps; - - [SerializeField] - protected float baseRange; - - [SerializeField] - protected float baseSlowPercentage; - - [SerializeField] - protected float baseBleedPercentage; - - [SerializeField] - protected float baseBurnPercentage; - - [SerializeField] - protected float basePoisonPercentage; - - [SerializeField] - protected LayerMask enemyLayerMask; - - [SerializeField] - protected LayerMask buildingLayerMask; - - public bool consumesMana; - - public float manaConsumptionRate; - - public float finalManaConsumption; - - public int upgradeCostMultiplier = 1; - - private int damageUpgrade; - - private int healthDamageUpgrade; - - private int armorDamageUpgrade; - - private int shieldDamageUpgrade; - - private int heightBonus; - - protected float timeSinceLastShot; - - private float lastTargetUpdate = 1f; - - protected GameObject currentTarget; - - [SerializeField] - protected float baseBlastRadius; - - public int level { get; private set; } - - public float healthXP { get; private set; } - - public float armorXP { get; private set; } - - public float shieldXP { get; private set; } - - public int damage { get; private set; } - - public int healthDamage { get; private set; } - - public int armorDamage { get; private set; } - - public int shieldDamage { get; private set; } - - public float range { get; private set; } - - public float slowPercent { get; private set; } - - public float bleedPercent { get; private set; } - - public float burnPercent { get; private set; } - - public float poisonPercent { get; private set; } - - public float critChance { get; private set; } - - public float stunChance { get; private set; } - - public float blastRadius { get; private set; } - - protected virtual void Start() - { - level = 1; - SetStats(); - TowerManager.instance.AddNewTower(this, towerType); - DetectHouses(); - priorities[0] = (priorities[1] = (priorities[2] = Priority.Progress)); - } - - public virtual void SetStats() - { - heightBonus = (int)Mathf.Round(base.transform.position.y * 3f - 1f); - damage = Mathf.Max(baseDamage + heightBonus + damageUpgrade + TowerManager.instance.GetBonusBaseDamage(towerType), 0); - healthDamage = baseHealthDamage + healthDamageUpgrade + TowerManager.instance.GetBonusHealthDamage(towerType); - armorDamage = baseArmorDamage + armorDamageUpgrade + TowerManager.instance.GetBonusArmorDamage(towerType); - shieldDamage = baseShieldDamage + shieldDamageUpgrade + TowerManager.instance.GetBonusShieldDamage(towerType); - rps = 60f / rpm; - range = baseRange + (float)heightBonus / 2f + TowerManager.instance.GetBonusRange(towerType); - slowPercent = baseSlowPercentage + TowerManager.instance.GetBonusSlow(towerType); - bleedPercent = baseBleedPercentage + TowerManager.instance.GetBonusBleed(towerType); - burnPercent = baseBurnPercentage + TowerManager.instance.GetBonusBurn(towerType); - poisonPercent = basePoisonPercentage + TowerManager.instance.GetBonusPoison(towerType); - blastRadius = baseBlastRadius + TowerManager.instance.GetBonusBlast(towerType); - finalManaConsumption = manaConsumptionRate + TowerManager.instance.GetManaConsumptionBonus(towerType); - if (TowerManager.instance.GetManaConsumptionBonus(towerType) > 0f) - { - consumesMana = true; - } - critChance = TowerManager.instance.GetCritChance(towerType) + TowerManager.instance.GetCritChanceLevelMultiplier(towerType) * (float)level / 100f; - stunChance = TowerManager.instance.GetStunChance(towerType); - } - - private void FixedUpdate() - { - if (lastTargetUpdate <= 0f) - { - DetectEnemies(); - } - else - { - lastTargetUpdate -= Time.fixedDeltaTime; - } - } - - protected virtual void Update() - { - if (currentTarget != null) - { - if (turret != null) - { - AimTurret(); - } - GainXP(); - } - timeSinceLastShot += Time.deltaTime; - if (currentTarget != null && timeSinceLastShot > rps) - { - Fire(); - timeSinceLastShot = 0f; - } - } - - private void DetectHouses() - { - if (Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckForHouse(hitInfo); - } - if (Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckForHouse(hitInfo); - } - if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckForHouse(hitInfo); - } - if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) - { - CheckForHouse(hitInfo); - } - } - - private void CheckForHouse(RaycastHit hit) - { - if (hit.collider.GetComponent() != null && (double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) <= 0.001) - { - hit.collider.GetComponent().AddDefender(this); - } - } - - public void TogglePriority(int index, int direction) - { - priorities[index] = (Priority)(((int)(priorities[index] + direction) % 11 + 11) % 11); - } - - protected virtual void Fire() - { - if (consumesMana) - { - int manaCost = (int)((float)damage * finalManaConsumption); - if (!ResourceManager.instance.CheckMana(manaCost)) - { - return; - } - ResourceManager.instance.SpendMana(manaCost); - } - GameObject gameObject = Object.Instantiate(projectile, muzzle.position, muzzle.rotation); - gameObject.GetComponent().SetStats(towerType, currentTarget, projectileSpeed, damage, healthDamage, armorDamage, shieldDamage, slowPercent, bleedPercent, burnPercent, poisonPercent, critChance, stunChance); - if (extraProjectileFX != null) - { - GameObject gameObject2 = Object.Instantiate(extraProjectileFX, gameObject.transform.position, gameObject.transform.rotation); - gameObject2.transform.SetParent(gameObject.transform); - gameObject2.GetComponent().SetFX(bleedPercent, burnPercent, poisonPercent, slowPercent, consumesMana); - Projectile component = gameObject.GetComponent(); - if (component.detachOnDestruction == null) - { - component.detachOnDestruction = gameObject2; - component.extraFX = gameObject2.GetComponent(); - } - } - } - - protected virtual void AimTurret() - { - Vector3 forward = currentTarget.transform.position - turret.transform.position; - if (!towerVerticalyAims) - { - forward.y = 0f; - } - Quaternion rotation = Quaternion.LookRotation(forward, Vector3.up); - turret.transform.rotation = rotation; - } - - protected void GainXP() - { - Enemy component = currentTarget.GetComponent(); - if (component != null) - { - if (component.shield > 0) - { - shieldXP += Time.deltaTime / (2f * range) + Time.deltaTime / 2f; - } - else if (component.armor > 0) - { - armorXP += Time.deltaTime / (2f * range) + Time.deltaTime / 2f; - } - else - { - healthXP += Time.deltaTime / (2f * range) + Time.deltaTime / 2f; - } - CheckXPAndLevelUp(); - } - } - - private void CheckXPAndLevelUp() - { - if (healthXP >= (float)(10 * level)) - { - healthXP -= 10 * level; - level++; - damageUpgrade++; - healthDamageUpgrade++; - SetStats(); - LevelUpText(); - } - if (armorXP >= (float)(10 * level)) - { - armorXP -= 10 * level; - level++; - damageUpgrade++; - armorDamageUpgrade++; - SetStats(); - LevelUpText(); - } - if (shieldXP >= (float)(10 * level)) - { - shieldXP -= 10 * level; - level++; - damageUpgrade++; - shieldDamageUpgrade++; - SetStats(); - LevelUpText(); - } - } - - private void LevelUpText() - { - Object.Instantiate(BuildingManager.instance.levelUpFX, base.transform.position, Quaternion.identity); - DamageNumber component = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); - component.SetText("LEVEL UP!", "Grey", 1f); - component.SetHoldTime(1f); - AchievementManager.instance.TowerLevel(level); - } - - public void BuyHealthLevel() - { - int num = (10 * level - (int)healthXP) * upgradeCostMultiplier; - if (ResourceManager.instance.CheckMoney(num)) - { - ResourceManager.instance.Spend(num); - DamageTracker.instance.AddCost(towerType, num); - healthXP -= 10 * level - num / upgradeCostMultiplier; - level++; - damageUpgrade++; - healthDamageUpgrade++; - SetStats(); - LevelUpText(); - } - } - - public void BuyArmorLevel() - { - int num = (10 * level - (int)armorXP) * upgradeCostMultiplier; - if (ResourceManager.instance.CheckMoney(num)) - { - ResourceManager.instance.Spend(num); - DamageTracker.instance.AddCost(towerType, num); - armorXP -= 10 * level - num / upgradeCostMultiplier; - level++; - damageUpgrade++; - armorDamageUpgrade++; - SetStats(); - LevelUpText(); - } - } - - public void BuyShieldLevel() - { - int num = (10 * level - (int)shieldXP) * upgradeCostMultiplier; - if (ResourceManager.instance.CheckMoney(num)) - { - ResourceManager.instance.Spend(num); - DamageTracker.instance.AddCost(towerType, num); - shieldXP -= 10 * level - num / upgradeCostMultiplier; - level++; - damageUpgrade++; - shieldDamageUpgrade++; - SetStats(); - LevelUpText(); - } - } - - private void DetectEnemies() - { - Collider[] array = Physics.OverlapSphere(base.transform.position, range, enemyLayerMask, QueryTriggerInteraction.Collide); - if (array.Length != 0) - { - currentTarget = SelectEnemy(array); - } - else - { - currentTarget = null; - } - lastTargetUpdate = Random.Range(0.25f, 1f); - } - - protected bool CheckPriority(Priority check) - { - for (int i = 0; i < priorities.Length; i++) - { - if (check == priorities[i]) - { - return true; - } - } - return false; - } - - protected int PriorityScale(Priority check) - { - for (int i = 0; i < priorities.Length; i++) - { - if (check == priorities[i]) - { - return Mathf.Clamp(3 - i, 1, 3); - } - } - return 1; - } - - protected virtual GameObject SelectEnemy(Collider[] possibleTargets) - { - GameObject result = null; - float num = -1f; - for (int i = 0; i < possibleTargets.Length; i++) - { - float num2 = 1f; - Enemy component = possibleTargets[i].GetComponent(); - if (CheckPriority(Priority.Progress)) - { - float f = Mathf.Max(0.001f, possibleTargets[i].GetComponent().distanceFromEnd); - num2 /= Mathf.Pow(f, PriorityScale(Priority.Progress)); - } - if (CheckPriority(Priority.NearDeath)) - { - float f2 = Mathf.Max(0.001f, component.CurrentHealth()); - num2 /= Mathf.Pow(f2, PriorityScale(Priority.NearDeath)); - } - if (CheckPriority(Priority.MostHealth)) - { - float f3 = (float)Mathf.Max(1, component.health) / 1000f; - num2 *= Mathf.Pow(f3, PriorityScale(Priority.MostHealth)); - } - if (CheckPriority(Priority.MostArmor)) - { - float f4 = (float)Mathf.Max(1, component.armor) / 1000f; - num2 *= Mathf.Pow(f4, PriorityScale(Priority.MostArmor)); - } - if (CheckPriority(Priority.MostShield)) - { - float f5 = (float)Mathf.Max(1, component.shield) / 1000f; - num2 *= Mathf.Pow(f5, PriorityScale(Priority.MostShield)); - } - if (CheckPriority(Priority.LeastHealth)) - { - float f6 = Mathf.Max(1, component.health); - num2 /= Mathf.Pow(f6, PriorityScale(Priority.LeastHealth)); - } - if (CheckPriority(Priority.LeastArmor)) - { - float f7 = Mathf.Max(1, component.armor); - num2 /= Mathf.Pow(f7, PriorityScale(Priority.LeastArmor)); - } - if (CheckPriority(Priority.LeastShield)) - { - float f8 = Mathf.Max(1, component.shield); - num2 /= Mathf.Pow(f8, PriorityScale(Priority.LeastShield)); - } - if (CheckPriority(Priority.Fastest)) - { - float f9 = Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); - num2 *= Mathf.Pow(f9, PriorityScale(Priority.Fastest)); - } - if (CheckPriority(Priority.Slowest)) - { - float f10 = Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); - num2 /= Mathf.Pow(f10, PriorityScale(Priority.Slowest)); - } - if (CheckPriority(Priority.Marked)) - { - float f11 = 1f; - if (component.mark != null) - { - f11 = (float)(component.mark.damage * (component.mark.healthDamage + component.mark.armorDamage + component.mark.shieldDamage)) * (1f + component.mark.critChance); - } - num2 *= Mathf.Pow(f11, PriorityScale(Priority.Marked)); - } - if (num2 > num) - { - result = component.gameObject; - num = num2; - } - } - return result; - } - - public void SpawnUI() - { - Object.Instantiate(towerUI, base.transform.position, Quaternion.identity).GetComponent().SetStats(this); - } - - public virtual void Demolish() - { - TowerManager.instance.RemoveTower(this, towerType); - Object.Destroy(base.gameObject); - } -} diff --git a/Assembly_CSharp/Tower/TowerFlyweight.cs b/Assembly_CSharp/Tower/TowerFlyweight.cs deleted file mode 100644 index b63f8b4..0000000 --- a/Assembly_CSharp/Tower/TowerFlyweight.cs +++ /dev/null @@ -1,279 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class TowerFlyweight : MonoBehaviour -{ - private HashSet towers = new HashSet(); - - [SerializeField] - private BuildButtonUI myBuildButton; - - [SerializeField] - private int basePrice; - - [SerializeField] - public int priceIncrease; - - [SerializeField] - public int currentPrice; - - [SerializeField] - public int sellPrice; - - [SerializeField] - public float bonusRange; - - [SerializeField] - public int bonusBaseDamage; - - [SerializeField] - public int bonusHealthDamage; - - [SerializeField] - public int bonusArmorDamage; - - [SerializeField] - public int bonusShieldDamage; - - [SerializeField] - public float bonusSlow; - - [SerializeField] - public float bonusBleed; - - [SerializeField] - public float bonusBurn; - - [SerializeField] - public float bonusPoison; - - [SerializeField] - public float bonusBlast; - - [SerializeField] - public float critChance; - - [SerializeField] - public float critChanceLevelMultiplier; - - [SerializeField] - public float stunChance; - - [SerializeField] - public float manaConsumptionAddition; - - [SerializeField] - private TowerType towerTypeForDamageTracker; - - public void AddNewTower(Tower newTower) - { - towers.Add(newTower); - currentPrice = basePrice + towers.Count * priceIncrease; - sellPrice = basePrice + (towers.Count - 1) * priceIncrease; - myBuildButton.UpdatePriceText(); - } - - public void RemoveTower(Tower newTower) - { - towers.Remove(newTower); - currentPrice = basePrice + towers.Count * priceIncrease; - sellPrice = basePrice + (towers.Count - 1) * priceIncrease; - myBuildButton.UpdatePriceText(); - ResourceManager.instance.AddMoney(basePrice + towers.Count * priceIncrease); - DamageTracker.instance.AddCost(towerTypeForDamageTracker, -(basePrice + towers.Count * priceIncrease)); - } - - public void UpdateTowerStats() - { - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddManaAddition(float bonus) - { - manaConsumptionAddition += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddStunChance(float bonus) - { - stunChance += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddCritChance(float bonus) - { - critChance += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddCritChanceLevelMultiplier(float bonus) - { - critChanceLevelMultiplier += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusRange(float bonus) - { - bonusRange += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusBaseDamage(int bonus) - { - bonusBaseDamage += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusHealthDamage(int bonus) - { - bonusHealthDamage += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusArmorDamage(int bonus) - { - bonusArmorDamage += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusShieldDamage(int bonus) - { - bonusShieldDamage += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusSlow(float bonus) - { - bonusSlow += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusBleed(float bonus) - { - bonusBleed += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusBurn(float bonus) - { - bonusBurn += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusPoison(float bonus) - { - bonusPoison += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } - - public void AddBonusBlast(float bonus) - { - bonusBlast += bonus; - foreach (Tower tower in towers) - { - tower.SetStats(); - } - if (myBuildButton != null) - { - myBuildButton.UpdateModifiersText(); - } - } -} diff --git a/Assembly_CSharp/Tower/TowerManager.cs b/Assembly_CSharp/Tower/TowerManager.cs deleted file mode 100644 index abdca52..0000000 --- a/Assembly_CSharp/Tower/TowerManager.cs +++ /dev/null @@ -1,1386 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class TowerManager : MonoBehaviour -{ - public static TowerManager instance; - - [SerializeField] - private TowerFlyweight global; - - [SerializeField] - private TowerFlyweight crossbow; - - [SerializeField] - private TowerFlyweight morter; - - [SerializeField] - private TowerFlyweight teslaCoil; - - [SerializeField] - private TowerFlyweight flameThrower; - - [SerializeField] - private TowerFlyweight poisonSprayer; - - [SerializeField] - private TowerFlyweight frostKeep; - - [SerializeField] - private TowerFlyweight radar; - - [SerializeField] - private TowerFlyweight obelisk; - - [SerializeField] - private TowerFlyweight particleCannon; - - [SerializeField] - private TowerFlyweight shredder; - - [SerializeField] - private TowerFlyweight encampment; - - [SerializeField] - private TowerFlyweight lookout; - - [SerializeField] - private TowerFlyweight siphon; - - public HashSet towersUsed = new HashSet(); - - private bool usedAllTowers; - - public float obeliskTimeOnTargetMultiplier; - - private void Awake() - { - instance = this; - } - - public void AddNewTower(Tower t, TowerType type) - { - if (type != TowerType.Siphon) - { - towersUsed.Add(type); - } - if (!usedAllTowers) - { - usedAllTowers = AchievementManager.instance.CheckAllTowers(); - } - switch (type) - { - case TowerType.Crossbow: - crossbow.AddNewTower(t); - break; - case TowerType.Morter: - morter.AddNewTower(t); - break; - case TowerType.TeslaCoil: - teslaCoil.AddNewTower(t); - break; - case TowerType.FlameThrower: - flameThrower.AddNewTower(t); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddNewTower(t); - break; - case TowerType.Frost: - frostKeep.AddNewTower(t); - break; - case TowerType.Radar: - radar.AddNewTower(t); - break; - case TowerType.Obelisk: - obelisk.AddNewTower(t); - break; - case TowerType.ParticleCannon: - particleCannon.AddNewTower(t); - break; - case TowerType.Shredder: - shredder.AddNewTower(t); - break; - case TowerType.Encampment: - encampment.AddNewTower(t); - break; - case TowerType.Lookout: - lookout.AddNewTower(t); - break; - default: - Debug.LogError("Failed to add tower to flyweight"); - break; - } - } - - public void RemoveTower(Tower t, TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.RemoveTower(t); - break; - case TowerType.Morter: - morter.RemoveTower(t); - break; - case TowerType.TeslaCoil: - teslaCoil.RemoveTower(t); - break; - case TowerType.FlameThrower: - flameThrower.RemoveTower(t); - break; - case TowerType.PoisonSprayer: - poisonSprayer.RemoveTower(t); - break; - case TowerType.Frost: - frostKeep.RemoveTower(t); - break; - case TowerType.Obelisk: - obelisk.RemoveTower(t); - break; - case TowerType.Radar: - radar.RemoveTower(t); - break; - case TowerType.ParticleCannon: - particleCannon.RemoveTower(t); - break; - case TowerType.Shredder: - shredder.RemoveTower(t); - break; - case TowerType.Encampment: - encampment.RemoveTower(t); - break; - case TowerType.Lookout: - lookout.RemoveTower(t); - break; - default: - Debug.LogError("Failed to add tower to flyweight"); - break; - } - } - - public void UpdateAllTowers() - { - crossbow.UpdateTowerStats(); - morter.UpdateTowerStats(); - teslaCoil.UpdateTowerStats(); - flameThrower.UpdateTowerStats(); - poisonSprayer.UpdateTowerStats(); - frostKeep.UpdateTowerStats(); - radar.UpdateTowerStats(); - obelisk.UpdateTowerStats(); - particleCannon.UpdateTowerStats(); - shredder.UpdateTowerStats(); - encampment.UpdateTowerStats(); - lookout.UpdateTowerStats(); - } - - public int GetSellPrice(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return crossbow.sellPrice; - case TowerType.Morter: - return morter.sellPrice; - case TowerType.TeslaCoil: - return teslaCoil.sellPrice; - case TowerType.FlameThrower: - return flameThrower.sellPrice; - case TowerType.PoisonSprayer: - return poisonSprayer.sellPrice; - case TowerType.Frost: - return frostKeep.sellPrice; - case TowerType.Obelisk: - return obelisk.sellPrice; - case TowerType.Radar: - return radar.sellPrice; - case TowerType.ParticleCannon: - return particleCannon.sellPrice; - case TowerType.Shredder: - return shredder.sellPrice; - case TowerType.Encampment: - return encampment.sellPrice; - case TowerType.Lookout: - return lookout.sellPrice; - default: - Debug.LogError("Failed to add tower to flyweight"); - return -1; - } - } - - public float GetManaConsumptionBonus(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.manaConsumptionAddition + crossbow.manaConsumptionAddition; - case TowerType.Morter: - return global.manaConsumptionAddition + morter.manaConsumptionAddition; - case TowerType.TeslaCoil: - return global.manaConsumptionAddition + teslaCoil.manaConsumptionAddition; - case TowerType.FlameThrower: - return global.manaConsumptionAddition + flameThrower.manaConsumptionAddition; - case TowerType.PoisonSprayer: - return global.manaConsumptionAddition + poisonSprayer.manaConsumptionAddition; - case TowerType.Frost: - return global.manaConsumptionAddition + frostKeep.manaConsumptionAddition; - case TowerType.Radar: - return global.manaConsumptionAddition + radar.manaConsumptionAddition; - case TowerType.Obelisk: - return global.manaConsumptionAddition + obelisk.manaConsumptionAddition; - case TowerType.ParticleCannon: - return global.manaConsumptionAddition + particleCannon.manaConsumptionAddition; - case TowerType.Shredder: - return global.manaConsumptionAddition + shredder.manaConsumptionAddition; - case TowerType.Encampment: - return global.manaConsumptionAddition + encampment.manaConsumptionAddition; - case TowerType.Lookout: - return global.manaConsumptionAddition + lookout.manaConsumptionAddition; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetCritChance(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.critChance + crossbow.critChance; - case TowerType.Morter: - return global.critChance + morter.critChance; - case TowerType.TeslaCoil: - return global.critChance + teslaCoil.critChance; - case TowerType.FlameThrower: - return global.critChance + flameThrower.critChance; - case TowerType.PoisonSprayer: - return global.critChance + poisonSprayer.critChance; - case TowerType.Frost: - return global.critChance + frostKeep.critChance; - case TowerType.Radar: - return global.critChance + radar.critChance; - case TowerType.Obelisk: - return global.critChance + obelisk.critChance; - case TowerType.ParticleCannon: - return global.critChance + particleCannon.critChance; - case TowerType.Shredder: - return global.critChance + shredder.critChance; - case TowerType.Encampment: - return global.critChance + encampment.critChance; - case TowerType.Lookout: - return global.critChance + lookout.critChance; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetStunChance(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.stunChance + crossbow.stunChance; - case TowerType.Morter: - return global.stunChance + morter.stunChance; - case TowerType.TeslaCoil: - return global.stunChance + teslaCoil.stunChance; - case TowerType.FlameThrower: - return global.stunChance + flameThrower.stunChance; - case TowerType.PoisonSprayer: - return global.stunChance + poisonSprayer.stunChance; - case TowerType.Frost: - return global.stunChance + frostKeep.stunChance; - case TowerType.Radar: - return global.stunChance + radar.stunChance; - case TowerType.Obelisk: - return global.stunChance + obelisk.stunChance; - case TowerType.ParticleCannon: - return global.stunChance + particleCannon.stunChance; - case TowerType.Shredder: - return global.stunChance + shredder.stunChance; - case TowerType.Encampment: - return global.stunChance + encampment.stunChance; - case TowerType.Lookout: - return global.stunChance + lookout.stunChance; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetCritChanceLevelMultiplier(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.critChanceLevelMultiplier + crossbow.critChanceLevelMultiplier; - case TowerType.Morter: - return global.critChanceLevelMultiplier + morter.critChanceLevelMultiplier; - case TowerType.TeslaCoil: - return global.critChanceLevelMultiplier + teslaCoil.critChanceLevelMultiplier; - case TowerType.FlameThrower: - return global.critChanceLevelMultiplier + flameThrower.critChanceLevelMultiplier; - case TowerType.PoisonSprayer: - return global.critChanceLevelMultiplier + poisonSprayer.critChanceLevelMultiplier; - case TowerType.Frost: - return global.critChanceLevelMultiplier + frostKeep.critChanceLevelMultiplier; - case TowerType.Radar: - return global.critChanceLevelMultiplier + radar.critChanceLevelMultiplier; - case TowerType.Obelisk: - return global.critChanceLevelMultiplier + obelisk.critChanceLevelMultiplier; - case TowerType.ParticleCannon: - return global.critChanceLevelMultiplier + particleCannon.critChanceLevelMultiplier; - case TowerType.Shredder: - return global.critChanceLevelMultiplier + shredder.critChanceLevelMultiplier; - case TowerType.Encampment: - return global.critChanceLevelMultiplier + encampment.critChanceLevelMultiplier; - case TowerType.Lookout: - return global.critChanceLevelMultiplier + lookout.critChanceLevelMultiplier; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetBonusRange(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusRange + crossbow.bonusRange; - case TowerType.Morter: - return global.bonusRange + morter.bonusRange; - case TowerType.TeslaCoil: - return global.bonusRange + teslaCoil.bonusRange; - case TowerType.FlameThrower: - return global.bonusRange + flameThrower.bonusRange; - case TowerType.PoisonSprayer: - return global.bonusRange + poisonSprayer.bonusRange; - case TowerType.Frost: - return global.bonusRange + frostKeep.bonusRange; - case TowerType.Radar: - return global.bonusRange + radar.bonusRange; - case TowerType.Obelisk: - return global.bonusRange + obelisk.bonusRange; - case TowerType.ParticleCannon: - return global.bonusRange + particleCannon.bonusRange; - case TowerType.Shredder: - return global.bonusRange + shredder.bonusRange; - case TowerType.Encampment: - return global.bonusRange + encampment.bonusRange; - case TowerType.Lookout: - return global.bonusRange + lookout.bonusRange; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public int GetBonusBaseDamage(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusBaseDamage + crossbow.bonusBaseDamage; - case TowerType.Morter: - return global.bonusBaseDamage + morter.bonusBaseDamage; - case TowerType.TeslaCoil: - return global.bonusBaseDamage + teslaCoil.bonusBaseDamage; - case TowerType.FlameThrower: - return global.bonusBaseDamage + flameThrower.bonusBaseDamage; - case TowerType.PoisonSprayer: - return global.bonusBaseDamage + poisonSprayer.bonusBaseDamage; - case TowerType.Frost: - return global.bonusBaseDamage + frostKeep.bonusBaseDamage; - case TowerType.Radar: - return global.bonusBaseDamage + radar.bonusBaseDamage; - case TowerType.Obelisk: - return global.bonusBaseDamage + obelisk.bonusBaseDamage; - case TowerType.ParticleCannon: - return global.bonusBaseDamage + particleCannon.bonusBaseDamage; - case TowerType.Shredder: - return global.bonusBaseDamage + shredder.bonusBaseDamage; - case TowerType.Encampment: - return global.bonusBaseDamage + encampment.bonusBaseDamage; - case TowerType.Lookout: - return global.bonusBaseDamage + lookout.bonusBaseDamage; - default: - Debug.Log("Failed to get global bonus"); - return 0; - } - } - - public int GetBonusHealthDamage(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusHealthDamage + crossbow.bonusHealthDamage; - case TowerType.Morter: - return global.bonusHealthDamage + morter.bonusHealthDamage; - case TowerType.TeslaCoil: - return global.bonusHealthDamage + teslaCoil.bonusHealthDamage; - case TowerType.FlameThrower: - return global.bonusHealthDamage + flameThrower.bonusHealthDamage; - case TowerType.PoisonSprayer: - return global.bonusHealthDamage + poisonSprayer.bonusHealthDamage; - case TowerType.Frost: - return global.bonusHealthDamage + frostKeep.bonusHealthDamage; - case TowerType.Radar: - return global.bonusHealthDamage + radar.bonusHealthDamage; - case TowerType.Obelisk: - return global.bonusHealthDamage + obelisk.bonusHealthDamage; - case TowerType.ParticleCannon: - return global.bonusHealthDamage + particleCannon.bonusHealthDamage; - case TowerType.Shredder: - return global.bonusHealthDamage + shredder.bonusHealthDamage; - case TowerType.Encampment: - return global.bonusHealthDamage + encampment.bonusHealthDamage; - case TowerType.Lookout: - return global.bonusHealthDamage + lookout.bonusHealthDamage; - default: - Debug.Log("Failed to get global bonus"); - return 0; - } - } - - public int GetBonusArmorDamage(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusArmorDamage + crossbow.bonusArmorDamage; - case TowerType.Morter: - return global.bonusArmorDamage + morter.bonusArmorDamage; - case TowerType.TeslaCoil: - return global.bonusArmorDamage + teslaCoil.bonusArmorDamage; - case TowerType.FlameThrower: - return global.bonusArmorDamage + flameThrower.bonusArmorDamage; - case TowerType.PoisonSprayer: - return global.bonusArmorDamage + poisonSprayer.bonusArmorDamage; - case TowerType.Frost: - return global.bonusArmorDamage + frostKeep.bonusArmorDamage; - case TowerType.Radar: - return global.bonusArmorDamage + radar.bonusArmorDamage; - case TowerType.Obelisk: - return global.bonusArmorDamage + obelisk.bonusArmorDamage; - case TowerType.ParticleCannon: - return global.bonusArmorDamage + particleCannon.bonusArmorDamage; - case TowerType.Shredder: - return global.bonusArmorDamage + shredder.bonusArmorDamage; - case TowerType.Encampment: - return global.bonusArmorDamage + encampment.bonusArmorDamage; - case TowerType.Lookout: - return global.bonusArmorDamage + lookout.bonusArmorDamage; - default: - Debug.Log("Failed to get global bonus"); - return 0; - } - } - - public int GetBonusShieldDamage(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusShieldDamage + crossbow.bonusShieldDamage; - case TowerType.Morter: - return global.bonusShieldDamage + morter.bonusShieldDamage; - case TowerType.TeslaCoil: - return global.bonusShieldDamage + teslaCoil.bonusShieldDamage; - case TowerType.FlameThrower: - return global.bonusShieldDamage + flameThrower.bonusShieldDamage; - case TowerType.PoisonSprayer: - return global.bonusShieldDamage + poisonSprayer.bonusShieldDamage; - case TowerType.Frost: - return global.bonusShieldDamage + frostKeep.bonusShieldDamage; - case TowerType.Radar: - return global.bonusShieldDamage + radar.bonusShieldDamage; - case TowerType.Obelisk: - return global.bonusShieldDamage + obelisk.bonusShieldDamage; - case TowerType.ParticleCannon: - return global.bonusShieldDamage + particleCannon.bonusShieldDamage; - case TowerType.Shredder: - return global.bonusShieldDamage + shredder.bonusShieldDamage; - case TowerType.Encampment: - return global.bonusShieldDamage + encampment.bonusShieldDamage; - case TowerType.Lookout: - return global.bonusShieldDamage + lookout.bonusShieldDamage; - default: - Debug.Log("Failed to get global bonus"); - return 0; - } - } - - public float GetBonusSlow(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusSlow + crossbow.bonusSlow; - case TowerType.Morter: - return global.bonusSlow + morter.bonusSlow; - case TowerType.TeslaCoil: - return global.bonusSlow + teslaCoil.bonusSlow; - case TowerType.FlameThrower: - return global.bonusSlow + flameThrower.bonusSlow; - case TowerType.PoisonSprayer: - return global.bonusSlow + poisonSprayer.bonusSlow; - case TowerType.Frost: - return global.bonusSlow + frostKeep.bonusSlow; - case TowerType.Radar: - return global.bonusSlow + radar.bonusSlow; - case TowerType.Obelisk: - return global.bonusSlow + obelisk.bonusSlow; - case TowerType.ParticleCannon: - return global.bonusSlow + particleCannon.bonusSlow; - case TowerType.Shredder: - return global.bonusSlow + shredder.bonusSlow; - case TowerType.Encampment: - return global.bonusSlow + encampment.bonusSlow; - case TowerType.Lookout: - return global.bonusSlow + lookout.bonusSlow; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetBonusBleed(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusBleed + crossbow.bonusBleed; - case TowerType.Morter: - return global.bonusBleed + morter.bonusBleed; - case TowerType.TeslaCoil: - return global.bonusBleed + teslaCoil.bonusBleed; - case TowerType.FlameThrower: - return global.bonusBleed + flameThrower.bonusBleed; - case TowerType.PoisonSprayer: - return global.bonusBleed + poisonSprayer.bonusBleed; - case TowerType.Frost: - return global.bonusBleed + frostKeep.bonusBleed; - case TowerType.Radar: - return global.bonusBleed + radar.bonusBleed; - case TowerType.Obelisk: - return global.bonusBleed + obelisk.bonusBleed; - case TowerType.ParticleCannon: - return global.bonusBleed + particleCannon.bonusBleed; - case TowerType.Shredder: - return global.bonusBleed + shredder.bonusBleed; - case TowerType.Encampment: - return global.bonusBleed + encampment.bonusBleed; - case TowerType.Lookout: - return global.bonusBleed + lookout.bonusBleed; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetBonusBurn(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusBurn + crossbow.bonusBurn; - case TowerType.Morter: - return global.bonusBurn + morter.bonusBurn; - case TowerType.TeslaCoil: - return global.bonusBurn + teslaCoil.bonusBurn; - case TowerType.FlameThrower: - return global.bonusBurn + flameThrower.bonusBurn; - case TowerType.PoisonSprayer: - return global.bonusBurn + poisonSprayer.bonusBurn; - case TowerType.Frost: - return global.bonusBurn + frostKeep.bonusBurn; - case TowerType.Radar: - return global.bonusBurn + radar.bonusBurn; - case TowerType.Obelisk: - return global.bonusBurn + obelisk.bonusBurn; - case TowerType.ParticleCannon: - return global.bonusBurn + particleCannon.bonusBurn; - case TowerType.Shredder: - return global.bonusBurn + shredder.bonusBurn; - case TowerType.Encampment: - return global.bonusBurn + encampment.bonusBurn; - case TowerType.Lookout: - return global.bonusBurn + lookout.bonusBurn; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetBonusPoison(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusPoison + crossbow.bonusPoison; - case TowerType.Morter: - return global.bonusPoison + morter.bonusPoison; - case TowerType.TeslaCoil: - return global.bonusPoison + teslaCoil.bonusPoison; - case TowerType.FlameThrower: - return global.bonusPoison + flameThrower.bonusPoison; - case TowerType.PoisonSprayer: - return global.bonusPoison + poisonSprayer.bonusPoison; - case TowerType.Frost: - return global.bonusPoison + frostKeep.bonusPoison; - case TowerType.Radar: - return global.bonusPoison + radar.bonusPoison; - case TowerType.Obelisk: - return global.bonusPoison + obelisk.bonusPoison; - case TowerType.ParticleCannon: - return global.bonusPoison + particleCannon.bonusPoison; - case TowerType.Shredder: - return global.bonusPoison + shredder.bonusPoison; - case TowerType.Encampment: - return global.bonusPoison + encampment.bonusPoison; - case TowerType.Lookout: - return global.bonusPoison + lookout.bonusPoison; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public float GetBonusBlast(TowerType type) - { - switch (type) - { - case TowerType.Crossbow: - return global.bonusBlast + crossbow.bonusBlast; - case TowerType.Morter: - return global.bonusBlast + morter.bonusBlast; - case TowerType.TeslaCoil: - return global.bonusBlast + teslaCoil.bonusBlast; - case TowerType.FlameThrower: - return global.bonusBlast + flameThrower.bonusBlast; - case TowerType.PoisonSprayer: - return global.bonusBlast + poisonSprayer.bonusBlast; - case TowerType.Frost: - return global.bonusBlast + frostKeep.bonusBlast; - case TowerType.Radar: - return global.bonusBlast + radar.bonusBlast; - case TowerType.Obelisk: - return global.bonusBlast + obelisk.bonusBlast; - case TowerType.ParticleCannon: - return global.bonusBlast + particleCannon.bonusBlast; - case TowerType.Shredder: - return global.bonusBlast + shredder.bonusBlast; - case TowerType.Encampment: - return global.bonusBlast + encampment.bonusBlast; - case TowerType.Lookout: - return global.bonusBlast + lookout.bonusBlast; - default: - Debug.Log("Failed to get global bonus"); - return 0f; - } - } - - public void AddManaConsumption(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddManaAddition(value); - break; - case TowerType.Morter: - morter.AddManaAddition(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddManaAddition(value); - break; - case TowerType.FlameThrower: - flameThrower.AddManaAddition(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddManaAddition(value); - break; - case TowerType.Frost: - frostKeep.AddManaAddition(value); - break; - case TowerType.Radar: - radar.AddManaAddition(value); - break; - case TowerType.Obelisk: - obelisk.AddManaAddition(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddManaAddition(value); - break; - case TowerType.Shredder: - shredder.AddManaAddition(value); - break; - case TowerType.Encampment: - encampment.AddManaAddition(value); - break; - case TowerType.Lookout: - lookout.AddManaAddition(value); - break; - case TowerType.Global: - global.AddManaAddition(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddCritChance(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddCritChance(value); - break; - case TowerType.Morter: - morter.AddCritChance(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddCritChance(value); - break; - case TowerType.FlameThrower: - flameThrower.AddCritChance(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddCritChance(value); - break; - case TowerType.Frost: - frostKeep.AddCritChance(value); - break; - case TowerType.Radar: - radar.AddCritChance(value); - break; - case TowerType.Obelisk: - obelisk.AddCritChance(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddCritChance(value); - break; - case TowerType.Shredder: - shredder.AddCritChance(value); - break; - case TowerType.Encampment: - encampment.AddCritChance(value); - break; - case TowerType.Lookout: - lookout.AddCritChance(value); - break; - case TowerType.Global: - global.AddCritChance(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddStunChance(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddStunChance(value); - break; - case TowerType.Morter: - morter.AddStunChance(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddStunChance(value); - break; - case TowerType.FlameThrower: - flameThrower.AddStunChance(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddStunChance(value); - break; - case TowerType.Frost: - frostKeep.AddStunChance(value); - break; - case TowerType.Radar: - radar.AddStunChance(value); - break; - case TowerType.Obelisk: - obelisk.AddStunChance(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddStunChance(value); - break; - case TowerType.Shredder: - shredder.AddStunChance(value); - break; - case TowerType.Encampment: - encampment.AddStunChance(value); - break; - case TowerType.Lookout: - lookout.AddStunChance(value); - break; - case TowerType.Global: - global.AddStunChance(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddCritChanceLevelMultiplier(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Morter: - morter.AddCritChanceLevelMultiplier(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddCritChanceLevelMultiplier(value); - break; - case TowerType.FlameThrower: - flameThrower.AddCritChanceLevelMultiplier(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Frost: - frostKeep.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Radar: - radar.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Obelisk: - obelisk.AddCritChanceLevelMultiplier(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Shredder: - shredder.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Encampment: - encampment.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Lookout: - lookout.AddCritChanceLevelMultiplier(value); - break; - case TowerType.Global: - global.AddCritChanceLevelMultiplier(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusRange(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusRange(value); - break; - case TowerType.Morter: - morter.AddBonusRange(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusRange(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusRange(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusRange(value); - break; - case TowerType.Frost: - frostKeep.AddBonusRange(value); - break; - case TowerType.Radar: - radar.AddBonusRange(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusRange(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusRange(value); - break; - case TowerType.Shredder: - shredder.AddBonusRange(value); - break; - case TowerType.Encampment: - encampment.AddBonusRange(value); - break; - case TowerType.Lookout: - lookout.AddBonusRange(value); - break; - case TowerType.Global: - global.AddBonusRange(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusBaseDamage(TowerType type, int value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusBaseDamage(value); - break; - case TowerType.Morter: - morter.AddBonusBaseDamage(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusBaseDamage(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusBaseDamage(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusBaseDamage(value); - break; - case TowerType.Frost: - frostKeep.AddBonusBaseDamage(value); - break; - case TowerType.Radar: - radar.AddBonusBaseDamage(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusBaseDamage(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusBaseDamage(value); - break; - case TowerType.Shredder: - shredder.AddBonusBaseDamage(value); - break; - case TowerType.Encampment: - encampment.AddBonusBaseDamage(value); - break; - case TowerType.Lookout: - lookout.AddBonusBaseDamage(value); - break; - case TowerType.Global: - global.AddBonusBaseDamage(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusHealthDamage(TowerType type, int value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusHealthDamage(value); - break; - case TowerType.Morter: - morter.AddBonusHealthDamage(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusHealthDamage(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusHealthDamage(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusHealthDamage(value); - break; - case TowerType.Frost: - frostKeep.AddBonusHealthDamage(value); - break; - case TowerType.Radar: - radar.AddBonusHealthDamage(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusHealthDamage(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusHealthDamage(value); - break; - case TowerType.Shredder: - shredder.AddBonusHealthDamage(value); - break; - case TowerType.Encampment: - encampment.AddBonusHealthDamage(value); - break; - case TowerType.Lookout: - lookout.AddBonusHealthDamage(value); - break; - case TowerType.Global: - global.AddBonusHealthDamage(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusArmorDamage(TowerType type, int value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusArmorDamage(value); - break; - case TowerType.Morter: - morter.AddBonusArmorDamage(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusArmorDamage(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusArmorDamage(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusArmorDamage(value); - break; - case TowerType.Frost: - frostKeep.AddBonusArmorDamage(value); - break; - case TowerType.Radar: - radar.AddBonusArmorDamage(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusArmorDamage(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusArmorDamage(value); - break; - case TowerType.Shredder: - shredder.AddBonusArmorDamage(value); - break; - case TowerType.Encampment: - encampment.AddBonusArmorDamage(value); - break; - case TowerType.Lookout: - lookout.AddBonusArmorDamage(value); - break; - case TowerType.Global: - global.AddBonusArmorDamage(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusShieldDamage(TowerType type, int value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusShieldDamage(value); - break; - case TowerType.Morter: - morter.AddBonusShieldDamage(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusShieldDamage(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusShieldDamage(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusShieldDamage(value); - break; - case TowerType.Frost: - frostKeep.AddBonusShieldDamage(value); - break; - case TowerType.Radar: - radar.AddBonusShieldDamage(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusShieldDamage(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusShieldDamage(value); - break; - case TowerType.Shredder: - shredder.AddBonusShieldDamage(value); - break; - case TowerType.Encampment: - encampment.AddBonusShieldDamage(value); - break; - case TowerType.Lookout: - lookout.AddBonusShieldDamage(value); - break; - case TowerType.Global: - global.AddBonusShieldDamage(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusSlow(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusSlow(value); - break; - case TowerType.Morter: - morter.AddBonusSlow(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusSlow(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusSlow(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusSlow(value); - break; - case TowerType.Frost: - frostKeep.AddBonusSlow(value); - break; - case TowerType.Radar: - radar.AddBonusSlow(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusSlow(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusSlow(value); - break; - case TowerType.Shredder: - shredder.AddBonusSlow(value); - break; - case TowerType.Encampment: - encampment.AddBonusSlow(value); - break; - case TowerType.Lookout: - lookout.AddBonusSlow(value); - break; - case TowerType.Global: - global.AddBonusSlow(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusBleed(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusBleed(value); - break; - case TowerType.Morter: - morter.AddBonusBleed(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusBleed(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusBleed(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusBleed(value); - break; - case TowerType.Frost: - frostKeep.AddBonusBleed(value); - break; - case TowerType.Radar: - radar.AddBonusBleed(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusBleed(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusBleed(value); - break; - case TowerType.Shredder: - shredder.AddBonusBleed(value); - break; - case TowerType.Encampment: - encampment.AddBonusBleed(value); - break; - case TowerType.Lookout: - lookout.AddBonusBleed(value); - break; - case TowerType.Global: - global.AddBonusBleed(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusBurn(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusBurn(value); - break; - case TowerType.Morter: - morter.AddBonusBurn(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusBurn(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusBurn(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusBurn(value); - break; - case TowerType.Frost: - frostKeep.AddBonusBurn(value); - break; - case TowerType.Radar: - radar.AddBonusBurn(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusBurn(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusBurn(value); - break; - case TowerType.Shredder: - shredder.AddBonusBurn(value); - break; - case TowerType.Encampment: - encampment.AddBonusBurn(value); - break; - case TowerType.Lookout: - lookout.AddBonusBurn(value); - break; - case TowerType.Global: - global.AddBonusBurn(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusPoison(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusPoison(value); - break; - case TowerType.Morter: - morter.AddBonusPoison(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusPoison(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusPoison(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusPoison(value); - break; - case TowerType.Frost: - frostKeep.AddBonusPoison(value); - break; - case TowerType.Radar: - radar.AddBonusPoison(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusPoison(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusPoison(value); - break; - case TowerType.Shredder: - shredder.AddBonusPoison(value); - break; - case TowerType.Encampment: - encampment.AddBonusPoison(value); - break; - case TowerType.Lookout: - lookout.AddBonusPoison(value); - break; - case TowerType.Global: - global.AddBonusPoison(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } - - public void AddBonusBlast(TowerType type, float value) - { - switch (type) - { - case TowerType.Crossbow: - crossbow.AddBonusBlast(value); - break; - case TowerType.Morter: - morter.AddBonusBlast(value); - break; - case TowerType.TeslaCoil: - teslaCoil.AddBonusBlast(value); - break; - case TowerType.FlameThrower: - flameThrower.AddBonusBlast(value); - break; - case TowerType.PoisonSprayer: - poisonSprayer.AddBonusBlast(value); - break; - case TowerType.Frost: - frostKeep.AddBonusBlast(value); - break; - case TowerType.Radar: - radar.AddBonusBlast(value); - break; - case TowerType.Obelisk: - obelisk.AddBonusBlast(value); - break; - case TowerType.ParticleCannon: - particleCannon.AddBonusBlast(value); - break; - case TowerType.Shredder: - shredder.AddBonusBlast(value); - break; - case TowerType.Encampment: - encampment.AddBonusBlast(value); - break; - case TowerType.Lookout: - lookout.AddBonusBlast(value); - break; - case TowerType.Global: - global.AddBonusBlast(value); - UpdateAllTowers(); - break; - default: - Debug.Log("Failed to set global bonus"); - break; - } - } -} diff --git a/Assembly_CSharp/Tower/TowerType.cs b/Assembly_CSharp/Tower/TowerType.cs deleted file mode 100644 index 9bbc242..0000000 --- a/Assembly_CSharp/Tower/TowerType.cs +++ /dev/null @@ -1,18 +0,0 @@ -public enum TowerType -{ - Crossbow, - Morter, - TeslaCoil, - Frost, - Obelisk, - FlameThrower, - PoisonSprayer, - Siphon, - Radar, - ParticleCannon, - DOT, - Global, - Shredder, - Encampment, - Lookout -} diff --git a/Assembly_CSharp/_Building/Encampment.cs b/Assembly_CSharp/_Building/Encampment.cs new file mode 100644 index 0000000..eaa8ab7 --- /dev/null +++ b/Assembly_CSharp/_Building/Encampment.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +public class Encampment : Dropper +{ + protected override void Fire() + { + if (consumesMana) + { + int manaCost = (int)((float)base.damage * manaConsumptionRate); + if (!ResourceManager.instance.CheckMana(manaCost)) + { + return; + } + ResourceManager.instance.SpendMana(manaCost); + } + if (dropPoints.Length != 0) + { + Vector2 vector = dropPoints[Random.Range(0, dropPoints.Length)]; + Vector3 endPosition = new Vector3(vector.x + Random.Range(-0.125f, 0.125f) + base.transform.position.x, 0f, vector.y + Random.Range(-0.125f, 0.125f) + base.transform.position.z); + GameObject obj = Object.Instantiate(projectile, base.transform.position, Quaternion.identity); + obj.GetComponent().SetStats(towerType, null, projectileSpeed, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); + obj.GetComponent().blastRadius = base.blastRadius; + obj.GetComponent().SetEndPosition(endPosition); + } + } +} diff --git a/Assembly_CSharp/_Building/Grave.cs b/Assembly_CSharp/_Building/Grave.cs new file mode 100644 index 0000000..45abddc --- /dev/null +++ b/Assembly_CSharp/_Building/Grave.cs @@ -0,0 +1,3 @@ +public class Grave : SpawnableObject +{ +} diff --git a/Assembly_CSharp/_Building/HauntedHouse.cs b/Assembly_CSharp/_Building/HauntedHouse.cs new file mode 100644 index 0000000..9a23eda --- /dev/null +++ b/Assembly_CSharp/_Building/HauntedHouse.cs @@ -0,0 +1,111 @@ +using UnityEngine; + +public class HauntedHouse : IncomeGenerator, IBuildable +{ + [SerializeField] + private LayerMask graveLayerMask; + + [SerializeField] + private GameObject UIObject; + + [SerializeField] + private int goldBackOnDemolish; + + private bool isGathering; + + private int graveCount; + + private int manaUsed; + + private float timer; + + private SimpleUI myUI; + + protected override void Start() + { + base.Start(); + DetectGraves(); + } + + private void Update() + { + if (myUI != null && isGathering) + { + string text = "Mana used: " + manaUsed; + text = text + "\nNearby graves: x" + graveCount; + text = text + "\nTax efficiency: x" + GameManager.instance.hauntedHouseEfficiency; + text = text + "\nDeath tax due: " + Mathf.Max((int)Mathf.Sqrt(manaUsed * GameManager.instance.hauntedHouseEfficiency * graveCount), 1) + "g"; + text = text + "\nNet tax collected: " + base.netGold + "g."; + myUI.SetDiscriptionText(text); + } + if (!isGathering || !SpawnManager.instance.combat) + { + return; + } + if (timer <= 0f) + { + if (ResourceManager.instance.CheckMana(1)) + { + ResourceManager.instance.SpendMana(1); + manaUsed++; + timer = 1f; + } + } + else + { + timer -= Time.deltaTime; + } + } + + public override void GenerateIncome() + { + incomePerRound = Mathf.Max((int)Mathf.Sqrt(manaUsed * GameManager.instance.hauntedHouseEfficiency * graveCount), 1); + base.GenerateIncome(); + manaUsed = 0; + incomePerRound = 1; + } + + public void SetStats() + { + } + + private void DetectGraves() + { + if (Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckGrave(hitInfo); + } + if (Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckGrave(hitInfo); + } + if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckGrave(hitInfo); + } + if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, graveLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckGrave(hitInfo); + } + } + + private void CheckGrave(RaycastHit hit) + { + if (hit.collider.GetComponent() != null && (double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) <= 0.001) + { + graveCount++; + isGathering = true; + } + } + + public void SpawnUI() + { + myUI = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); + myUI.SetDemolishable(base.gameObject, goldBackOnDemolish); + } + + public void Demolish() + { + RemoveIncomeGeneration(); + } +} diff --git a/Assembly_CSharp/_Building/House.cs b/Assembly_CSharp/_Building/House.cs new file mode 100644 index 0000000..16bb26d --- /dev/null +++ b/Assembly_CSharp/_Building/House.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using UnityEngine; + +public class House : SpawnableObject +{ + private List defenders = new List(); + + [SerializeField] + private IncomeGenerator myIncomeGenerator; + + protected override void Start() + { + base.Start(); + SpawnManager.instance.houses.Add(this); + } + + public void AddDefender(Tower t) + { + if (!defenders.Contains(t)) + { + defenders.Add(t); + } + CheckTowers(); + } + + public void CheckTowers() + { + for (int num = defenders.Count - 1; num > -1; num--) + { + if (defenders[num] == null) + { + defenders.RemoveAt(num); + } + } + myIncomeGenerator.incomeTimesLevel = defenders.Count; + } + + public override void SpawnUI() + { + SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); + if (defenders.Count > 0) + { + string text = "This house is protected by " + defenders.Count + " towers."; + text = text + "\nIts next gift will be " + (SpawnManager.instance.level + 1) * defenders.Count + "g."; + text = text + "\nNet gold gifted: " + myIncomeGenerator.netGold + "g."; + component.SetDiscriptionText(text); + } + } +} diff --git a/Assembly_CSharp/_Building/IronVein.cs b/Assembly_CSharp/_Building/IronVein.cs new file mode 100644 index 0000000..06af952 --- /dev/null +++ b/Assembly_CSharp/_Building/IronVein.cs @@ -0,0 +1,3 @@ +public class IronVein : SpawnableObject +{ +} diff --git a/Assembly_CSharp/_Building/ManaBank.cs b/Assembly_CSharp/_Building/ManaBank.cs new file mode 100644 index 0000000..b82d36e --- /dev/null +++ b/Assembly_CSharp/_Building/ManaBank.cs @@ -0,0 +1,68 @@ +using UnityEngine; + +public class ManaBank : MonoBehaviour, IBuildable +{ + [SerializeField] + private int gatherRatePerSec; + + [SerializeField] + private int maxManaIncrease; + + [SerializeField] + private GameObject UIObject; + + [SerializeField] + private int goldBackOnDemolish; + + private float timer = 1f; + + private void Start() + { + maxManaIncrease += ResourceManager.instance.manaBankBonusMana; + ResourceManager.instance.UpdateManaGatherRate(gatherRatePerSec); + ResourceManager.instance.AddMaxMana(maxManaIncrease); + ResourceManager.instance.manaBanks.Add(this); + } + + private void Update() + { + if (timer <= 0f) + { + Gather(); + timer = 1f; + } + else if (SpawnManager.instance.combat) + { + timer -= Time.deltaTime; + } + } + + public void SetStats() + { + } + + public void UpgradeMaxMana(int addition) + { + ResourceManager.instance.AddMaxMana(addition); + maxManaIncrease += addition; + } + + public void SpawnUI() + { + SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); + component.SetDemolishable(base.gameObject, goldBackOnDemolish); + component.SetDiscriptionText("This bank currently stores " + maxManaIncrease + " mana. It is generating " + ((float)Mathf.FloorToInt(10f * ResourceManager.instance.manaMaxRegenPercent * (float)maxManaIncrease) / 10f + 1f) + " mana/s through sorcery and clever investing."); + } + + public void Demolish() + { + ResourceManager.instance.UpdateManaGatherRate(-gatherRatePerSec); + ResourceManager.instance.AddMaxMana(-maxManaIncrease); + ResourceManager.instance.manaBanks.Remove(this); + } + + private void Gather() + { + ResourceManager.instance.AddMana(gatherRatePerSec); + } +} diff --git a/Assembly_CSharp/_Building/ManaCrystal.cs b/Assembly_CSharp/_Building/ManaCrystal.cs new file mode 100644 index 0000000..4b84e56 --- /dev/null +++ b/Assembly_CSharp/_Building/ManaCrystal.cs @@ -0,0 +1,3 @@ +public class ManaCrystal : SpawnableObject +{ +} diff --git a/Assembly_CSharp/_Building/ManaSiphon.cs b/Assembly_CSharp/_Building/ManaSiphon.cs new file mode 100644 index 0000000..89e578e --- /dev/null +++ b/Assembly_CSharp/_Building/ManaSiphon.cs @@ -0,0 +1,92 @@ +using UnityEngine; + +public class ManaSiphon : MonoBehaviour, IBuildable +{ + [SerializeField] + private int gatherRatePerSec; + + [SerializeField] + private LayerMask layermask; + + [SerializeField] + private GameObject UIObject; + + [SerializeField] + private int goldBackOnDemolish; + + private bool gathering; + + private float timer = 1f; + + private void Start() + { + DetectMana(); + if (gathering) + { + ResourceManager.instance.UpdateManaGatherRate(gatherRatePerSec); + } + } + + private void Update() + { + if (timer <= 0f) + { + Gather(); + timer = 1f; + } + else if (gathering && SpawnManager.instance.combat) + { + timer -= Time.deltaTime; + } + } + + public void SetStats() + { + } + + public void SpawnUI() + { + SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); + component.SetDemolishable(base.gameObject, goldBackOnDemolish); + if (gathering) + { + component.SetDiscriptionText("Currently gathering 1 mana/sec."); + } + } + + public void Demolish() + { + if (gathering) + { + ResourceManager.instance.UpdateManaGatherRate(-gatherRatePerSec); + } + } + + private void Gather() + { + ResourceManager.instance.AddMana(gatherRatePerSec); + } + + private void DetectMana() + { + if ((!Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore)) + { + Rotate(hitInfo); + } + } + + private bool Rotate(RaycastHit hit) + { + if (hit.collider.GetComponent() == null) + { + return false; + } + if ((double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) > 0.001) + { + return false; + } + base.transform.LookAt(hit.collider.transform.position, Vector3.up); + gathering = true; + return true; + } +} diff --git a/Assembly_CSharp/_Building/Mine.cs b/Assembly_CSharp/_Building/Mine.cs new file mode 100644 index 0000000..55d7b6f --- /dev/null +++ b/Assembly_CSharp/_Building/Mine.cs @@ -0,0 +1,81 @@ +using UnityEngine; + +public class Mine : MonoBehaviour, IBuildable +{ + [SerializeField] + private int goldBackOnDemolish; + + [SerializeField] + private LayerMask layermask; + + [SerializeField] + private GameObject UIObject; + + private bool gathering; + + private void Start() + { + SpawnManager.instance.mines.Add(this); + DetectIron(); + } + + public void SetStats() + { + } + + public void Repair() + { + if (gathering && Random.Range(0f, 1f) < 0.1f) + { + GameManager.instance.RepairTower(10); + } + } + + private void SetBonus(int value) + { + GameManager.instance.IncreaseTowerHealth(value); + } + + public void SpawnUI() + { + SimpleUI component = Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent(); + component.SetDemolishable(base.gameObject, goldBackOnDemolish); + if (gathering) + { + component.SetDiscriptionText("Currently mining. Tower maximum health increased by 1 and a 10% chance to repair damage."); + } + } + + private void DetectIron() + { + if ((!Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore)) + { + Rotate(hitInfo); + } + } + + private bool Rotate(RaycastHit hit) + { + if (hit.collider.GetComponent() == null) + { + return false; + } + if ((double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) > 0.001) + { + return false; + } + base.transform.LookAt(hit.collider.transform.position, Vector3.up); + gathering = true; + SetBonus(1); + return true; + } + + public void Demolish() + { + SpawnManager.instance.mines.Remove(this); + if (gathering) + { + SetBonus(-1); + } + } +} diff --git a/Assembly_CSharp/_Building/Shrine.cs b/Assembly_CSharp/_Building/Shrine.cs new file mode 100644 index 0000000..bbdfd2d --- /dev/null +++ b/Assembly_CSharp/_Building/Shrine.cs @@ -0,0 +1,11 @@ +public class Shrine : SpawnableObject +{ + protected override void Start() + { + base.Start(); + if (spawned) + { + AchievementManager.instance.shrineSpawned = true; + } + } +} diff --git a/Assembly_CSharp/_Building/TreasureChest.cs b/Assembly_CSharp/_Building/TreasureChest.cs new file mode 100644 index 0000000..cf18502 --- /dev/null +++ b/Assembly_CSharp/_Building/TreasureChest.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +public class TreasureChest : MonoBehaviour, IBuildable +{ + [SerializeField] + private GameObject uiObject; + + public int numberOfDrops = 1; + + private void Start() + { + } + + public void SpawnUI() + { + Object.Instantiate(uiObject, base.transform.position, Quaternion.identity).GetComponent().myChest = base.gameObject; + } + + public void Demolish() + { + } + + public void SetStats() + { + } +} diff --git a/Assembly_CSharp/_Building/University.cs b/Assembly_CSharp/_Building/University.cs new file mode 100644 index 0000000..5115f50 --- /dev/null +++ b/Assembly_CSharp/_Building/University.cs @@ -0,0 +1,150 @@ +using UnityEngine; + +public class University : MonoBehaviour, IBuildable +{ + [SerializeField] + private GameObject UIObject; + + [SerializeField] + private GameObject mainUIObject; + + public int goldBackOnDemolish; + + [SerializeField] + private LayerMask layermask; + + private bool active; + + public int healthPercent { get; private set; } + + public int armorPercent { get; private set; } + + public int shieldPercent { get; private set; } + + public int healthGained { get; private set; } + + public int armorGained { get; private set; } + + public int shieldGained { get; private set; } + + private void Start() + { + SpawnManager.instance.universities.Add(this); + DetectShrines(); + } + + public void SetStats() + { + } + + public void Research() + { + if (active) + { + if (Random.Range(0f, 100f) <= (float)(healthPercent + GameManager.instance.universityBonus)) + { + healthGained++; + TowerManager.instance.AddBonusHealthDamage(TowerType.Global, 1); + UniBonusUI.instance.UniBonus(1, 0, 0); + DamageNumber component = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); + component.SetText("New Discoveries!", "Grey", 1f); + component.SetHoldTime(2f); + AchievementManager.instance.NewDiscoveriesAchievement(); + } + if (Random.Range(0f, 100f) <= (float)(armorPercent + GameManager.instance.universityBonus)) + { + armorGained++; + UniBonusUI.instance.UniBonus(0, 1, 0); + TowerManager.instance.AddBonusArmorDamage(TowerType.Global, 1); + DamageNumber component2 = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); + component2.SetText("New Discoveries!", "Grey", 1f); + component2.SetHoldTime(2f); + AchievementManager.instance.NewDiscoveriesAchievement(); + } + if (Random.Range(0f, 100f) <= (float)(shieldPercent + GameManager.instance.universityBonus)) + { + shieldGained++; + UniBonusUI.instance.UniBonus(0, 0, 1); + TowerManager.instance.AddBonusShieldDamage(TowerType.Global, 1); + DamageNumber component3 = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); + component3.SetText("New Discoveries!", "Grey", 1f); + component3.SetHoldTime(2f); + AchievementManager.instance.NewDiscoveriesAchievement(); + } + } + } + + public void FundHealthStudies() + { + int num = (healthPercent + armorPercent + shieldPercent + 1) * 20; + if (ResourceManager.instance.CheckMoney(num)) + { + healthPercent++; + ResourceManager.instance.Spend(num); + AchievementManager.instance.FundResearchAchievement(num); + } + } + + public void FundArmorStudies() + { + int num = (healthPercent + armorPercent + shieldPercent + 1) * 20; + if (ResourceManager.instance.CheckMoney(num)) + { + armorPercent++; + ResourceManager.instance.Spend(num); + AchievementManager.instance.FundResearchAchievement(num); + } + } + + public void FundShieldStudies() + { + int num = (healthPercent + armorPercent + shieldPercent + 1) * 20; + if (ResourceManager.instance.CheckMoney(num)) + { + shieldPercent++; + ResourceManager.instance.Spend(num); + AchievementManager.instance.FundResearchAchievement(num); + } + } + + public void SpawnUI() + { + if (!active) + { + Object.Instantiate(UIObject, base.transform.position, Quaternion.identity).GetComponent().SetDemolishable(base.gameObject, goldBackOnDemolish); + } + else + { + Object.Instantiate(mainUIObject, base.transform.position, Quaternion.identity).GetComponent().SetStats(this); + } + } + + public void Demolish() + { + SpawnManager.instance.universities.Remove(this); + } + + private void DetectShrines() + { + if ((!Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && (!Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore) || !Rotate(hitInfo)) && Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, layermask, QueryTriggerInteraction.Ignore)) + { + Rotate(hitInfo); + } + } + + private bool Rotate(RaycastHit hit) + { + if (hit.collider.GetComponent() == null) + { + return false; + } + if ((double)(hit.collider.transform.position.y - base.transform.position.y) > 0.001) + { + return false; + } + base.transform.LookAt(hit.collider.transform.position, Vector3.up); + active = true; + SetStats(); + return true; + } +} diff --git a/Assembly_CSharp/_Tower/BiPlane.cs b/Assembly_CSharp/_Tower/BiPlane.cs new file mode 100644 index 0000000..bcf32e5 --- /dev/null +++ b/Assembly_CSharp/_Tower/BiPlane.cs @@ -0,0 +1,161 @@ +using UnityEngine; + +public class BiPlane : MonoBehaviour +{ + [SerializeField] + private TowerType towerType; + + [SerializeField] + private float speed; + + [SerializeField] + private float turnTime = 3f; + + [SerializeField] + private float minDistance = 3f; + + [SerializeField] + private float maxDistance = 12f; + + [SerializeField] + private float attackDistance = 6f; + + public GameObject target; + + private int directionMultiplier = 1; + + private Vector3 previousPos; + + private bool flyingTowards = true; + + private float desiredAltitude = 5f; + + private float desiredTilt; + + public int damage; + + public int healthDamage; + + public int armorDamage; + + public int shieldDamage; + + public float rps; + + public float slowPercent; + + public float bleedPercent; + + public float burnPercent; + + public float poisonPercent; + + public float critChance; + + public float stunChance; + + private int ammo; + + [SerializeField] + private int maxAmmo = 20; + + private float timeOfLastShot; + + [SerializeField] + private LayerMask bulletHitMask; + + [SerializeField] + private GameObject projectile; + + [SerializeField] + private float projectileSpeed; + + [SerializeField] + private Transform muzzle; + + [SerializeField] + private Transform artTransform; + + private void Start() + { + ammo = maxAmmo; + } + + private void Update() + { + FlightPath(); + } + + private void FixedUpdate() + { + } + + private void FlightPath() + { + Vector3 vector; + if (target != null) + { + vector = target.transform.position; + } + else + { + vector = Vector3.zero; + vector.y = 5f; + } + if (Vector3.SqrMagnitude(vector - base.transform.position) <= minDistance * minDistance) + { + flyingTowards = false; + Reload(); + } + else if (Vector3.SqrMagnitude(vector - base.transform.position) >= maxDistance * maxDistance) + { + flyingTowards = true; + } + float num = ((!flyingTowards) ? 0f : Vector2.SignedAngle(new Vector2(base.transform.forward.x, base.transform.forward.z), new Vector2(vector.x - base.transform.position.x, vector.z - base.transform.position.z))); + float num2; + if (target != null && flyingTowards && Vector3.SqrMagnitude(vector - base.transform.position) <= attackDistance * attackDistance) + { + desiredAltitude += (Mathf.Min(vector.y, 1f) - desiredAltitude) * Time.deltaTime * 1.5f; + num2 = base.transform.position.y - desiredAltitude; + if (Mathf.Abs(num) < 22.5f) + { + Fire(); + } + } + else + { + desiredAltitude += (5f - desiredAltitude) * Time.deltaTime * 3f; + num2 = base.transform.position.y - desiredAltitude; + } + num = Mathf.Clamp(num * 6f, -90f, 90f); + num2 = Mathf.Clamp(num2 * 6f, -45f, 45f); + base.transform.Rotate(new Vector3(0f, (0f - num) * Time.deltaTime / turnTime, 0f)); + base.transform.eulerAngles = new Vector3(num2, base.transform.eulerAngles.y, 0f); + base.transform.Translate(Vector3.forward * Time.deltaTime * speed); + desiredTilt += (num - desiredTilt) * Time.deltaTime; + artTransform.eulerAngles = new Vector3(base.transform.eulerAngles.x, base.transform.eulerAngles.y, desiredTilt); + } + + private void Reload() + { + ammo = maxAmmo; + } + + private void Fire() + { + if (ammo > 0 && timeOfLastShot + rps <= Time.time) + { + ammo--; + timeOfLastShot = Time.time; + LaunchProjectile(); + } + } + + private void LaunchProjectile() + { + Vector3 position = target.transform.position; + position += new Vector3(Random.Range(-0.33f, 0.33f) + Random.Range(-0.33f, 0.33f), Random.Range(-0.33f, 0.33f) + Random.Range(-0.33f, 0.33f), Random.Range(-0.33f, 0.33f) + Random.Range(-0.33f, 0.33f)); + muzzle.LookAt(position); + Object.Instantiate(projectile, muzzle.position, muzzle.rotation).GetComponent().SetStats(towerType, target, projectileSpeed, damage, healthDamage, armorDamage, shieldDamage, slowPercent, bleedPercent, burnPercent, poisonPercent, critChance, stunChance); + } +} diff --git a/Assembly_CSharp/_Tower/Dropper.cs b/Assembly_CSharp/_Tower/Dropper.cs new file mode 100644 index 0000000..0dc7a10 --- /dev/null +++ b/Assembly_CSharp/_Tower/Dropper.cs @@ -0,0 +1,126 @@ +using System.Collections.Generic; +using UnityEngine; + +public class Dropper : Tower +{ + [SerializeField] + private int manaPerSecond; + + [SerializeField] + private float dropHeight = 3f; + + [SerializeField] + private LayerMask dropSetMask; + + [SerializeField] + protected Vector2[] dropPoints; + + [SerializeField] + private bool requireTargetToDrop; + + private int currentLevel; + + public float dropperRPMdisplay; + + private float timeOfNextManaCheck; + + private bool canFire = true; + + protected override void Start() + { + base.Start(); + SetDropPoints(); + } + + public override void SetStats() + { + base.SetStats(); + rps = 60f / rpm * (10f / (10f + (float)dropPoints.Length)); + dropperRPMdisplay = rpm * (10f + (float)dropPoints.Length) / 10f; + } + + private void SetDropPoints() + { + List list = new List(); + for (int i = -(int)base.range; (float)i <= base.range; i++) + { + for (int j = -(int)base.range; (float)j <= base.range; j++) + { + if (Physics.Raycast(new Vector3(base.transform.position.x + (float)i, dropHeight, base.transform.position.z + (float)j), Vector3.down, out var hitInfo, 1.5f * dropHeight, dropSetMask, QueryTriggerInteraction.Ignore) && hitInfo.transform.gameObject.layer == LayerMask.NameToLayer("Path")) + { + list.Add(new Vector2(i, j)); + } + } + } + dropPoints = list.ToArray(); + rps = 60f / rpm * (10f / (10f + (float)dropPoints.Length)); + dropperRPMdisplay = rpm * (10f + (float)dropPoints.Length) / 10f; + } + + protected override void Update() + { + if (SpawnManager.instance.level != currentLevel) + { + SetDropPoints(); + currentLevel = SpawnManager.instance.level; + } + if (currentTarget != null) + { + if (turret != null) + { + AimTurret(); + } + GainXP(); + } + if (manaPerSecond > 0 && Time.time >= timeOfNextManaCheck && SpawnManager.instance.combat) + { + timeOfNextManaCheck = Time.time + 1f; + if (ResourceManager.instance.CheckMana(manaPerSecond)) + { + ResourceManager.instance.SpendMana(manaPerSecond); + canFire = true; + } + else + { + canFire = false; + } + } + timeSinceLastShot += Time.deltaTime; + if (canFire && TargetingCheck() && timeSinceLastShot > rps && SpawnManager.instance.combat) + { + Fire(); + timeSinceLastShot = 0f; + } + } + + private bool TargetingCheck() + { + if (requireTargetToDrop) + { + if (currentTarget != null) + { + return true; + } + return false; + } + return true; + } + + protected override void Fire() + { + if (consumesMana) + { + int manaCost = (int)((float)base.damage * manaConsumptionRate); + if (!ResourceManager.instance.CheckMana(manaCost)) + { + return; + } + ResourceManager.instance.SpendMana(manaCost); + } + if (dropPoints.Length != 0) + { + Vector2 vector = dropPoints[Random.Range(0, dropPoints.Length)]; + Object.Instantiate(projectile, new Vector3(vector.x, dropHeight, vector.y) + base.transform.position, Quaternion.identity).GetComponent().SetStats(towerType, null, projectileSpeed, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); + } + } +} diff --git a/Assembly_CSharp/_Tower/FlameThrower.cs b/Assembly_CSharp/_Tower/FlameThrower.cs new file mode 100644 index 0000000..d415d88 --- /dev/null +++ b/Assembly_CSharp/_Tower/FlameThrower.cs @@ -0,0 +1,68 @@ +using UnityEngine; + +public class FlameThrower : Tower +{ + [SerializeField] + private ParticleSystem flames; + + public bool flaming; + + private bool hasMana = true; + + [SerializeField] + private AudioSource audioS; + + private bool soundPlaying; + + protected override void Update() + { + if (hasMana && currentTarget != null && !flaming) + { + flames.Play(); + PlaySound(onOff: true); + flaming = true; + } + else if (!hasMana || (currentTarget == null && flaming)) + { + flames.Stop(); + PlaySound(onOff: false); + flaming = false; + } + base.Update(); + } + + protected override void Fire() + { + if (consumesMana) + { + int manaCost = (int)((float)base.damage * manaConsumptionRate); + if (!ResourceManager.instance.CheckMana(manaCost)) + { + hasMana = false; + return; + } + ResourceManager.instance.SpendMana(manaCost); + hasMana = true; + } + RaycastHit[] array = Physics.SphereCastAll(muzzle.position, base.range / 6f, muzzle.transform.forward, base.range * 1.5f, enemyLayerMask, QueryTriggerInteraction.Collide); + foreach (RaycastHit raycastHit in array) + { + raycastHit.collider.GetComponent()?.TakeDamage(towerType, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); + } + } + + private void PlaySound(bool onOff) + { + if (onOff && !soundPlaying) + { + audioS.volume = OptionsMenu.instance.masterVolume * OptionsMenu.instance.sfxVolume; + audioS.Play(); + soundPlaying = true; + } + else if (!onOff && soundPlaying) + { + audioS.Stop(); + soundPlaying = false; + } + } +} diff --git a/Assembly_CSharp/_Tower/Lookout.cs b/Assembly_CSharp/_Tower/Lookout.cs new file mode 100644 index 0000000..3abd55b --- /dev/null +++ b/Assembly_CSharp/_Tower/Lookout.cs @@ -0,0 +1,97 @@ +using UnityEngine; + +public class Lookout : Tower +{ + [SerializeField] + private GameObject markIcon; + + private GameObject currentMark; + + protected override void Update() + { + if (currentTarget != null) + { + markIcon.SetActive(value: true); + UpdateMark(); + GainXP(); + } + else + { + markIcon.SetActive(value: false); + } + } + + private void UpdateMark() + { + if (currentTarget != currentMark) + { + if (currentMark != null) + { + currentMark.GetComponent().mark = null; + } + currentMark = currentTarget; + currentMark.GetComponent().mark = this; + } + markIcon.transform.position = currentMark.transform.position; + } + + protected override GameObject SelectEnemy(Collider[] possibleTargets) + { + GameObject result = null; + float num = -1f; + for (int i = 0; i < possibleTargets.Length; i++) + { + float num2 = 1f; + Enemy component = possibleTargets[i].GetComponent(); + if (!(component.mark != this) || !(component.mark != null)) + { + if (CheckPriority(Priority.Progress)) + { + num2 /= Mathf.Max(0.001f, possibleTargets[i].GetComponent().distanceFromEnd); + } + if (CheckPriority(Priority.NearDeath)) + { + num2 /= Mathf.Max(0.001f, component.CurrentHealth()); + } + if (CheckPriority(Priority.MostHealth)) + { + num2 *= (float)Mathf.Max(1, component.health); + } + if (CheckPriority(Priority.MostArmor)) + { + num2 *= (float)Mathf.Max(1, component.armor); + } + if (CheckPriority(Priority.MostShield)) + { + num2 *= (float)Mathf.Max(1, component.shield); + } + if (CheckPriority(Priority.LeastHealth)) + { + num2 /= (float)Mathf.Max(1, component.health); + } + if (CheckPriority(Priority.LeastArmor)) + { + num2 /= (float)Mathf.Max(1, component.armor); + } + if (CheckPriority(Priority.LeastShield)) + { + num2 /= (float)Mathf.Max(1, component.shield); + } + if (CheckPriority(Priority.Fastest)) + { + num2 *= Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); + } + if (CheckPriority(Priority.Slowest)) + { + num2 /= Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); + } + if (num2 > num) + { + result = component.gameObject; + num = num2; + } + } + } + return result; + } +} diff --git a/Assembly_CSharp/_Tower/Morter.cs b/Assembly_CSharp/_Tower/Morter.cs new file mode 100644 index 0000000..2170da3 --- /dev/null +++ b/Assembly_CSharp/_Tower/Morter.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +public class Morter : Tower +{ + protected override void AimTurret() + { + } + + protected override void Fire() + { + if (consumesMana) + { + int manaCost = (int)((float)base.damage * finalManaConsumption); + if (!ResourceManager.instance.CheckMana(manaCost)) + { + return; + } + ResourceManager.instance.SpendMana(manaCost); + } + float num = projectileSpeed * Mathf.Clamp(Vector3.SqrMagnitude(currentTarget.transform.position - base.transform.position) / (2f * baseRange * baseRange), 1f, float.MaxValue); + Vector3 vector = currentTarget.GetComponent().GetFuturePosition(num) - turret.transform.position; + GameObject gameObject = Object.Instantiate(rotation: Quaternion.LookRotation(new Vector3(vector.x, 0f, vector.z), Vector3.up), original: projectile, position: muzzle.position); + gameObject.GetComponent().SetStats(towerType, currentTarget, num, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); + gameObject.GetComponent().SetMorterPhysics(currentTarget.GetComponent().GetFuturePosition(num)); + gameObject.GetComponent().blastRadius = base.blastRadius; + if (extraProjectileFX != null) + { + GameObject gameObject2 = Object.Instantiate(extraProjectileFX, gameObject.transform.position, gameObject.transform.rotation); + gameObject2.transform.SetParent(gameObject.transform); + gameObject2.GetComponent().SetFX(base.bleedPercent, base.burnPercent, base.poisonPercent, base.slowPercent, consumesMana); + Projectile component = gameObject.GetComponent(); + if (component.detachOnDestruction == null) + { + component.detachOnDestruction = gameObject2; + component.extraFX = gameObject2.GetComponent(); + } + } + } +} diff --git a/Assembly_CSharp/_Tower/Obelisk.cs b/Assembly_CSharp/_Tower/Obelisk.cs new file mode 100644 index 0000000..549f3b4 --- /dev/null +++ b/Assembly_CSharp/_Tower/Obelisk.cs @@ -0,0 +1,99 @@ +using UnityEngine; + +public class Obelisk : Tower +{ + [SerializeField] + private GameObject beam; + + [SerializeField] + private AudioSource audioS; + + private bool soundPlaying; + + private IDamageable lastThingIHit; + + private float timeOnTarget; + + protected override void Update() + { + if (currentTarget != null) + { + if (turret != null) + { + AimTurret(); + } + GainXP(); + } + else + { + beam.SetActive(value: false); + PlaySound(onOff: false); + } + timeSinceLastShot += Time.deltaTime; + if (currentTarget != null && timeSinceLastShot > rps) + { + Fire(); + timeSinceLastShot = 0f; + } + } + + protected override void Fire() + { + if (consumesMana) + { + int manaCost = (int)((float)base.damage * manaConsumptionRate); + if (!ResourceManager.instance.CheckMana(manaCost)) + { + beam.SetActive(value: false); + PlaySound(onOff: false); + return; + } + ResourceManager.instance.SpendMana(manaCost); + } + DealDamage(); + } + + protected override void AimTurret() + { + Vector3 forward = currentTarget.transform.position - turret.transform.position + Vector3.up * 0.5f; + Quaternion rotation = Quaternion.LookRotation(forward, Vector3.up); + turret.transform.rotation = rotation; + beam.transform.localScale = new Vector3(1f, 1f, forward.magnitude); + } + + private void DealDamage() + { + IDamageable component = currentTarget.GetComponent(); + if (component != null) + { + if (component == lastThingIHit) + { + timeOnTarget += rps; + } + else + { + timeOnTarget = 0f; + lastThingIHit = component; + } + int num = Mathf.Clamp(Mathf.FloorToInt(timeOnTarget * TowerManager.instance.obeliskTimeOnTargetMultiplier), 0, base.damage); + component.TakeDamage(towerType, base.damage + num, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); + beam.SetActive(value: true); + PlaySound(onOff: true); + } + } + + private void PlaySound(bool onOff) + { + if (onOff && !soundPlaying) + { + audioS.volume = OptionsMenu.instance.masterVolume * OptionsMenu.instance.sfxVolume; + audioS.Play(); + soundPlaying = true; + } + else if (!onOff && soundPlaying) + { + audioS.Stop(); + soundPlaying = false; + } + } +} diff --git a/Assembly_CSharp/_Tower/RadarTower.cs b/Assembly_CSharp/_Tower/RadarTower.cs new file mode 100644 index 0000000..e0d8d1d --- /dev/null +++ b/Assembly_CSharp/_Tower/RadarTower.cs @@ -0,0 +1,71 @@ +using UnityEngine; + +public class RadarTower : Tower +{ + [SerializeField] + private GameObject biPlanePrefab; + + [SerializeField] + private BiPlane myPlane; + + protected override void Start() + { + if (myPlane == null) + { + myPlane = Object.Instantiate(biPlanePrefab, base.transform.position + new Vector3(-50f, 5f, 0f), Quaternion.identity).GetComponent(); + } + base.Start(); + } + + public override void SetStats() + { + base.SetStats(); + if (myPlane == null) + { + myPlane = Object.Instantiate(biPlanePrefab, base.transform.position + new Vector3(-50f, 5f, 0f), Quaternion.identity).GetComponent(); + } + myPlane.damage = base.damage; + myPlane.healthDamage = base.healthDamage; + myPlane.armorDamage = base.armorDamage; + myPlane.shieldDamage = base.shieldDamage; + myPlane.rps = rps; + myPlane.slowPercent = base.slowPercent; + myPlane.bleedPercent = base.bleedPercent; + myPlane.burnPercent = base.burnPercent; + myPlane.poisonPercent = base.poisonPercent; + myPlane.critChance = base.critChance; + myPlane.stunChance = base.stunChance; + } + + protected override void Update() + { + if (currentTarget != null) + { + if (turret != null) + { + AimTurret(); + } + GainXP(); + } + timeSinceLastShot += Time.deltaTime; + if (currentTarget != null && timeSinceLastShot > 3f) + { + SendTargetInfo(currentTarget); + timeSinceLastShot = 0f; + } + } + + private void SendTargetInfo(GameObject target) + { + if (myPlane.target == null) + { + myPlane.target = target; + } + } + + public override void Demolish() + { + Object.Destroy(myPlane.gameObject); + base.Demolish(); + } +} diff --git a/Assembly_CSharp/_Tower/TeslaCoil.cs b/Assembly_CSharp/_Tower/TeslaCoil.cs new file mode 100644 index 0000000..97954e7 --- /dev/null +++ b/Assembly_CSharp/_Tower/TeslaCoil.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections; +using UnityEngine; + +public class TeslaCoil : Tower +{ + [SerializeField] + private GameObject lightningTrail; + + protected override void AimTurret() + { + } + + protected override void Fire() + { + if (consumesMana) + { + int manaCost = (int)((float)base.damage * manaConsumptionRate); + if (!ResourceManager.instance.CheckMana(manaCost)) + { + return; + } + ResourceManager.instance.SpendMana(manaCost); + } + Vector3 position = base.transform.position; + position.y = 0f; + Collider[] array = Physics.OverlapSphere(position, base.range, enemyLayerMask, QueryTriggerInteraction.Collide); + for (int i = 0; i < array.Length; i++) + { + array[i].GetComponent()?.TakeDamage(towerType, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance); + } + SFXManager.instance.PlaySound(Sound.TeslaZap, base.transform.position); + StartCoroutine(DrawLightning()); + } + + private IEnumerator DrawLightning() + { + for (float i = 0f; i <= (float)Math.PI * 2f; i += 0.5f) + { + Vector3 vector = new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); + lightningTrail.transform.position = vector + new Vector3(base.transform.position.x + Mathf.Sin(i) * base.range, 0.75f, base.transform.position.z + Mathf.Cos(i) * base.range); + yield return new WaitForEndOfFrame(); + } + } +} diff --git a/Assembly_CSharp/_Tower/Tower.cs b/Assembly_CSharp/_Tower/Tower.cs new file mode 100644 index 0000000..4098bd6 --- /dev/null +++ b/Assembly_CSharp/_Tower/Tower.cs @@ -0,0 +1,509 @@ +using UnityEngine; + +public class Tower : MonoBehaviour, IBuildable +{ + public enum Priority + { + Progress, + NearDeath, + MostHealth, + MostArmor, + MostShield, + LeastHealth, + LeastArmor, + LeastShield, + Fastest, + Slowest, + Marked + } + + public TowerType towerType; + + public bool squareUI; + + [SerializeField] + protected GameObject towerUI; + + public Priority[] priorities = new Priority[3]; + + [SerializeField] + protected GameObject turret; + + [SerializeField] + protected bool towerVerticalyAims = true; + + [SerializeField] + protected Transform muzzle; + + [SerializeField] + protected GameObject projectile; + + [SerializeField] + protected float projectileSpeed = 10f; + + [SerializeField] + protected GameObject extraProjectileFX; + + [SerializeField] + protected int baseDamage; + + [SerializeField] + protected int baseHealthDamage; + + [SerializeField] + protected int baseArmorDamage; + + [SerializeField] + protected int baseShieldDamage; + + public float rpm; + + protected float rps; + + [SerializeField] + protected float baseRange; + + [SerializeField] + protected float baseSlowPercentage; + + [SerializeField] + protected float baseBleedPercentage; + + [SerializeField] + protected float baseBurnPercentage; + + [SerializeField] + protected float basePoisonPercentage; + + [SerializeField] + protected LayerMask enemyLayerMask; + + [SerializeField] + protected LayerMask buildingLayerMask; + + public bool consumesMana; + + public float manaConsumptionRate; + + public float finalManaConsumption; + + public int upgradeCostMultiplier = 1; + + private int damageUpgrade; + + private int healthDamageUpgrade; + + private int armorDamageUpgrade; + + private int shieldDamageUpgrade; + + private int heightBonus; + + protected float timeSinceLastShot; + + private float lastTargetUpdate = 1f; + + protected GameObject currentTarget; + + [SerializeField] + protected float baseBlastRadius; + + public int level { get; private set; } + + public float healthXP { get; private set; } + + public float armorXP { get; private set; } + + public float shieldXP { get; private set; } + + public int damage { get; private set; } + + public int healthDamage { get; private set; } + + public int armorDamage { get; private set; } + + public int shieldDamage { get; private set; } + + public float range { get; private set; } + + public float slowPercent { get; private set; } + + public float bleedPercent { get; private set; } + + public float burnPercent { get; private set; } + + public float poisonPercent { get; private set; } + + public float critChance { get; private set; } + + public float stunChance { get; private set; } + + public float blastRadius { get; private set; } + + protected virtual void Start() + { + level = 1; + SetStats(); + TowerManager.instance.AddNewTower(this, towerType); + DetectHouses(); + priorities[0] = (priorities[1] = (priorities[2] = Priority.Progress)); + } + + public virtual void SetStats() + { + heightBonus = (int)Mathf.Round(base.transform.position.y * 3f - 1f); + damage = Mathf.Max(baseDamage + heightBonus + damageUpgrade + TowerManager.instance.GetBonusBaseDamage(towerType), 0); + healthDamage = baseHealthDamage + healthDamageUpgrade + TowerManager.instance.GetBonusHealthDamage(towerType); + armorDamage = baseArmorDamage + armorDamageUpgrade + TowerManager.instance.GetBonusArmorDamage(towerType); + shieldDamage = baseShieldDamage + shieldDamageUpgrade + TowerManager.instance.GetBonusShieldDamage(towerType); + rps = 60f / rpm; + range = baseRange + (float)heightBonus / 2f + TowerManager.instance.GetBonusRange(towerType); + slowPercent = baseSlowPercentage + TowerManager.instance.GetBonusSlow(towerType); + bleedPercent = baseBleedPercentage + TowerManager.instance.GetBonusBleed(towerType); + burnPercent = baseBurnPercentage + TowerManager.instance.GetBonusBurn(towerType); + poisonPercent = basePoisonPercentage + TowerManager.instance.GetBonusPoison(towerType); + blastRadius = baseBlastRadius + TowerManager.instance.GetBonusBlast(towerType); + finalManaConsumption = manaConsumptionRate + TowerManager.instance.GetManaConsumptionBonus(towerType); + if (TowerManager.instance.GetManaConsumptionBonus(towerType) > 0f) + { + consumesMana = true; + } + critChance = TowerManager.instance.GetCritChance(towerType) + TowerManager.instance.GetCritChanceLevelMultiplier(towerType) * (float)level / 100f; + stunChance = TowerManager.instance.GetStunChance(towerType); + } + + private void FixedUpdate() + { + if (lastTargetUpdate <= 0f) + { + DetectEnemies(); + } + else + { + lastTargetUpdate -= Time.fixedDeltaTime; + } + } + + protected virtual void Update() + { + if (currentTarget != null) + { + if (turret != null) + { + AimTurret(); + } + GainXP(); + } + timeSinceLastShot += Time.deltaTime; + if (currentTarget != null && timeSinceLastShot > rps) + { + Fire(); + timeSinceLastShot = 0f; + } + } + + private void DetectHouses() + { + if (Physics.Raycast(base.transform.position + new Vector3(1f, 1f, 0f), -base.transform.up, out var hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckForHouse(hitInfo); + } + if (Physics.Raycast(base.transform.position + new Vector3(-1f, 1f, 0f), -base.transform.up, out hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckForHouse(hitInfo); + } + if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, 1f), -base.transform.up, out hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckForHouse(hitInfo); + } + if (Physics.Raycast(base.transform.position + new Vector3(0f, 1f, -1f), -base.transform.up, out hitInfo, 1f, buildingLayerMask, QueryTriggerInteraction.Ignore)) + { + CheckForHouse(hitInfo); + } + } + + private void CheckForHouse(RaycastHit hit) + { + if (hit.collider.GetComponent() != null && (double)Mathf.Abs(hit.collider.transform.position.y - base.transform.position.y) <= 0.001) + { + hit.collider.GetComponent().AddDefender(this); + } + } + + public void TogglePriority(int index, int direction) + { + priorities[index] = (Priority)(((int)(priorities[index] + direction) % 11 + 11) % 11); + } + + protected virtual void Fire() + { + if (consumesMana) + { + int manaCost = (int)((float)damage * finalManaConsumption); + if (!ResourceManager.instance.CheckMana(manaCost)) + { + return; + } + ResourceManager.instance.SpendMana(manaCost); + } + GameObject gameObject = Object.Instantiate(projectile, muzzle.position, muzzle.rotation); + gameObject.GetComponent().SetStats(towerType, currentTarget, projectileSpeed, damage, healthDamage, armorDamage, shieldDamage, slowPercent, bleedPercent, burnPercent, poisonPercent, critChance, stunChance); + if (extraProjectileFX != null) + { + GameObject gameObject2 = Object.Instantiate(extraProjectileFX, gameObject.transform.position, gameObject.transform.rotation); + gameObject2.transform.SetParent(gameObject.transform); + gameObject2.GetComponent().SetFX(bleedPercent, burnPercent, poisonPercent, slowPercent, consumesMana); + Projectile component = gameObject.GetComponent(); + if (component.detachOnDestruction == null) + { + component.detachOnDestruction = gameObject2; + component.extraFX = gameObject2.GetComponent(); + } + } + } + + protected virtual void AimTurret() + { + Vector3 forward = currentTarget.transform.position - turret.transform.position; + if (!towerVerticalyAims) + { + forward.y = 0f; + } + Quaternion rotation = Quaternion.LookRotation(forward, Vector3.up); + turret.transform.rotation = rotation; + } + + protected void GainXP() + { + Enemy component = currentTarget.GetComponent(); + if (component != null) + { + if (component.shield > 0) + { + shieldXP += Time.deltaTime / (2f * range) + Time.deltaTime / 2f; + } + else if (component.armor > 0) + { + armorXP += Time.deltaTime / (2f * range) + Time.deltaTime / 2f; + } + else + { + healthXP += Time.deltaTime / (2f * range) + Time.deltaTime / 2f; + } + CheckXPAndLevelUp(); + } + } + + private void CheckXPAndLevelUp() + { + if (healthXP >= (float)(10 * level)) + { + healthXP -= 10 * level; + level++; + damageUpgrade++; + healthDamageUpgrade++; + SetStats(); + LevelUpText(); + } + if (armorXP >= (float)(10 * level)) + { + armorXP -= 10 * level; + level++; + damageUpgrade++; + armorDamageUpgrade++; + SetStats(); + LevelUpText(); + } + if (shieldXP >= (float)(10 * level)) + { + shieldXP -= 10 * level; + level++; + damageUpgrade++; + shieldDamageUpgrade++; + SetStats(); + LevelUpText(); + } + } + + private void LevelUpText() + { + Object.Instantiate(BuildingManager.instance.levelUpFX, base.transform.position, Quaternion.identity); + DamageNumber component = ObjectPool.instance.SpawnObject(ObjectPool.ObjectType.DamageNumber, base.transform.position, Quaternion.identity).GetComponent(); + component.SetText("LEVEL UP!", "Grey", 1f); + component.SetHoldTime(1f); + AchievementManager.instance.TowerLevel(level); + } + + public void BuyHealthLevel() + { + int num = (10 * level - (int)healthXP) * upgradeCostMultiplier; + if (ResourceManager.instance.CheckMoney(num)) + { + ResourceManager.instance.Spend(num); + DamageTracker.instance.AddCost(towerType, num); + healthXP -= 10 * level - num / upgradeCostMultiplier; + level++; + damageUpgrade++; + healthDamageUpgrade++; + SetStats(); + LevelUpText(); + } + } + + public void BuyArmorLevel() + { + int num = (10 * level - (int)armorXP) * upgradeCostMultiplier; + if (ResourceManager.instance.CheckMoney(num)) + { + ResourceManager.instance.Spend(num); + DamageTracker.instance.AddCost(towerType, num); + armorXP -= 10 * level - num / upgradeCostMultiplier; + level++; + damageUpgrade++; + armorDamageUpgrade++; + SetStats(); + LevelUpText(); + } + } + + public void BuyShieldLevel() + { + int num = (10 * level - (int)shieldXP) * upgradeCostMultiplier; + if (ResourceManager.instance.CheckMoney(num)) + { + ResourceManager.instance.Spend(num); + DamageTracker.instance.AddCost(towerType, num); + shieldXP -= 10 * level - num / upgradeCostMultiplier; + level++; + damageUpgrade++; + shieldDamageUpgrade++; + SetStats(); + LevelUpText(); + } + } + + private void DetectEnemies() + { + Collider[] array = Physics.OverlapSphere(base.transform.position, range, enemyLayerMask, QueryTriggerInteraction.Collide); + if (array.Length != 0) + { + currentTarget = SelectEnemy(array); + } + else + { + currentTarget = null; + } + lastTargetUpdate = Random.Range(0.25f, 1f); + } + + protected bool CheckPriority(Priority check) + { + for (int i = 0; i < priorities.Length; i++) + { + if (check == priorities[i]) + { + return true; + } + } + return false; + } + + protected int PriorityScale(Priority check) + { + for (int i = 0; i < priorities.Length; i++) + { + if (check == priorities[i]) + { + return Mathf.Clamp(3 - i, 1, 3); + } + } + return 1; + } + + protected virtual GameObject SelectEnemy(Collider[] possibleTargets) + { + GameObject result = null; + float num = -1f; + for (int i = 0; i < possibleTargets.Length; i++) + { + float num2 = 1f; + Enemy component = possibleTargets[i].GetComponent(); + if (CheckPriority(Priority.Progress)) + { + float f = Mathf.Max(0.001f, possibleTargets[i].GetComponent().distanceFromEnd); + num2 /= Mathf.Pow(f, PriorityScale(Priority.Progress)); + } + if (CheckPriority(Priority.NearDeath)) + { + float f2 = Mathf.Max(0.001f, component.CurrentHealth()); + num2 /= Mathf.Pow(f2, PriorityScale(Priority.NearDeath)); + } + if (CheckPriority(Priority.MostHealth)) + { + float f3 = (float)Mathf.Max(1, component.health) / 1000f; + num2 *= Mathf.Pow(f3, PriorityScale(Priority.MostHealth)); + } + if (CheckPriority(Priority.MostArmor)) + { + float f4 = (float)Mathf.Max(1, component.armor) / 1000f; + num2 *= Mathf.Pow(f4, PriorityScale(Priority.MostArmor)); + } + if (CheckPriority(Priority.MostShield)) + { + float f5 = (float)Mathf.Max(1, component.shield) / 1000f; + num2 *= Mathf.Pow(f5, PriorityScale(Priority.MostShield)); + } + if (CheckPriority(Priority.LeastHealth)) + { + float f6 = Mathf.Max(1, component.health); + num2 /= Mathf.Pow(f6, PriorityScale(Priority.LeastHealth)); + } + if (CheckPriority(Priority.LeastArmor)) + { + float f7 = Mathf.Max(1, component.armor); + num2 /= Mathf.Pow(f7, PriorityScale(Priority.LeastArmor)); + } + if (CheckPriority(Priority.LeastShield)) + { + float f8 = Mathf.Max(1, component.shield); + num2 /= Mathf.Pow(f8, PriorityScale(Priority.LeastShield)); + } + if (CheckPriority(Priority.Fastest)) + { + float f9 = Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); + num2 *= Mathf.Pow(f9, PriorityScale(Priority.Fastest)); + } + if (CheckPriority(Priority.Slowest)) + { + float f10 = Mathf.Max(0.001f, possibleTargets[i].GetComponent().speed); + num2 /= Mathf.Pow(f10, PriorityScale(Priority.Slowest)); + } + if (CheckPriority(Priority.Marked)) + { + float f11 = 1f; + if (component.mark != null) + { + f11 = (float)(component.mark.damage * (component.mark.healthDamage + component.mark.armorDamage + component.mark.shieldDamage)) * (1f + component.mark.critChance); + } + num2 *= Mathf.Pow(f11, PriorityScale(Priority.Marked)); + } + if (num2 > num) + { + result = component.gameObject; + num = num2; + } + } + return result; + } + + public void SpawnUI() + { + Object.Instantiate(towerUI, base.transform.position, Quaternion.identity).GetComponent().SetStats(this); + } + + public virtual void Demolish() + { + TowerManager.instance.RemoveTower(this, towerType); + Object.Destroy(base.gameObject); + } +} diff --git a/Assembly_CSharp/_Tower/TowerFlyweight.cs b/Assembly_CSharp/_Tower/TowerFlyweight.cs new file mode 100644 index 0000000..b63f8b4 --- /dev/null +++ b/Assembly_CSharp/_Tower/TowerFlyweight.cs @@ -0,0 +1,279 @@ +using System.Collections.Generic; +using UnityEngine; + +public class TowerFlyweight : MonoBehaviour +{ + private HashSet towers = new HashSet(); + + [SerializeField] + private BuildButtonUI myBuildButton; + + [SerializeField] + private int basePrice; + + [SerializeField] + public int priceIncrease; + + [SerializeField] + public int currentPrice; + + [SerializeField] + public int sellPrice; + + [SerializeField] + public float bonusRange; + + [SerializeField] + public int bonusBaseDamage; + + [SerializeField] + public int bonusHealthDamage; + + [SerializeField] + public int bonusArmorDamage; + + [SerializeField] + public int bonusShieldDamage; + + [SerializeField] + public float bonusSlow; + + [SerializeField] + public float bonusBleed; + + [SerializeField] + public float bonusBurn; + + [SerializeField] + public float bonusPoison; + + [SerializeField] + public float bonusBlast; + + [SerializeField] + public float critChance; + + [SerializeField] + public float critChanceLevelMultiplier; + + [SerializeField] + public float stunChance; + + [SerializeField] + public float manaConsumptionAddition; + + [SerializeField] + private TowerType towerTypeForDamageTracker; + + public void AddNewTower(Tower newTower) + { + towers.Add(newTower); + currentPrice = basePrice + towers.Count * priceIncrease; + sellPrice = basePrice + (towers.Count - 1) * priceIncrease; + myBuildButton.UpdatePriceText(); + } + + public void RemoveTower(Tower newTower) + { + towers.Remove(newTower); + currentPrice = basePrice + towers.Count * priceIncrease; + sellPrice = basePrice + (towers.Count - 1) * priceIncrease; + myBuildButton.UpdatePriceText(); + ResourceManager.instance.AddMoney(basePrice + towers.Count * priceIncrease); + DamageTracker.instance.AddCost(towerTypeForDamageTracker, -(basePrice + towers.Count * priceIncrease)); + } + + public void UpdateTowerStats() + { + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddManaAddition(float bonus) + { + manaConsumptionAddition += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddStunChance(float bonus) + { + stunChance += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddCritChance(float bonus) + { + critChance += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddCritChanceLevelMultiplier(float bonus) + { + critChanceLevelMultiplier += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusRange(float bonus) + { + bonusRange += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusBaseDamage(int bonus) + { + bonusBaseDamage += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusHealthDamage(int bonus) + { + bonusHealthDamage += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusArmorDamage(int bonus) + { + bonusArmorDamage += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusShieldDamage(int bonus) + { + bonusShieldDamage += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusSlow(float bonus) + { + bonusSlow += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusBleed(float bonus) + { + bonusBleed += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusBurn(float bonus) + { + bonusBurn += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusPoison(float bonus) + { + bonusPoison += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } + + public void AddBonusBlast(float bonus) + { + bonusBlast += bonus; + foreach (Tower tower in towers) + { + tower.SetStats(); + } + if (myBuildButton != null) + { + myBuildButton.UpdateModifiersText(); + } + } +} diff --git a/Assembly_CSharp/_Tower/TowerManager.cs b/Assembly_CSharp/_Tower/TowerManager.cs new file mode 100644 index 0000000..abdca52 --- /dev/null +++ b/Assembly_CSharp/_Tower/TowerManager.cs @@ -0,0 +1,1386 @@ +using System.Collections.Generic; +using UnityEngine; + +public class TowerManager : MonoBehaviour +{ + public static TowerManager instance; + + [SerializeField] + private TowerFlyweight global; + + [SerializeField] + private TowerFlyweight crossbow; + + [SerializeField] + private TowerFlyweight morter; + + [SerializeField] + private TowerFlyweight teslaCoil; + + [SerializeField] + private TowerFlyweight flameThrower; + + [SerializeField] + private TowerFlyweight poisonSprayer; + + [SerializeField] + private TowerFlyweight frostKeep; + + [SerializeField] + private TowerFlyweight radar; + + [SerializeField] + private TowerFlyweight obelisk; + + [SerializeField] + private TowerFlyweight particleCannon; + + [SerializeField] + private TowerFlyweight shredder; + + [SerializeField] + private TowerFlyweight encampment; + + [SerializeField] + private TowerFlyweight lookout; + + [SerializeField] + private TowerFlyweight siphon; + + public HashSet towersUsed = new HashSet(); + + private bool usedAllTowers; + + public float obeliskTimeOnTargetMultiplier; + + private void Awake() + { + instance = this; + } + + public void AddNewTower(Tower t, TowerType type) + { + if (type != TowerType.Siphon) + { + towersUsed.Add(type); + } + if (!usedAllTowers) + { + usedAllTowers = AchievementManager.instance.CheckAllTowers(); + } + switch (type) + { + case TowerType.Crossbow: + crossbow.AddNewTower(t); + break; + case TowerType.Morter: + morter.AddNewTower(t); + break; + case TowerType.TeslaCoil: + teslaCoil.AddNewTower(t); + break; + case TowerType.FlameThrower: + flameThrower.AddNewTower(t); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddNewTower(t); + break; + case TowerType.Frost: + frostKeep.AddNewTower(t); + break; + case TowerType.Radar: + radar.AddNewTower(t); + break; + case TowerType.Obelisk: + obelisk.AddNewTower(t); + break; + case TowerType.ParticleCannon: + particleCannon.AddNewTower(t); + break; + case TowerType.Shredder: + shredder.AddNewTower(t); + break; + case TowerType.Encampment: + encampment.AddNewTower(t); + break; + case TowerType.Lookout: + lookout.AddNewTower(t); + break; + default: + Debug.LogError("Failed to add tower to flyweight"); + break; + } + } + + public void RemoveTower(Tower t, TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.RemoveTower(t); + break; + case TowerType.Morter: + morter.RemoveTower(t); + break; + case TowerType.TeslaCoil: + teslaCoil.RemoveTower(t); + break; + case TowerType.FlameThrower: + flameThrower.RemoveTower(t); + break; + case TowerType.PoisonSprayer: + poisonSprayer.RemoveTower(t); + break; + case TowerType.Frost: + frostKeep.RemoveTower(t); + break; + case TowerType.Obelisk: + obelisk.RemoveTower(t); + break; + case TowerType.Radar: + radar.RemoveTower(t); + break; + case TowerType.ParticleCannon: + particleCannon.RemoveTower(t); + break; + case TowerType.Shredder: + shredder.RemoveTower(t); + break; + case TowerType.Encampment: + encampment.RemoveTower(t); + break; + case TowerType.Lookout: + lookout.RemoveTower(t); + break; + default: + Debug.LogError("Failed to add tower to flyweight"); + break; + } + } + + public void UpdateAllTowers() + { + crossbow.UpdateTowerStats(); + morter.UpdateTowerStats(); + teslaCoil.UpdateTowerStats(); + flameThrower.UpdateTowerStats(); + poisonSprayer.UpdateTowerStats(); + frostKeep.UpdateTowerStats(); + radar.UpdateTowerStats(); + obelisk.UpdateTowerStats(); + particleCannon.UpdateTowerStats(); + shredder.UpdateTowerStats(); + encampment.UpdateTowerStats(); + lookout.UpdateTowerStats(); + } + + public int GetSellPrice(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return crossbow.sellPrice; + case TowerType.Morter: + return morter.sellPrice; + case TowerType.TeslaCoil: + return teslaCoil.sellPrice; + case TowerType.FlameThrower: + return flameThrower.sellPrice; + case TowerType.PoisonSprayer: + return poisonSprayer.sellPrice; + case TowerType.Frost: + return frostKeep.sellPrice; + case TowerType.Obelisk: + return obelisk.sellPrice; + case TowerType.Radar: + return radar.sellPrice; + case TowerType.ParticleCannon: + return particleCannon.sellPrice; + case TowerType.Shredder: + return shredder.sellPrice; + case TowerType.Encampment: + return encampment.sellPrice; + case TowerType.Lookout: + return lookout.sellPrice; + default: + Debug.LogError("Failed to add tower to flyweight"); + return -1; + } + } + + public float GetManaConsumptionBonus(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.manaConsumptionAddition + crossbow.manaConsumptionAddition; + case TowerType.Morter: + return global.manaConsumptionAddition + morter.manaConsumptionAddition; + case TowerType.TeslaCoil: + return global.manaConsumptionAddition + teslaCoil.manaConsumptionAddition; + case TowerType.FlameThrower: + return global.manaConsumptionAddition + flameThrower.manaConsumptionAddition; + case TowerType.PoisonSprayer: + return global.manaConsumptionAddition + poisonSprayer.manaConsumptionAddition; + case TowerType.Frost: + return global.manaConsumptionAddition + frostKeep.manaConsumptionAddition; + case TowerType.Radar: + return global.manaConsumptionAddition + radar.manaConsumptionAddition; + case TowerType.Obelisk: + return global.manaConsumptionAddition + obelisk.manaConsumptionAddition; + case TowerType.ParticleCannon: + return global.manaConsumptionAddition + particleCannon.manaConsumptionAddition; + case TowerType.Shredder: + return global.manaConsumptionAddition + shredder.manaConsumptionAddition; + case TowerType.Encampment: + return global.manaConsumptionAddition + encampment.manaConsumptionAddition; + case TowerType.Lookout: + return global.manaConsumptionAddition + lookout.manaConsumptionAddition; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetCritChance(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.critChance + crossbow.critChance; + case TowerType.Morter: + return global.critChance + morter.critChance; + case TowerType.TeslaCoil: + return global.critChance + teslaCoil.critChance; + case TowerType.FlameThrower: + return global.critChance + flameThrower.critChance; + case TowerType.PoisonSprayer: + return global.critChance + poisonSprayer.critChance; + case TowerType.Frost: + return global.critChance + frostKeep.critChance; + case TowerType.Radar: + return global.critChance + radar.critChance; + case TowerType.Obelisk: + return global.critChance + obelisk.critChance; + case TowerType.ParticleCannon: + return global.critChance + particleCannon.critChance; + case TowerType.Shredder: + return global.critChance + shredder.critChance; + case TowerType.Encampment: + return global.critChance + encampment.critChance; + case TowerType.Lookout: + return global.critChance + lookout.critChance; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetStunChance(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.stunChance + crossbow.stunChance; + case TowerType.Morter: + return global.stunChance + morter.stunChance; + case TowerType.TeslaCoil: + return global.stunChance + teslaCoil.stunChance; + case TowerType.FlameThrower: + return global.stunChance + flameThrower.stunChance; + case TowerType.PoisonSprayer: + return global.stunChance + poisonSprayer.stunChance; + case TowerType.Frost: + return global.stunChance + frostKeep.stunChance; + case TowerType.Radar: + return global.stunChance + radar.stunChance; + case TowerType.Obelisk: + return global.stunChance + obelisk.stunChance; + case TowerType.ParticleCannon: + return global.stunChance + particleCannon.stunChance; + case TowerType.Shredder: + return global.stunChance + shredder.stunChance; + case TowerType.Encampment: + return global.stunChance + encampment.stunChance; + case TowerType.Lookout: + return global.stunChance + lookout.stunChance; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetCritChanceLevelMultiplier(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.critChanceLevelMultiplier + crossbow.critChanceLevelMultiplier; + case TowerType.Morter: + return global.critChanceLevelMultiplier + morter.critChanceLevelMultiplier; + case TowerType.TeslaCoil: + return global.critChanceLevelMultiplier + teslaCoil.critChanceLevelMultiplier; + case TowerType.FlameThrower: + return global.critChanceLevelMultiplier + flameThrower.critChanceLevelMultiplier; + case TowerType.PoisonSprayer: + return global.critChanceLevelMultiplier + poisonSprayer.critChanceLevelMultiplier; + case TowerType.Frost: + return global.critChanceLevelMultiplier + frostKeep.critChanceLevelMultiplier; + case TowerType.Radar: + return global.critChanceLevelMultiplier + radar.critChanceLevelMultiplier; + case TowerType.Obelisk: + return global.critChanceLevelMultiplier + obelisk.critChanceLevelMultiplier; + case TowerType.ParticleCannon: + return global.critChanceLevelMultiplier + particleCannon.critChanceLevelMultiplier; + case TowerType.Shredder: + return global.critChanceLevelMultiplier + shredder.critChanceLevelMultiplier; + case TowerType.Encampment: + return global.critChanceLevelMultiplier + encampment.critChanceLevelMultiplier; + case TowerType.Lookout: + return global.critChanceLevelMultiplier + lookout.critChanceLevelMultiplier; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetBonusRange(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusRange + crossbow.bonusRange; + case TowerType.Morter: + return global.bonusRange + morter.bonusRange; + case TowerType.TeslaCoil: + return global.bonusRange + teslaCoil.bonusRange; + case TowerType.FlameThrower: + return global.bonusRange + flameThrower.bonusRange; + case TowerType.PoisonSprayer: + return global.bonusRange + poisonSprayer.bonusRange; + case TowerType.Frost: + return global.bonusRange + frostKeep.bonusRange; + case TowerType.Radar: + return global.bonusRange + radar.bonusRange; + case TowerType.Obelisk: + return global.bonusRange + obelisk.bonusRange; + case TowerType.ParticleCannon: + return global.bonusRange + particleCannon.bonusRange; + case TowerType.Shredder: + return global.bonusRange + shredder.bonusRange; + case TowerType.Encampment: + return global.bonusRange + encampment.bonusRange; + case TowerType.Lookout: + return global.bonusRange + lookout.bonusRange; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public int GetBonusBaseDamage(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusBaseDamage + crossbow.bonusBaseDamage; + case TowerType.Morter: + return global.bonusBaseDamage + morter.bonusBaseDamage; + case TowerType.TeslaCoil: + return global.bonusBaseDamage + teslaCoil.bonusBaseDamage; + case TowerType.FlameThrower: + return global.bonusBaseDamage + flameThrower.bonusBaseDamage; + case TowerType.PoisonSprayer: + return global.bonusBaseDamage + poisonSprayer.bonusBaseDamage; + case TowerType.Frost: + return global.bonusBaseDamage + frostKeep.bonusBaseDamage; + case TowerType.Radar: + return global.bonusBaseDamage + radar.bonusBaseDamage; + case TowerType.Obelisk: + return global.bonusBaseDamage + obelisk.bonusBaseDamage; + case TowerType.ParticleCannon: + return global.bonusBaseDamage + particleCannon.bonusBaseDamage; + case TowerType.Shredder: + return global.bonusBaseDamage + shredder.bonusBaseDamage; + case TowerType.Encampment: + return global.bonusBaseDamage + encampment.bonusBaseDamage; + case TowerType.Lookout: + return global.bonusBaseDamage + lookout.bonusBaseDamage; + default: + Debug.Log("Failed to get global bonus"); + return 0; + } + } + + public int GetBonusHealthDamage(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusHealthDamage + crossbow.bonusHealthDamage; + case TowerType.Morter: + return global.bonusHealthDamage + morter.bonusHealthDamage; + case TowerType.TeslaCoil: + return global.bonusHealthDamage + teslaCoil.bonusHealthDamage; + case TowerType.FlameThrower: + return global.bonusHealthDamage + flameThrower.bonusHealthDamage; + case TowerType.PoisonSprayer: + return global.bonusHealthDamage + poisonSprayer.bonusHealthDamage; + case TowerType.Frost: + return global.bonusHealthDamage + frostKeep.bonusHealthDamage; + case TowerType.Radar: + return global.bonusHealthDamage + radar.bonusHealthDamage; + case TowerType.Obelisk: + return global.bonusHealthDamage + obelisk.bonusHealthDamage; + case TowerType.ParticleCannon: + return global.bonusHealthDamage + particleCannon.bonusHealthDamage; + case TowerType.Shredder: + return global.bonusHealthDamage + shredder.bonusHealthDamage; + case TowerType.Encampment: + return global.bonusHealthDamage + encampment.bonusHealthDamage; + case TowerType.Lookout: + return global.bonusHealthDamage + lookout.bonusHealthDamage; + default: + Debug.Log("Failed to get global bonus"); + return 0; + } + } + + public int GetBonusArmorDamage(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusArmorDamage + crossbow.bonusArmorDamage; + case TowerType.Morter: + return global.bonusArmorDamage + morter.bonusArmorDamage; + case TowerType.TeslaCoil: + return global.bonusArmorDamage + teslaCoil.bonusArmorDamage; + case TowerType.FlameThrower: + return global.bonusArmorDamage + flameThrower.bonusArmorDamage; + case TowerType.PoisonSprayer: + return global.bonusArmorDamage + poisonSprayer.bonusArmorDamage; + case TowerType.Frost: + return global.bonusArmorDamage + frostKeep.bonusArmorDamage; + case TowerType.Radar: + return global.bonusArmorDamage + radar.bonusArmorDamage; + case TowerType.Obelisk: + return global.bonusArmorDamage + obelisk.bonusArmorDamage; + case TowerType.ParticleCannon: + return global.bonusArmorDamage + particleCannon.bonusArmorDamage; + case TowerType.Shredder: + return global.bonusArmorDamage + shredder.bonusArmorDamage; + case TowerType.Encampment: + return global.bonusArmorDamage + encampment.bonusArmorDamage; + case TowerType.Lookout: + return global.bonusArmorDamage + lookout.bonusArmorDamage; + default: + Debug.Log("Failed to get global bonus"); + return 0; + } + } + + public int GetBonusShieldDamage(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusShieldDamage + crossbow.bonusShieldDamage; + case TowerType.Morter: + return global.bonusShieldDamage + morter.bonusShieldDamage; + case TowerType.TeslaCoil: + return global.bonusShieldDamage + teslaCoil.bonusShieldDamage; + case TowerType.FlameThrower: + return global.bonusShieldDamage + flameThrower.bonusShieldDamage; + case TowerType.PoisonSprayer: + return global.bonusShieldDamage + poisonSprayer.bonusShieldDamage; + case TowerType.Frost: + return global.bonusShieldDamage + frostKeep.bonusShieldDamage; + case TowerType.Radar: + return global.bonusShieldDamage + radar.bonusShieldDamage; + case TowerType.Obelisk: + return global.bonusShieldDamage + obelisk.bonusShieldDamage; + case TowerType.ParticleCannon: + return global.bonusShieldDamage + particleCannon.bonusShieldDamage; + case TowerType.Shredder: + return global.bonusShieldDamage + shredder.bonusShieldDamage; + case TowerType.Encampment: + return global.bonusShieldDamage + encampment.bonusShieldDamage; + case TowerType.Lookout: + return global.bonusShieldDamage + lookout.bonusShieldDamage; + default: + Debug.Log("Failed to get global bonus"); + return 0; + } + } + + public float GetBonusSlow(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusSlow + crossbow.bonusSlow; + case TowerType.Morter: + return global.bonusSlow + morter.bonusSlow; + case TowerType.TeslaCoil: + return global.bonusSlow + teslaCoil.bonusSlow; + case TowerType.FlameThrower: + return global.bonusSlow + flameThrower.bonusSlow; + case TowerType.PoisonSprayer: + return global.bonusSlow + poisonSprayer.bonusSlow; + case TowerType.Frost: + return global.bonusSlow + frostKeep.bonusSlow; + case TowerType.Radar: + return global.bonusSlow + radar.bonusSlow; + case TowerType.Obelisk: + return global.bonusSlow + obelisk.bonusSlow; + case TowerType.ParticleCannon: + return global.bonusSlow + particleCannon.bonusSlow; + case TowerType.Shredder: + return global.bonusSlow + shredder.bonusSlow; + case TowerType.Encampment: + return global.bonusSlow + encampment.bonusSlow; + case TowerType.Lookout: + return global.bonusSlow + lookout.bonusSlow; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetBonusBleed(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusBleed + crossbow.bonusBleed; + case TowerType.Morter: + return global.bonusBleed + morter.bonusBleed; + case TowerType.TeslaCoil: + return global.bonusBleed + teslaCoil.bonusBleed; + case TowerType.FlameThrower: + return global.bonusBleed + flameThrower.bonusBleed; + case TowerType.PoisonSprayer: + return global.bonusBleed + poisonSprayer.bonusBleed; + case TowerType.Frost: + return global.bonusBleed + frostKeep.bonusBleed; + case TowerType.Radar: + return global.bonusBleed + radar.bonusBleed; + case TowerType.Obelisk: + return global.bonusBleed + obelisk.bonusBleed; + case TowerType.ParticleCannon: + return global.bonusBleed + particleCannon.bonusBleed; + case TowerType.Shredder: + return global.bonusBleed + shredder.bonusBleed; + case TowerType.Encampment: + return global.bonusBleed + encampment.bonusBleed; + case TowerType.Lookout: + return global.bonusBleed + lookout.bonusBleed; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetBonusBurn(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusBurn + crossbow.bonusBurn; + case TowerType.Morter: + return global.bonusBurn + morter.bonusBurn; + case TowerType.TeslaCoil: + return global.bonusBurn + teslaCoil.bonusBurn; + case TowerType.FlameThrower: + return global.bonusBurn + flameThrower.bonusBurn; + case TowerType.PoisonSprayer: + return global.bonusBurn + poisonSprayer.bonusBurn; + case TowerType.Frost: + return global.bonusBurn + frostKeep.bonusBurn; + case TowerType.Radar: + return global.bonusBurn + radar.bonusBurn; + case TowerType.Obelisk: + return global.bonusBurn + obelisk.bonusBurn; + case TowerType.ParticleCannon: + return global.bonusBurn + particleCannon.bonusBurn; + case TowerType.Shredder: + return global.bonusBurn + shredder.bonusBurn; + case TowerType.Encampment: + return global.bonusBurn + encampment.bonusBurn; + case TowerType.Lookout: + return global.bonusBurn + lookout.bonusBurn; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetBonusPoison(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusPoison + crossbow.bonusPoison; + case TowerType.Morter: + return global.bonusPoison + morter.bonusPoison; + case TowerType.TeslaCoil: + return global.bonusPoison + teslaCoil.bonusPoison; + case TowerType.FlameThrower: + return global.bonusPoison + flameThrower.bonusPoison; + case TowerType.PoisonSprayer: + return global.bonusPoison + poisonSprayer.bonusPoison; + case TowerType.Frost: + return global.bonusPoison + frostKeep.bonusPoison; + case TowerType.Radar: + return global.bonusPoison + radar.bonusPoison; + case TowerType.Obelisk: + return global.bonusPoison + obelisk.bonusPoison; + case TowerType.ParticleCannon: + return global.bonusPoison + particleCannon.bonusPoison; + case TowerType.Shredder: + return global.bonusPoison + shredder.bonusPoison; + case TowerType.Encampment: + return global.bonusPoison + encampment.bonusPoison; + case TowerType.Lookout: + return global.bonusPoison + lookout.bonusPoison; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public float GetBonusBlast(TowerType type) + { + switch (type) + { + case TowerType.Crossbow: + return global.bonusBlast + crossbow.bonusBlast; + case TowerType.Morter: + return global.bonusBlast + morter.bonusBlast; + case TowerType.TeslaCoil: + return global.bonusBlast + teslaCoil.bonusBlast; + case TowerType.FlameThrower: + return global.bonusBlast + flameThrower.bonusBlast; + case TowerType.PoisonSprayer: + return global.bonusBlast + poisonSprayer.bonusBlast; + case TowerType.Frost: + return global.bonusBlast + frostKeep.bonusBlast; + case TowerType.Radar: + return global.bonusBlast + radar.bonusBlast; + case TowerType.Obelisk: + return global.bonusBlast + obelisk.bonusBlast; + case TowerType.ParticleCannon: + return global.bonusBlast + particleCannon.bonusBlast; + case TowerType.Shredder: + return global.bonusBlast + shredder.bonusBlast; + case TowerType.Encampment: + return global.bonusBlast + encampment.bonusBlast; + case TowerType.Lookout: + return global.bonusBlast + lookout.bonusBlast; + default: + Debug.Log("Failed to get global bonus"); + return 0f; + } + } + + public void AddManaConsumption(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddManaAddition(value); + break; + case TowerType.Morter: + morter.AddManaAddition(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddManaAddition(value); + break; + case TowerType.FlameThrower: + flameThrower.AddManaAddition(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddManaAddition(value); + break; + case TowerType.Frost: + frostKeep.AddManaAddition(value); + break; + case TowerType.Radar: + radar.AddManaAddition(value); + break; + case TowerType.Obelisk: + obelisk.AddManaAddition(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddManaAddition(value); + break; + case TowerType.Shredder: + shredder.AddManaAddition(value); + break; + case TowerType.Encampment: + encampment.AddManaAddition(value); + break; + case TowerType.Lookout: + lookout.AddManaAddition(value); + break; + case TowerType.Global: + global.AddManaAddition(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddCritChance(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddCritChance(value); + break; + case TowerType.Morter: + morter.AddCritChance(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddCritChance(value); + break; + case TowerType.FlameThrower: + flameThrower.AddCritChance(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddCritChance(value); + break; + case TowerType.Frost: + frostKeep.AddCritChance(value); + break; + case TowerType.Radar: + radar.AddCritChance(value); + break; + case TowerType.Obelisk: + obelisk.AddCritChance(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddCritChance(value); + break; + case TowerType.Shredder: + shredder.AddCritChance(value); + break; + case TowerType.Encampment: + encampment.AddCritChance(value); + break; + case TowerType.Lookout: + lookout.AddCritChance(value); + break; + case TowerType.Global: + global.AddCritChance(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddStunChance(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddStunChance(value); + break; + case TowerType.Morter: + morter.AddStunChance(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddStunChance(value); + break; + case TowerType.FlameThrower: + flameThrower.AddStunChance(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddStunChance(value); + break; + case TowerType.Frost: + frostKeep.AddStunChance(value); + break; + case TowerType.Radar: + radar.AddStunChance(value); + break; + case TowerType.Obelisk: + obelisk.AddStunChance(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddStunChance(value); + break; + case TowerType.Shredder: + shredder.AddStunChance(value); + break; + case TowerType.Encampment: + encampment.AddStunChance(value); + break; + case TowerType.Lookout: + lookout.AddStunChance(value); + break; + case TowerType.Global: + global.AddStunChance(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddCritChanceLevelMultiplier(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Morter: + morter.AddCritChanceLevelMultiplier(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddCritChanceLevelMultiplier(value); + break; + case TowerType.FlameThrower: + flameThrower.AddCritChanceLevelMultiplier(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Frost: + frostKeep.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Radar: + radar.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Obelisk: + obelisk.AddCritChanceLevelMultiplier(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Shredder: + shredder.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Encampment: + encampment.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Lookout: + lookout.AddCritChanceLevelMultiplier(value); + break; + case TowerType.Global: + global.AddCritChanceLevelMultiplier(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusRange(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusRange(value); + break; + case TowerType.Morter: + morter.AddBonusRange(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusRange(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusRange(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusRange(value); + break; + case TowerType.Frost: + frostKeep.AddBonusRange(value); + break; + case TowerType.Radar: + radar.AddBonusRange(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusRange(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusRange(value); + break; + case TowerType.Shredder: + shredder.AddBonusRange(value); + break; + case TowerType.Encampment: + encampment.AddBonusRange(value); + break; + case TowerType.Lookout: + lookout.AddBonusRange(value); + break; + case TowerType.Global: + global.AddBonusRange(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusBaseDamage(TowerType type, int value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusBaseDamage(value); + break; + case TowerType.Morter: + morter.AddBonusBaseDamage(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusBaseDamage(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusBaseDamage(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusBaseDamage(value); + break; + case TowerType.Frost: + frostKeep.AddBonusBaseDamage(value); + break; + case TowerType.Radar: + radar.AddBonusBaseDamage(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusBaseDamage(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusBaseDamage(value); + break; + case TowerType.Shredder: + shredder.AddBonusBaseDamage(value); + break; + case TowerType.Encampment: + encampment.AddBonusBaseDamage(value); + break; + case TowerType.Lookout: + lookout.AddBonusBaseDamage(value); + break; + case TowerType.Global: + global.AddBonusBaseDamage(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusHealthDamage(TowerType type, int value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusHealthDamage(value); + break; + case TowerType.Morter: + morter.AddBonusHealthDamage(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusHealthDamage(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusHealthDamage(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusHealthDamage(value); + break; + case TowerType.Frost: + frostKeep.AddBonusHealthDamage(value); + break; + case TowerType.Radar: + radar.AddBonusHealthDamage(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusHealthDamage(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusHealthDamage(value); + break; + case TowerType.Shredder: + shredder.AddBonusHealthDamage(value); + break; + case TowerType.Encampment: + encampment.AddBonusHealthDamage(value); + break; + case TowerType.Lookout: + lookout.AddBonusHealthDamage(value); + break; + case TowerType.Global: + global.AddBonusHealthDamage(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusArmorDamage(TowerType type, int value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusArmorDamage(value); + break; + case TowerType.Morter: + morter.AddBonusArmorDamage(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusArmorDamage(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusArmorDamage(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusArmorDamage(value); + break; + case TowerType.Frost: + frostKeep.AddBonusArmorDamage(value); + break; + case TowerType.Radar: + radar.AddBonusArmorDamage(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusArmorDamage(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusArmorDamage(value); + break; + case TowerType.Shredder: + shredder.AddBonusArmorDamage(value); + break; + case TowerType.Encampment: + encampment.AddBonusArmorDamage(value); + break; + case TowerType.Lookout: + lookout.AddBonusArmorDamage(value); + break; + case TowerType.Global: + global.AddBonusArmorDamage(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusShieldDamage(TowerType type, int value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusShieldDamage(value); + break; + case TowerType.Morter: + morter.AddBonusShieldDamage(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusShieldDamage(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusShieldDamage(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusShieldDamage(value); + break; + case TowerType.Frost: + frostKeep.AddBonusShieldDamage(value); + break; + case TowerType.Radar: + radar.AddBonusShieldDamage(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusShieldDamage(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusShieldDamage(value); + break; + case TowerType.Shredder: + shredder.AddBonusShieldDamage(value); + break; + case TowerType.Encampment: + encampment.AddBonusShieldDamage(value); + break; + case TowerType.Lookout: + lookout.AddBonusShieldDamage(value); + break; + case TowerType.Global: + global.AddBonusShieldDamage(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusSlow(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusSlow(value); + break; + case TowerType.Morter: + morter.AddBonusSlow(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusSlow(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusSlow(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusSlow(value); + break; + case TowerType.Frost: + frostKeep.AddBonusSlow(value); + break; + case TowerType.Radar: + radar.AddBonusSlow(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusSlow(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusSlow(value); + break; + case TowerType.Shredder: + shredder.AddBonusSlow(value); + break; + case TowerType.Encampment: + encampment.AddBonusSlow(value); + break; + case TowerType.Lookout: + lookout.AddBonusSlow(value); + break; + case TowerType.Global: + global.AddBonusSlow(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusBleed(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusBleed(value); + break; + case TowerType.Morter: + morter.AddBonusBleed(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusBleed(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusBleed(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusBleed(value); + break; + case TowerType.Frost: + frostKeep.AddBonusBleed(value); + break; + case TowerType.Radar: + radar.AddBonusBleed(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusBleed(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusBleed(value); + break; + case TowerType.Shredder: + shredder.AddBonusBleed(value); + break; + case TowerType.Encampment: + encampment.AddBonusBleed(value); + break; + case TowerType.Lookout: + lookout.AddBonusBleed(value); + break; + case TowerType.Global: + global.AddBonusBleed(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusBurn(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusBurn(value); + break; + case TowerType.Morter: + morter.AddBonusBurn(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusBurn(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusBurn(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusBurn(value); + break; + case TowerType.Frost: + frostKeep.AddBonusBurn(value); + break; + case TowerType.Radar: + radar.AddBonusBurn(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusBurn(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusBurn(value); + break; + case TowerType.Shredder: + shredder.AddBonusBurn(value); + break; + case TowerType.Encampment: + encampment.AddBonusBurn(value); + break; + case TowerType.Lookout: + lookout.AddBonusBurn(value); + break; + case TowerType.Global: + global.AddBonusBurn(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusPoison(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusPoison(value); + break; + case TowerType.Morter: + morter.AddBonusPoison(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusPoison(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusPoison(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusPoison(value); + break; + case TowerType.Frost: + frostKeep.AddBonusPoison(value); + break; + case TowerType.Radar: + radar.AddBonusPoison(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusPoison(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusPoison(value); + break; + case TowerType.Shredder: + shredder.AddBonusPoison(value); + break; + case TowerType.Encampment: + encampment.AddBonusPoison(value); + break; + case TowerType.Lookout: + lookout.AddBonusPoison(value); + break; + case TowerType.Global: + global.AddBonusPoison(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } + + public void AddBonusBlast(TowerType type, float value) + { + switch (type) + { + case TowerType.Crossbow: + crossbow.AddBonusBlast(value); + break; + case TowerType.Morter: + morter.AddBonusBlast(value); + break; + case TowerType.TeslaCoil: + teslaCoil.AddBonusBlast(value); + break; + case TowerType.FlameThrower: + flameThrower.AddBonusBlast(value); + break; + case TowerType.PoisonSprayer: + poisonSprayer.AddBonusBlast(value); + break; + case TowerType.Frost: + frostKeep.AddBonusBlast(value); + break; + case TowerType.Radar: + radar.AddBonusBlast(value); + break; + case TowerType.Obelisk: + obelisk.AddBonusBlast(value); + break; + case TowerType.ParticleCannon: + particleCannon.AddBonusBlast(value); + break; + case TowerType.Shredder: + shredder.AddBonusBlast(value); + break; + case TowerType.Encampment: + encampment.AddBonusBlast(value); + break; + case TowerType.Lookout: + lookout.AddBonusBlast(value); + break; + case TowerType.Global: + global.AddBonusBlast(value); + UpdateAllTowers(); + break; + default: + Debug.Log("Failed to set global bonus"); + break; + } + } +} diff --git a/Assembly_CSharp/_Tower/TowerType.cs b/Assembly_CSharp/_Tower/TowerType.cs new file mode 100644 index 0000000..9bbc242 --- /dev/null +++ b/Assembly_CSharp/_Tower/TowerType.cs @@ -0,0 +1,18 @@ +public enum TowerType +{ + Crossbow, + Morter, + TeslaCoil, + Frost, + Obelisk, + FlameThrower, + PoisonSprayer, + Siphon, + Radar, + ParticleCannon, + DOT, + Global, + Shredder, + Encampment, + Lookout +} diff --git a/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.dll b/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.dll index c8d0a31..6bfa839 100644 Binary files a/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.dll and b/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.dll differ diff --git a/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.pdb b/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.pdb index d99ca13..ea4ba4c 100644 Binary files a/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.pdb and b/Assembly_CSharp/bin/Debug/netstandard2.0/Assembly-CSharp.pdb differ diff --git a/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.dll b/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.dll index c8d0a31..6bfa839 100644 Binary files a/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.dll and b/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.dll differ diff --git a/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.pdb b/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.pdb index d99ca13..ea4ba4c 100644 Binary files a/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.pdb and b/Assembly_CSharp/obj/Debug/netstandard2.0/Assembly-CSharp.pdb differ diff --git a/Assembly_CSharp/obj/Debug/netstandard2.0/RogueTower.csproj.CoreCompileInputs.cache b/Assembly_CSharp/obj/Debug/netstandard2.0/RogueTower.csproj.CoreCompileInputs.cache index 810a41d..e671719 100644 --- a/Assembly_CSharp/obj/Debug/netstandard2.0/RogueTower.csproj.CoreCompileInputs.cache +++ b/Assembly_CSharp/obj/Debug/netstandard2.0/RogueTower.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -e7f7df5bf2fc9c6366b8428c09da909eb7f91031 +d6a8e40867aef5e554a8ec14d407cc37e5d91c88 -- cgit v1.1-26-g67d0