Files
blackhole-escape/Assets/Assets_And_Scenes/GameManager/GameManager.cs
2022-06-18 15:55:39 +01:00

245 lines
6.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public enum EnemyType
{
ENEMYDUMB,
ENEMYCOWARD,
ENEMYCHASE,
ENEMYDROP
}
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<EnemyType, Dictionary<int, int>> enemyList = new Dictionary<EnemyType, Dictionary<int, int>>();
public AudioMixer currentAudioMixer;
public bool godMode = false;
public int maxLives = 3;
public int lives = 3;
public bool controller;
public int firstLevel = 0;
public int level = 0;
public int blackHoleSize = 0;
public int startCores = 0;
private int _coreCount = 0;
public int coreNeeded = 5;
public bool boss = false;
public bool isGameOver = false;
private void Awake()
{
if (_instance != null && _instance != this)
{
Destroy(this.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 = 1f;
float currentMusicVol = 1f;
float currentSFXVol = 1f;
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 SetupLevel()
{
lives = maxLives;
_coreCount = startCores;
level = firstLevel;
isGameOver = false;
if (enemyList.Count == 0)
{
// Set up the enemy level and count dictionaries
Dictionary<int, int> enemyDumbSetup = new Dictionary<int, int>();
Dictionary<int, int> enemyCowardSetup = new Dictionary<int, int>();
Dictionary<int, int> enemyChaseSetup = new Dictionary<int, int>();
Dictionary<int, int> enemyDropSetup = new Dictionary<int, int>();
// Level 1 numbers
enemyDumbSetup.Add(0, 6);
enemyCowardSetup.Add(0, 0);
enemyChaseSetup.Add(0, 0);
enemyDropSetup.Add(0, 0);
// Level 2 numbers
enemyDumbSetup.Add(1, 8);
enemyCowardSetup.Add(1, 2);
enemyChaseSetup.Add(1, 0);
enemyDropSetup.Add(1, 0);
// Level 3 numbers
enemyDumbSetup.Add(2, 8);
enemyCowardSetup.Add(2, 3);
enemyChaseSetup.Add(2, 1);
enemyDropSetup.Add(2, 0);
// Level 4 numbers
enemyDumbSetup.Add(3, 10);
enemyCowardSetup.Add(3, 3);
enemyChaseSetup.Add(3, 2);
enemyDropSetup.Add(3, 1);
// Add the counts to the enemy type dictionaries
enemyList.Add(EnemyType.ENEMYDUMB, enemyDumbSetup);
enemyList.Add(EnemyType.ENEMYCOWARD, enemyCowardSetup);
enemyList.Add(EnemyType.ENEMYCHASE, enemyChaseSetup);
enemyList.Add(EnemyType.ENEMYDROP, enemyDropSetup);
}
}
public int GetCurrentLevelEnemyTypeCount(EnemyType enemyType)
{
int result;
// Check if the current level is higher than the max we have set up (we should probs cap it)
if (level > enemyList[enemyType].Count - 1)
{
// Get the "last" levels numbers
result = enemyList[enemyType][enemyList[enemyType].Count - 1];
}
else
{
// Get the current levels numbers
result = enemyList[enemyType][level];
}
return result;
}
// Update is called once per frame
void Update()
{
if(_coreCount >= coreNeeded)
{
_coreCount = 0;
level++;
}
BadGuyCount();
}
public void toggleBike()
{
if (controller == true)
{
controller = false;
}
else
{
controller = true;
}
}
public int getCoreCount()
{
return _coreCount;
}
// This is dealt with in the enemy dictionary
private void BadGuyCount()
{
switch (level)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
//Temp until boss added, then add new case 5: with DoGameWon(); and uncomment boss = true;
if (!isGameOver)
{
DoGameWon();
}
//boss = true;
break;
}
}
public void LostLife()
{
lives -= 1;
if (lives <= 0)
{
DoGameOver();
}
}
public int GetLives()
{
return lives;
}
public void AddCore()
{
_coreCount += 1;
}
public void AddLife()
{
lives += 1;
}
public void DoGameOver()
{
isGameOver = true;
SceneManager.LoadScene("Dead");
}
public void DoGameWon()
{
isGameOver = true;
SceneManager.LoadScene("Win");
}
}