Как каждую секунду вызывать метод?

108
18 марта 2021, 06:30

В WPF/MVVM игре есть модель часов, которые изменяются каждую секунду. А в другой модели описаны свойства игрока - голод и усталость.

Я хочу изменять эти параметры каждую секунду. Как модель игрока может узнать, что в другой модели есть часы? И это вообще нормально - чтобы модели взаимодействовали друг с другом?

Часы:

class TimerData : INotifyPropertyChanged
{
    public TimerData()
    {
        TimeFormat = "Время 09:00 AM";
        Hours = 9;
        Timer = new DispatcherTimer();
        Timer.Interval = new TimeSpan(0, 0, 1);
        Timer.Tick += TimerTick;
        Timer.Start();
    }
    private DispatcherTimer Timer;
    private string _timeFormat;
    public string TimeFormat
    {
        get { return _timeFormat; }
        set
        {
            _timeFormat = value;
            OnPropertyChanged();
        }
    }
    private int _minutes;
    public int Minutes
    {
        get { return _minutes; }
        set
        {
            if (value > -1 && value < 61)
            {
                _minutes = value;
                OnPropertyChanged();
            }
        }
    }
    private int _hours;
    public int Hours
    {
        get { return _hours; }
        set
        {
            if (value > -1 && value < 25)
            {
                _hours = value;
                OnPropertyChanged();
            }
        }
    }
    private void TimerTick(object sender, EventArgs e)
    {
        Minutes++;
        if (Minutes > 59)
        {
            Minutes = 0;
            Hours++;
            if (Hours > 23)
                Hours = 0;
        }
        UpdateTimeFormat();
    }
    private void UpdateTimeFormat()
    {
        TimeFormat = string.Format("Время {0:00}:{1:00} AM", Hours, Minutes);
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName]string prop = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
    }
}

Игрок

public class Parameters : INotifyPropertyChanged
{
    public Parameters()
    {
        Satiety = 30;
        Fatigue = 70;
    }
    private int _satiety;
    public int Satiety
    {
        get { return _satiety; }
        set
        {
            if (value > -1 && value < 101)
            {
                _satiety = value;
                OnPropertyChanged();
            }
        } 
    }
    private int _fatigue;
    public int Fatigue
    {
        get { return _fatigue; }
        set
        {
            if (value > -1 && value < 101)
            {
                _fatigue = value;
                OnPropertyChanged();
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string property = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
    }
    // Как каждую секунду вызывать этот метод?
    private void DecreaseSatiety()
    {
    }
    // Как каждую секунду вызывать этот метод?
    private void DecreaseFatigue()
    {
    }
}
READ ALSO
Как дождаться завершение анимации ? Unity

Как дождаться завершение анимации ? Unity

При выключении панели (метод Hide): включить анимацию, дождаться завершения анимации, а только потом выключать объект (методом SetActive(false))Event...

94
Interceptor и хедер запроса с фронта на Angular к беку .NET Core

Interceptor и хедер запроса с фронта на Angular к беку .NET Core

Простой контроллер на выход из учетной записи

100
Hash сумма для контроля версий файлов

Hash сумма для контроля версий файлов

Есть игровой клиент в котором около 2000 файлов размером от нескольких килобайт до сотен мегабайтВсе файлы бинарные, т

120
mysql join count

mysql join count

Есть запрос:

101