Files
blackhole-escape/Assets/GameManager/GameManager.cs
iDunnoDev 93b087808d Fixed issue where player would not respawn with controls after dying
Fixed some dumb enemy timers for patterns
2022-10-01 20:35:35 +01:00

328 lines
8.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public enum EnemyTypeName
{
ENEMYDUMB,
ENEMYCOWARD,
ENEMYCHASE,
ENEMYDROP
}
public enum GameState
{
MAINMENU,
RULESMENU,
GAME,
DEATHMENU,
WINMENU
}
public class GameManager : MonoBehaviour
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
return _instance;
}
}
// Dictionary to hold the enemy counts and type
public Dictionary<EnemyTypeName, EnemyType> enemyList = new Dictionary<EnemyTypeName, EnemyType>();
public AudioMixer currentAudioMixer;
public bool godMode = false;
private HiddenValueInt _startingLives = new HiddenValueInt(5);
private HiddenValueInt _lives = new HiddenValueInt(0);
private int _firstLevel = 0;
private HiddenValueInt _level = new HiddenValueInt(0);
public int blackHoleSize = 0;
private int _startCores = 0;
private HiddenValueInt _coreCount = new HiddenValueInt(0);
private List<HiddenValueInt> _coresNeeded = new List<HiddenValueInt>();
private HiddenValueInt _score = new HiddenValueInt(0);
public bool boss = false;
public bool isGameOver = false;
public GameState currentGameState;
public bool warmStart = false;
private int _versionMajor = 0;
private int _versionMinor = 2;
private int _versionRevision = 4;
public string CurrentVersion
{
get
{
return _versionMajor.ToString() + "." + _versionMinor.ToString() + "." + _versionRevision.ToString();
}
}
public int CurrentLevel
{
get
{
return _level.Value;
}
}
public int CurrentLives
{
get
{
return _lives.Value;
}
}
public int CurrentCores
{
get
{
return _coreCount.Value;
}
}
public int CurrentScore
{
get
{
return _score.Value;
}
}
public int CurrentNeededCores
{
get
{
int result;
if (CurrentLevel == 5)
{
result = _coreCount.Value;
}
if (CurrentLevel == -1)
{
result = -1;
}
else if (_coresNeeded.Count <= CurrentLevel)
{
result = _coresNeeded[_coresNeeded.Count - 1].Value;
}
else
{
result = _coresNeeded[CurrentLevel].Value;
}
return result;
}
}
private void Awake()
{
if (_instance != null && _instance != this)
{
Destroy(gameObject);
}
else
{
_instance = this;
DontDestroyOnLoad(gameObject);
}
}
private void Start()
{
// Load the saved audio levels into the mixer
if (PlayerPrefs.HasKey("currentMasterVol"))
{
float currentMasterVol = PlayerPrefs.GetFloat("currentMasterVol");
float currentMusicVol = PlayerPrefs.GetFloat("currentMusicVol");
float currentSFXVol = PlayerPrefs.GetFloat("currentSFXVol");
currentAudioMixer.SetFloat("masterVol", SharedMethods.ConvertToDecibels(currentMasterVol));
currentAudioMixer.SetFloat("musicVol", SharedMethods.ConvertToDecibels(currentMusicVol));
currentAudioMixer.SetFloat("sfxVol", SharedMethods.ConvertToDecibels(currentSFXVol));
}
else
{
float currentMasterVol = 1.0f;
float currentMusicVol = 0.5f;
float currentSFXVol = 0.8f;
currentAudioMixer.SetFloat("masterVol", SharedMethods.ConvertToDecibels(currentMasterVol));
currentAudioMixer.SetFloat("musicVol", SharedMethods.ConvertToDecibels(currentMusicVol));
currentAudioMixer.SetFloat("sfxVol", SharedMethods.ConvertToDecibels(currentSFXVol));
PlayerPrefs.SetFloat("currentMasterVol", currentMasterVol);
PlayerPrefs.SetFloat("currentMusicVol", currentMusicVol);
PlayerPrefs.SetFloat("currentSFXVol", currentSFXVol);
}
}
public void ResetStats()
{
_lives.Value = _startingLives.Value;
_coreCount.Value = _startCores;
_level.Value = _firstLevel;
_score.Value = 0;
isGameOver = false;
}
public void SetupLevel()
{
if (warmStart)
{
ResetStats();
warmStart = false;
}
if (_coresNeeded.Count == 0)
{
_coresNeeded.Add(new HiddenValueInt(4));
_coresNeeded.Add(new HiddenValueInt(6));
_coresNeeded.Add(new HiddenValueInt(12));
_coresNeeded.Add(new HiddenValueInt(16));
_coresNeeded.Add(new HiddenValueInt(20));
}
if (enemyList.Count == 0)
{
// Set up the enemy level and count dictionaries
EnemyType enemyDumbSetup = new EnemyType();
EnemyType enemyCowardSetup = new EnemyType();
EnemyType enemyChaseSetup = new EnemyType();
EnemyType enemyDropSetup = new EnemyType();
// Level 1 numbers
enemyDumbSetup.AddLevelStats(0, 15, 500, 300.0f, 10.0f);
enemyCowardSetup.AddLevelStats(0, 1, 1500, 300.0f, 10.0f);
enemyChaseSetup.AddLevelStats(0, 0, 0, 0.0f, 0.0f);
enemyDropSetup.AddLevelStats(0, 0, 0, 0.0f, 0.0f);
// Level 2 numbers
enemyDumbSetup.AddLevelStats(1, 20, 450, 240.0f, 20.0f);
enemyCowardSetup.AddLevelStats(1, 5, 1000, 300.0f, 10.0f);
enemyChaseSetup.AddLevelStats(1, 0, 0, 0.0f, 0.0f);
enemyDropSetup.AddLevelStats(1, 0, 0, 0.0f, 0.0f);
// Level 3 numbers
enemyDumbSetup.AddLevelStats(2, 20, 200, 180.0f, 40.0f);
enemyCowardSetup.AddLevelStats(2, 8, 500, 240.0f, 20.0f);
enemyChaseSetup.AddLevelStats(2, 2, 1500, 360.0f, 5.0f);
enemyDropSetup.AddLevelStats(2, 0, 0, 0.0f, 0.0f);
// Level 4 numbers
enemyDumbSetup.AddLevelStats(3, 25, 150, 180.0f, 50.0f);
enemyCowardSetup.AddLevelStats(3, 10, 500, 240.0f, 30.0f);
enemyChaseSetup.AddLevelStats(3, 5, 1000, 300.0f, 20.0f);
enemyDropSetup.AddLevelStats(3, 2, 2000, 300.0f, 10.0f);
// Add the counts to the enemy type dictionaries
enemyList.Add(EnemyTypeName.ENEMYDUMB, enemyDumbSetup);
enemyList.Add(EnemyTypeName.ENEMYCOWARD, enemyCowardSetup);
enemyList.Add(EnemyTypeName.ENEMYCHASE, enemyChaseSetup);
enemyList.Add(EnemyTypeName.ENEMYDROP, enemyDropSetup);
}
}
public EnemyType.EnemyTypeStat GetCurrentLevelEnemyStats(EnemyTypeName enemyType)
{
if (enemyList[enemyType][CurrentLevel] == null)
{
// Get the "last" levels numbers
return enemyList[enemyType][enemyList[enemyType].Count - 1];
}
else
{
return enemyList[enemyType][CurrentLevel];
}
}
public int GetCurrentLevelEnemyTypeCount(EnemyTypeName enemyType)
{
int result;
// Check if the current level is higher than the max we have set up (we should probs cap it)
if (enemyList[enemyType][CurrentLevel] == null)
{
// Get the "last" levels numbers
result = enemyList[enemyType][enemyList[enemyType].Count - 1].SpawnCount;
}
else
{
// Get the current levels numbers
result = enemyList[enemyType][CurrentLevel].SpawnCount;
}
return result;
}
// Update is called once per frame
void LateUpdate()
{
if (currentGameState == GameState.GAME)
{
if (CurrentCores >= CurrentNeededCores)
{
_coreCount.Value = 0;
_level += 1;
}
}
}
public void AddScore(int amount)
{
_score.Value = Mathf.Clamp(CurrentScore + amount, 0, 999999999);
}
public void SetScore(int amount)
{
_score.Value = Mathf.Clamp(amount, 0, 999999999);
}
public void WarpLevels(int amount)
{
_level += amount;
}
public void LostLife()
{
_lives -= 1;
}
public void AddCore(int amount = 1)
{
_coreCount += amount;
}
public void AddLife(int amount = 1)
{
_lives.Value = Mathf.Clamp(CurrentLives + amount, -1, 99);
}
public void DoGameOver()
{
isGameOver = true;
SceneManager.LoadSceneAsync("Dead");
}
public void DoGameWon()
{
isGameOver = true;
SceneManager.LoadSceneAsync("Win");
}
}