Files
PIM_Laba3/Assets/Scripts/GameSession.cs
T
2026-05-25 23:10:02 +03:00

86 lines
2.1 KiB
C#

using System.Collections;
using UnityEngine;
public class GameSession : MonoBehaviour
{
[TextArea]
public string hintText = "WASD move SHIFT sprint SPACE jump LMB fire R reload 1/2/3 or wheel switch";
[TextArea]
public string objectiveIntroText = "Clear the turrets, use cover, then push the boss platform.";
public float introMessageDuration = 4.5f;
private HUDController _hud;
private PlayerHealth _playerHealth;
private Coroutine _centerMessageRoutine;
private void Awake()
{
_hud = FindObjectOfType<HUDController>(true);
_playerHealth = FindObjectOfType<PlayerHealth>(true);
}
private void OnEnable()
{
EnemyTarget.ObjectiveCountChanged += HandleObjectiveCountChanged;
}
private void OnDisable()
{
EnemyTarget.ObjectiveCountChanged -= HandleObjectiveCountChanged;
}
private void Start()
{
EnemyTarget.RecalculateObjectivesInScene();
if (_hud == null)
{
return;
}
_hud.HideOverlay();
_hud.SetHint(hintText);
_hud.SetCenterMessage(objectiveIntroText);
_hud.SetObjectiveCount(EnemyTarget.RemainingObjectives);
if (!string.IsNullOrWhiteSpace(objectiveIntroText) && introMessageDuration > 0f)
{
_centerMessageRoutine = StartCoroutine(ClearCenterMessageAfterDelay());
}
if (_playerHealth != null)
{
_hud.SetHealth(_playerHealth.CurrentHealth, _playerHealth.maxHealth);
}
}
private void HandleObjectiveCountChanged(int remaining)
{
if (_hud == null)
{
return;
}
_hud.SetObjectiveCount(remaining);
if (remaining <= 0)
{
_hud.ShowVictoryScreen();
_hud.SetCenterMessage("Mission Complete");
}
}
private IEnumerator ClearCenterMessageAfterDelay()
{
yield return new WaitForSeconds(introMessageDuration);
if (_hud != null && EnemyTarget.RemainingObjectives > 0)
{
_hud.SetCenterMessage(string.Empty);
}
_centerMessageRoutine = null;
}
}