init
This commit is contained in:
commit
3b4c6e0ec6
506 changed files with 434142 additions and 0 deletions
212
Assets/Scripts/GameController.cs
Normal file
212
Assets/Scripts/GameController.cs
Normal file
|
@ -0,0 +1,212 @@
|
|||
using Cinemachine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
[System.Serializable] public class StartGame : UnityEvent { }
|
||||
|
||||
public class GameController : MonoBehaviour{
|
||||
|
||||
[SerializeField] Vector3 playerStartPos = Vector3.zero;
|
||||
|
||||
[Space]
|
||||
public int numberOfCoins;
|
||||
[SerializeField] TextMeshProUGUI coinsText = default;
|
||||
|
||||
[Space]
|
||||
[SerializeField] Vector3 spawnerExitPosition = Vector3.zero;
|
||||
public List<Vector3> spawnerPositions;
|
||||
|
||||
List<EnemyController> deadEnemies;
|
||||
[SerializeField, Range(0f, 15f)] float timeBetweenSpawns = 7.5f;
|
||||
float currentTime;
|
||||
int currentEnemy;
|
||||
|
||||
public List<EnemyController> enemies = new List<EnemyController>();
|
||||
|
||||
[HideInInspector] public StartGame onStart;
|
||||
bool started;
|
||||
|
||||
[SerializeField] CinemachineVirtualCamera dollyTrackCamera = default;
|
||||
[SerializeField, Range(.1f, 5f)] float timeToStart = 3f;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start(){
|
||||
limboEnemies = new List<Vector3>();
|
||||
deadEnemies = new List<EnemyController>();
|
||||
currentTime = timeBetweenSpawns - 2;
|
||||
AudioManager.instance.Stop("Menu");
|
||||
AudioManager.instance.Play("Intro");
|
||||
StartCoroutine(StartGame());
|
||||
}
|
||||
|
||||
List<Vector3> limboEnemies;
|
||||
|
||||
public void EnemyDeath(EnemyController enemy){
|
||||
enemy.gameObject.SetActive(false);
|
||||
|
||||
foreach(Vector3 spawnPos in spawnerPositions){
|
||||
deadEnemies.Add(enemy);
|
||||
enemy.transform.position = spawnPos + Vector3.up;
|
||||
spawnerPositions.Remove(spawnPos);
|
||||
StartCoroutine(RespawnEnemy(enemy));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void PlayerDeath(PlayerController player){
|
||||
player.gameObject.SetActive(false);
|
||||
player.transform.position = playerStartPos;
|
||||
player.Respawn();
|
||||
player.gameObject.SetActive(true);
|
||||
|
||||
for (int i = 0; i < spawnerPositions.Count; i++){
|
||||
enemies[i].gameObject.SetActive(false);
|
||||
enemies[i].transform.position = spawnerPositions[i] + Vector3.up;
|
||||
enemies[i].OnPlayerDie();
|
||||
enemies[i].gameObject.SetActive(true);
|
||||
enemies[i].directionLooking = Vector3.forward;
|
||||
enemies[i].canMove = false;
|
||||
}
|
||||
|
||||
deadEnemies.Clear();
|
||||
limboEnemies.Clear();
|
||||
currentEnemy = 0;
|
||||
currentTime = timeBetweenSpawns - 2;
|
||||
}
|
||||
|
||||
IEnumerator RespawnEnemy(EnemyController enemy){
|
||||
yield return new WaitForSeconds(.5f);
|
||||
spawnerPositions.Add(enemy.transform.position + Vector3.down);
|
||||
limboEnemies.Remove(enemy.transform.position + Vector3.down);
|
||||
enemy.EnterRespawn();
|
||||
enemy.gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
bool won;
|
||||
|
||||
// Update is called once per frame
|
||||
void Update(){
|
||||
dollyTrackCamera.GetCinemachineComponent<CinemachineTrackedDolly>().m_PathPosition += Time.deltaTime / timeToStart * 2;
|
||||
if(dollyTrackCamera.GetCinemachineComponent<CinemachineTrackedDolly>().m_PathPosition >= 2){
|
||||
dollyTrackCamera.enabled = false;
|
||||
}
|
||||
|
||||
if (started){
|
||||
currentTime += Time.deltaTime;
|
||||
if(currentTime >= timeBetweenSpawns){
|
||||
if(currentEnemy < enemies.Count){
|
||||
enemies[currentEnemy].positionToGo = new Vector3(spawnerExitPosition.x, enemies[currentEnemy].positionToGo.y, spawnerExitPosition.z);
|
||||
enemies[currentEnemy].targetAngle = -90f;
|
||||
enemies[currentEnemy].directionLooking = Vector3.left;
|
||||
enemies[currentEnemy].canMove = true;
|
||||
currentEnemy++;
|
||||
currentTime = 0;
|
||||
}else if(deadEnemies.Count != 0){
|
||||
EnemyController enemy = deadEnemies[0];
|
||||
//EnemyController enemy = deadEnemies.Dequeue();
|
||||
enemy.Respawn();
|
||||
enemy.positionToGo = new Vector3(spawnerExitPosition.x, enemy.positionToGo.y, spawnerExitPosition.z);
|
||||
enemy.targetAngle = -90f;
|
||||
enemy.directionLooking = Vector3.left;
|
||||
enemy.canMove = true;
|
||||
deadEnemies.Remove(enemy);
|
||||
currentTime = 0;
|
||||
}
|
||||
}else if(deadEnemies.Count == 0 && currentEnemy >= enemies.Count){
|
||||
currentTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
coinsText.text = "x" + numberOfCoins;
|
||||
|
||||
if(numberOfCoins == 0 && !won){
|
||||
GameOverCanvas.instance.Win();
|
||||
won = true;
|
||||
}
|
||||
}
|
||||
|
||||
int currentScale;
|
||||
public void PlayButtonScale(){
|
||||
switch (currentScale){
|
||||
case 0:
|
||||
AudioManager.instance.PlayOneShot("Scale1");
|
||||
currentScale++;
|
||||
break;
|
||||
case 1:
|
||||
AudioManager.instance.PlayOneShot("Scale2");
|
||||
currentScale++;
|
||||
break;
|
||||
case 2:
|
||||
AudioManager.instance.PlayOneShot("Scale3");
|
||||
currentScale++;
|
||||
break;
|
||||
case 3:
|
||||
AudioManager.instance.PlayOneShot("Scale4");
|
||||
currentScale++;
|
||||
break;
|
||||
case 4:
|
||||
AudioManager.instance.PlayOneShot("Scale2");
|
||||
currentScale++;
|
||||
break;
|
||||
case 5:
|
||||
AudioManager.instance.PlayOneShot("Scale3");
|
||||
currentScale++;
|
||||
break;
|
||||
case 6:
|
||||
AudioManager.instance.PlayOneShot("Scale4");
|
||||
currentScale++;
|
||||
break;
|
||||
case 7:
|
||||
AudioManager.instance.PlayOneShot("Scale5");
|
||||
currentScale++;
|
||||
break;
|
||||
case 8:
|
||||
AudioManager.instance.PlayOneShot("Scale3");
|
||||
currentScale++;
|
||||
break;
|
||||
case 9:
|
||||
AudioManager.instance.PlayOneShot("Scale4");
|
||||
currentScale++;
|
||||
break;
|
||||
case 10:
|
||||
AudioManager.instance.PlayOneShot("Scale5");
|
||||
currentScale++;
|
||||
break;
|
||||
case 11:
|
||||
AudioManager.instance.PlayOneShot("Scale6");
|
||||
currentScale++;
|
||||
break;
|
||||
case 12:
|
||||
AudioManager.instance.PlayOneShot("Scale5");
|
||||
currentScale++;
|
||||
break;
|
||||
case 13:
|
||||
AudioManager.instance.PlayOneShot("Scale4");
|
||||
currentScale++;
|
||||
break;
|
||||
case 14:
|
||||
AudioManager.instance.PlayOneShot("Scale3");
|
||||
currentScale++;
|
||||
break;
|
||||
case 15:
|
||||
AudioManager.instance.PlayOneShot("Scale2");
|
||||
currentScale = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator StartGame(){
|
||||
yield return new WaitForSeconds(timeToStart + 2.5f);
|
||||
onStart.Invoke();
|
||||
AudioManager.instance.Play("Main");
|
||||
started = true;
|
||||
}
|
||||
|
||||
void OnDrawGizmos(){
|
||||
Gizmos.color = Color.green;
|
||||
Gizmos.DrawSphere(spawnerExitPosition, .2f);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue