first commit
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class GameManager : MonoBehaviour
|
||||
{
|
||||
public CaptureZone[] zones;
|
||||
public TerritoryUI territoryUI;
|
||||
public GameObject winPanel;
|
||||
public Text winText;
|
||||
public int scoreLimit = 100;
|
||||
|
||||
private bool gameOver;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Time.timeScale = 1f;
|
||||
|
||||
if (territoryUI != null)
|
||||
{
|
||||
territoryUI.HideGameOver();
|
||||
}
|
||||
|
||||
SubscribeToZones();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (gameOver)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (territoryUI != null)
|
||||
{
|
||||
territoryUI.UpdateZoneStatus(zones);
|
||||
}
|
||||
|
||||
CheckVictoryConditions();
|
||||
}
|
||||
|
||||
private void SubscribeToZones()
|
||||
{
|
||||
if (zones == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < zones.Length; i++)
|
||||
{
|
||||
if (zones[i] == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
zones[i].onCapturedByPlayer += OnZoneCaptured;
|
||||
zones[i].onCapturedByEnemy += OnZoneCaptured;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (zones == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < zones.Length; i++)
|
||||
{
|
||||
if (zones[i] == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
zones[i].onCapturedByPlayer -= OnZoneCaptured;
|
||||
zones[i].onCapturedByEnemy -= OnZoneCaptured;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnZoneCaptured(CaptureZone zone)
|
||||
{
|
||||
CheckVictoryConditions();
|
||||
}
|
||||
|
||||
private void CheckVictoryConditions()
|
||||
{
|
||||
if (zones == null || zones.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool allPlayer = true;
|
||||
bool allEnemy = true;
|
||||
|
||||
for (int i = 0; i < zones.Length; i++)
|
||||
{
|
||||
if (zones[i] == null)
|
||||
{
|
||||
allPlayer = false;
|
||||
allEnemy = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
allPlayer &= zones[i].GetOwner() == CaptureZone.Owner.Player;
|
||||
allEnemy &= zones[i].GetOwner() == CaptureZone.Owner.Enemy;
|
||||
}
|
||||
|
||||
if (allPlayer)
|
||||
{
|
||||
GameOver("Победа игрока: все зоны захвачены!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (allEnemy)
|
||||
{
|
||||
GameOver("Победа врага: все зоны потеряны!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ResourceManager.Instance != null && ResourceManager.Instance.playerScore >= scoreLimit)
|
||||
{
|
||||
GameOver("Победа игрока: достигнут лимит очков!");
|
||||
}
|
||||
}
|
||||
|
||||
private void GameOver(string message)
|
||||
{
|
||||
if (gameOver)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gameOver = true;
|
||||
|
||||
if (territoryUI != null)
|
||||
{
|
||||
territoryUI.ShowGameOver(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (winPanel != null)
|
||||
{
|
||||
winPanel.SetActive(true);
|
||||
}
|
||||
|
||||
if (winText != null)
|
||||
{
|
||||
winText.text = message;
|
||||
}
|
||||
}
|
||||
|
||||
Time.timeScale = 0f;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user