60 lines
1.5 KiB
C#
60 lines
1.5 KiB
C#
using Godot;
|
|
|
|
/// <summary>
|
|
/// Менеджер игры - управляет состоянием игры
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|