using Godot; /// /// Менеджер игры - управляет состоянием игры /// public partial class GameManager : Node { public static GameManager Instance { get; private set; } = null!; [Signal] public delegate void MoneyChangedEventHandler(decimal newAmount); [Signal] public delegate void DateChangedEventHandler(int year, int month, int day); public decimal Money { get; private set; } = 100000m; public int GameYear { get; private set; } = 1980; public int GameMonth { get; private set; } = 1; public int GameDay { get; private set; } = 1; public override void _Ready() { if (Instance != null && Instance != this) { QueueFree(); return; } Instance = this; } public void AddMoney(decimal amount) { Money += amount; EmitSignal(SignalName.MoneyChanged, Money); } public void SpendMoney(decimal amount) { if (Money >= amount) { Money -= amount; EmitSignal(SignalName.MoneyChanged, Money); } } public void AdvanceTime(int ticks) { GameDay += ticks; if (GameDay > 30) { GameDay = 1; GameMonth++; if (GameMonth > 12) { GameMonth = 1; GameYear++; } } EmitSignal(SignalName.DateChanged, GameYear, GameMonth, GameDay); } }