This commit is contained in:
Gerard Gascón 2025-04-24 17:29:51 +02:00
commit 3b4c6e0ec6
506 changed files with 434142 additions and 0 deletions

View 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);
}
}