В 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()
{
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При выключении панели (метод Hide): включить анимацию, дождаться завершения анимации, а только потом выключать объект (методом SetActive(false))Event...
Простой контроллер на выход из учетной записи
Есть игровой клиент в котором около 2000 файлов размером от нескольких килобайт до сотен мегабайтВсе файлы бинарные, т