summaryrefslogtreecommitdiff
path: root/GameCode/GameManager.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-03-21 10:28:46 +0800
committerchai <215380520@qq.com>2024-03-21 10:28:46 +0800
commit3fb2121cc0d00cbd42b2ca10b5dfb399a4df1a04 (patch)
treec1f4683fb021522b459408ab1ad61c40be77ee47 /GameCode/GameManager.cs
parent9ee2cfa385ed77c39003f524f5f03079124fc476 (diff)
*misc
Diffstat (limited to 'GameCode/GameManager.cs')
-rw-r--r--GameCode/GameManager.cs476
1 files changed, 476 insertions, 0 deletions
diff --git a/GameCode/GameManager.cs b/GameCode/GameManager.cs
new file mode 100644
index 0000000..bfa59e1
--- /dev/null
+++ b/GameCode/GameManager.cs
@@ -0,0 +1,476 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public class GameManager : MonoBehaviour
+{
+ [SerializeField]
+ private TileManager tileManager;
+
+ [SerializeField]
+ private SpawnManager spawnManager;
+
+ public int gameMode = 3;
+
+ [SerializeField]
+ private TerrainTile singleStartTile;
+
+ [SerializeField]
+ private Waypoint[] singleStartWaypoints;
+
+ [SerializeField]
+ private TerrainTile doubleStartTile;
+
+ [SerializeField]
+ private Waypoint[] doubleStartWaypoints;
+
+ [SerializeField]
+ private TerrainTile tripleStartTile;
+
+ [SerializeField]
+ private Waypoint[] tripleStartWaypoints;
+
+ public bool gameOver;
+
+ public int health;
+
+ public int maxHealth;
+
+ private float healthLoss;
+
+ [SerializeField]
+ private Text healthText;
+
+ [SerializeField]
+ private Image maskBar;
+
+ [SerializeField]
+ private Image healthBar;
+
+ [SerializeField]
+ private Image healthLossBar;
+
+ [SerializeField]
+ private GameObject gameOverMenu;
+
+ [SerializeField]
+ private Text levelsCompletedText;
+
+ [SerializeField]
+ private Text xpGainText;
+
+ [SerializeField]
+ private Text newRecordText;
+
+ [SerializeField]
+ private GameObject victoryScreen;
+
+ [SerializeField]
+ private Text vicLevelsText;
+
+ [SerializeField]
+ private Text vicLevelXpText;
+
+ [SerializeField]
+ private Text vicXpBonusText;
+
+ [SerializeField]
+ private Text vicNewRecordText;
+
+ public Vector3 dotTick = 24f * Vector3.one;
+
+ public int hauntedHouseEfficiency = 1;
+
+ public int universityBonus;
+
+ public static GameManager instance;
+
+ private void Awake()
+ {
+ instance = this;
+ gameMode = PlayerPrefs.GetInt("GameMode", 1);
+ if (gameMode == 1)
+ {
+ singleStartTile.transform.Rotate(0f, 90 * Random.Range(-1, 3), 0f);
+ singleStartTile.SetCardinalDirections();
+ tileManager.startTile = singleStartTile;
+ spawnManager.initialSpawns = singleStartWaypoints;
+ doubleStartTile.gameObject.SetActive(value: false);
+ tripleStartTile.gameObject.SetActive(value: false);
+ }
+ else if (gameMode == 2)
+ {
+ doubleStartTile.transform.Rotate(0f, 90 * Random.Range(-1, 3), 0f);
+ doubleStartTile.SetCardinalDirections();
+ tileManager.startTile = doubleStartTile;
+ spawnManager.initialSpawns = doubleStartWaypoints;
+ singleStartTile.gameObject.SetActive(value: false);
+ tripleStartTile.gameObject.SetActive(value: false);
+ }
+ else if (gameMode == 3)
+ {
+ tripleStartTile.transform.Rotate(0f, 90 * Random.Range(-1, 3), 0f);
+ tripleStartTile.SetCardinalDirections();
+ tileManager.startTile = tripleStartTile;
+ spawnManager.initialSpawns = tripleStartWaypoints;
+ doubleStartTile.gameObject.SetActive(value: false);
+ singleStartTile.gameObject.SetActive(value: false);
+ }
+
+ }
+
+ private void Start()
+ {
+ maxHealth = 100 + 10 * (PlayerPrefs.GetInt("TowerHealth1", 0) + PlayerPrefs.GetInt("TowerHealth2", 0) + PlayerPrefs.GetInt("TowerHealth3", 0) + PlayerPrefs.GetInt("TowerHealth4", 0) + PlayerPrefs.GetInt("TowerHealth5", 0) + PlayerPrefs.GetInt("TowerHealth6", 0) + PlayerPrefs.GetInt("TowerHealth7", 0) + PlayerPrefs.GetInt("TowerHealth8", 0) + PlayerPrefs.GetInt("TowerHealth9", 0) + PlayerPrefs.GetInt("TowerHealth10", 0));
+ health = maxHealth;
+ healthLoss = maxHealth;
+ SetHealthBar();
+ int num = 0;
+ num = PlayerPrefs.GetInt("BalistaPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Crossbow, num);
+ }
+ num = PlayerPrefs.GetInt("BalistaPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Crossbow, num);
+ }
+ num = PlayerPrefs.GetInt("BalistaPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Crossbow, num);
+ }
+ num = PlayerPrefs.GetInt("MortarPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Morter, num);
+ }
+ num = PlayerPrefs.GetInt("MortarPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Morter, num);
+ }
+ num = PlayerPrefs.GetInt("MortarPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Morter, num);
+ }
+ num = PlayerPrefs.GetInt("TeslaPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.TeslaCoil, num);
+ }
+ num = PlayerPrefs.GetInt("TeslaPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.TeslaCoil, num);
+ }
+ num = PlayerPrefs.GetInt("TeslaPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.TeslaCoil, num);
+ }
+ num = PlayerPrefs.GetInt("FrostPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Frost, num);
+ }
+ num = PlayerPrefs.GetInt("FrostPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Frost, num);
+ }
+ num = PlayerPrefs.GetInt("FrostPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Frost, num);
+ }
+ num = PlayerPrefs.GetInt("FlamePHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.FlameThrower, num);
+ }
+ num = PlayerPrefs.GetInt("FlamePArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.FlameThrower, num);
+ }
+ num = PlayerPrefs.GetInt("FlamePShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.FlameThrower, num);
+ }
+ num = PlayerPrefs.GetInt("PoisonPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.PoisonSprayer, num);
+ }
+ num = PlayerPrefs.GetInt("PoisonPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.PoisonSprayer, num);
+ }
+ num = PlayerPrefs.GetInt("PoisonPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.PoisonSprayer, num);
+ }
+ num = PlayerPrefs.GetInt("ShredderPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Shredder, num);
+ }
+ num = PlayerPrefs.GetInt("ShredderPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Shredder, num);
+ }
+ num = PlayerPrefs.GetInt("ShredderPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Shredder, num);
+ }
+ num = PlayerPrefs.GetInt("EncampmentPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Encampment, num);
+ }
+ num = PlayerPrefs.GetInt("EncampmentPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Encampment, num);
+ }
+ num = PlayerPrefs.GetInt("EncampmentPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Encampment, num);
+ }
+ num = PlayerPrefs.GetInt("LookoutPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Lookout, num);
+ }
+ num = PlayerPrefs.GetInt("LookoutPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Lookout, num);
+ }
+ num = PlayerPrefs.GetInt("LookoutPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Lookout, num);
+ }
+ num = PlayerPrefs.GetInt("RadarPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Radar, num);
+ }
+ num = PlayerPrefs.GetInt("RadarPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Radar, num);
+ }
+ num = PlayerPrefs.GetInt("RadarPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Radar, num);
+ }
+ num = PlayerPrefs.GetInt("ObeliskPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.Obelisk, num);
+ }
+ num = PlayerPrefs.GetInt("ObeliskPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.Obelisk, num);
+ }
+ num = PlayerPrefs.GetInt("ObeliskPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.Obelisk, num);
+ }
+ num = PlayerPrefs.GetInt("ParticleCannonPHealth", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusHealthDamage(TowerType.ParticleCannon, num);
+ }
+ num = PlayerPrefs.GetInt("ParticleCannonPArmor", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusArmorDamage(TowerType.ParticleCannon, num);
+ }
+ num = PlayerPrefs.GetInt("ParticleCannonPShield", 0);
+ if (num > 0)
+ {
+ TowerManager.instance.AddBonusShieldDamage(TowerType.ParticleCannon, num);
+ }
+ }
+
+ private void Update()
+ {
+ if (healthLoss > (float)health)
+ {
+ healthLoss = Mathf.Clamp(healthLoss - 4f * Time.deltaTime, health, healthLoss);
+ healthLossBar.rectTransform.sizeDelta = new Vector2(healthLoss / 10f, 0.25f);
+ }
+ }
+
+ public void IncreaseTowerHealth(int amt)
+ {
+ maxHealth += amt * 10;
+ health += amt * 10;
+ healthLoss = health;
+ SetHealthBar();
+ if (maxHealth / 10 >= 50)
+ {
+ AchievementManager.instance.UnlockAchievement("TowerHealth50");
+ }
+ else if (maxHealth / 10 >= 40)
+ {
+ AchievementManager.instance.UnlockAchievement("TowerHealth40");
+ }
+ else if (maxHealth / 10 >= 30)
+ {
+ AchievementManager.instance.UnlockAchievement("TowerHealth30");
+ }
+ }
+
+ private void SetHealthBar()
+ {
+ maskBar.rectTransform.localScale = new Vector3(2000 / maxHealth, 50f, 10f);
+ maskBar.rectTransform.sizeDelta = new Vector2((float)maxHealth / 10f, 0.25f);
+ healthLossBar.rectTransform.sizeDelta = new Vector2((float)health / 10f, 0.25f);
+ UpdateHealthText();
+ }
+
+ private void UpdateHealthText()
+ {
+ healthText.text = "Tower: " + health / 10 + "/" + maxHealth / 10;
+ healthBar.rectTransform.sizeDelta = new Vector2((float)health / 10f, 0.25f);
+ }
+
+ public void TakeDamage(int damage)
+ {
+ health = Mathf.Max(health - 10 * damage, 0);
+ UpdateHealthText();
+ if (health <= 0 && !gameOver)
+ {
+ gameOver = true;
+ GameOver();
+ }
+ }
+
+ public void RepairTower(int heal)
+ {
+ health = Mathf.Clamp(health + heal, 0, maxHealth);
+ if (healthLoss < (float)health)
+ {
+ healthLoss = health;
+ }
+ UpdateHealthText();
+ }
+
+ public void GameOverQuit()
+ {
+ if (!SpawnManager.instance.combat)
+ {
+ SpawnManager.instance.level++;
+ }
+ if (Time.timeScale != 1f)
+ {
+ Time.timeScale = 1f;
+ }
+ gameOver = true;
+ GameOver();
+ }
+
+ public int NaturalSum(int value)
+ {
+ return value * (value + 1) / 2;
+ }
+
+ private void GameOver()
+ {
+ gameOverMenu.SetActive(value: true);
+ DamageTracker.instance.DisplayDamageTotals();
+ int num = NaturalSum(SpawnManager.instance.level - 1) * gameMode;
+ int num2 = 0;
+ int @int = PlayerPrefs.GetInt("Record" + gameMode, 0);
+ if (SpawnManager.instance.level - 1 - @int > 0)
+ {
+ num2 = (NaturalSum(SpawnManager.instance.level - 1) - NaturalSum(@int)) * 3;
+ PlayerPrefs.SetInt("Record" + gameMode, SpawnManager.instance.level - 1);
+ string text = "";
+ if (gameMode == 1)
+ {
+ text = "single";
+ }
+ else if (gameMode == 2)
+ {
+ text = "double";
+ }
+ else if (gameMode == 3)
+ {
+ text = "triple";
+ }
+ newRecordText.text = "New " + text + " defense record!\n +" + num2 + " bonus xp";
+ }
+ else
+ {
+ newRecordText.text = "";
+ }
+ int int2 = PlayerPrefs.GetInt("XP", 0);
+ PlayerPrefs.SetInt("XP", int2 + num2);
+ levelsCompletedText.text = "Defended " + (SpawnManager.instance.level - 1) + " levels";
+ xpGainText.text = "+" + num + " xp";
+ }
+
+ public void Victory()
+ {
+ AchievementManager.instance.CheckTowerTypesVictory();
+ victoryScreen.SetActive(value: true);
+ DamageTracker.instance.DisplayDamageTotals();
+ int num = NaturalSum(SpawnManager.instance.level - 1) * gameMode;
+ int num2 = SpawnManager.instance.lastLevel * gameMode * 10;
+ int num3 = 0;
+ int @int = PlayerPrefs.GetInt("Record" + gameMode, 0);
+ if (SpawnManager.instance.lastLevel - @int > 0)
+ {
+ num3 = (NaturalSum(SpawnManager.instance.level - 1) - NaturalSum(@int)) * 3;
+ PlayerPrefs.SetInt("Record" + gameMode, SpawnManager.instance.lastLevel);
+ string text = "";
+ if (gameMode == 1)
+ {
+ text = "single";
+ }
+ else if (gameMode == 2)
+ {
+ text = "double";
+ }
+ else if (gameMode == 3)
+ {
+ text = "triple";
+ }
+ vicNewRecordText.text = "New " + text + " defense record!\n +" + num3 + " bonus xp";
+ }
+ else
+ {
+ vicNewRecordText.text = "";
+ }
+ int int2 = PlayerPrefs.GetInt("XP", 0);
+ PlayerPrefs.SetInt("XP", int2 + num3 + num2);
+ vicLevelsText.text = "Defended all " + SpawnManager.instance.lastLevel + " levels";
+ vicLevelXpText.text = "+" + num + " xp";
+ vicXpBonusText.text = "+" + num2 + " xp";
+ }
+
+ public void LoadScene(string sceneName)
+ {
+ if (AchievementManager.instance != null)
+ {
+ AchievementManager.instance.OnSceneClose();
+ }
+ LevelLoader.instance.LoadLevel(sceneName);
+ }
+}