Files
MagicDog/Assets/Scripts/GameManager.cs
2026-04-14 16:37:06 +02:00

130 lines
3.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Assertions;
public class GameManager : MonoBehaviour
{
[SerializeField] private Player _player;
private float _lastTimeof2Seconds;
[SerializeField] private TMPro.TextMeshProUGUI _timer;
[SerializeField] private TMPro.TextMeshProUGUI _gameOver;
[SerializeField] private GameObject _potionPrefab;
private Vector2 _potionGroundSpawnRange = new Vector2(-48f, 48f);
private int _healthDecrease = -2;
[SerializeField] private GameObject _keyPrefab;
private HiddenObject _keyInstanceScript;
private GameObject _keyInstance;
private bool isKeyCollected = false;
[SerializeField] private GameObject _chestClosedPrefab;
[SerializeField] private GameObject _chestOpenPrefab;
private GameObject _chestInstance;
private void Start()
{
Assert.IsNotNull(_player);
_lastTimeof2Seconds = Time.time;
_gameOver.enabled = false;
SpawnPotion();
Assert.IsNotNull(_keyPrefab);
_keyInstance = Instantiate(_keyPrefab,
new Vector3(
Random.Range(_potionGroundSpawnRange.x, _potionGroundSpawnRange.y),
0.5f,
Random.Range(_potionGroundSpawnRange.x, _potionGroundSpawnRange.y)
),
Quaternion.identity);
_keyInstanceScript = _keyInstance.transform.GetChild(0).gameObject.GetComponent<HiddenObject>();
Assert.IsNotNull(_keyInstance);
Assert.IsNotNull(_chestClosedPrefab);
_chestInstance = Instantiate(_chestClosedPrefab,
new Vector3(
Random.Range(_potionGroundSpawnRange.x, _potionGroundSpawnRange.y),
0.5f,
Random.Range(_potionGroundSpawnRange.x, _potionGroundSpawnRange.y)
),
Quaternion.LookRotation(Vector3.up));
}
public void CollectKey()
{
isKeyCollected = true;
Debug.Log("Collected Key");
}
public void OpenChest()
{
if (!isKeyCollected)
{
Debug.LogWarning("Key not collected");
return;
}
Instantiate(
_chestOpenPrefab,
new Vector3(
_chestInstance.transform.position.x,
0.5f,
_chestInstance.transform.position.z
),
Quaternion.LookRotation(Vector3.up)
);
GameOver(true);
}
public void SpawnPotion()
{
Assert.IsNotNull(_potionPrefab);
Instantiate(_potionPrefab,
new Vector3(
Random.Range(_potionGroundSpawnRange.x, _potionGroundSpawnRange.y),
0.5f,
Random.Range(_potionGroundSpawnRange.x, _potionGroundSpawnRange.y)),
Quaternion.identity);
}
private void Update()
{
_timer.SetText(((int)(Time.time)).ToString());
if (Time.time - _lastTimeof2Seconds > 2)
{
Debug.Log("Decreasing health");
_lastTimeof2Seconds = Time.time;
_player.AddHealth(_healthDecrease);
}
if (_player.GetHealth() <= 0)
{
GameOver();
}
if (Input.GetKeyDown(KeyCode.R))
{
_keyInstanceScript.ShowObjectForSeconds(3);
}
}
private void GameOver(bool isWon = false)
{
_player.SetIsMovementEnabled(false);
_healthDecrease = 0;
if (isWon)
{
_gameOver.SetText("You won!");
}
else
{
_gameOver.SetText("You lost!");
}
_gameOver.enabled = true;
}
}