feat: add event bus

This commit is contained in:
k0t9i
2023-01-31 14:45:40 +04:00
parent ea6778a3bd
commit b8b92b7cf8
14 changed files with 240 additions and 48 deletions

View File

@ -1,6 +1,7 @@
using Client.Application.Extensions;
using Client.Domain.Common;
using Client.Domain.Entities;
using Client.Domain.Events;
using Client.Domain.ValueObjects;
using Client.Domain.ViewModels;
using System;
@ -17,7 +18,13 @@ using System.Windows.Media;
namespace Client.Application.ViewModels
{
public class MainViewModel : NotifyPropertyChanged, MainViewModelInterface
public class MainViewModel :
NotifyPropertyChanged,
MainViewModelInterface,
EventHandlerInterface<HeroCreatedEvent>,
EventHandlerInterface<HeroDeletedEvent>,
EventHandlerInterface<NpcCreatedEvent>,
EventHandlerInterface<NpcDeletedEvent>
{
public void AddChatMessage(ChatMessage chatMessage)
@ -25,32 +32,6 @@ namespace Client.Application.ViewModels
ChatMessages.Add(new ChatMessageViewModel(chatMessage));
}
public void CreateHero(Hero hero)
{
Hero = new HeroSummaryInfoViewModel(hero);
this.hero = hero;
OnPropertyChanged("Hero");
}
public void DeleteHero()
{
Hero = null;
hero = null;
OnPropertyChanged("Hero");
}
public void AddNpc(NPC npc)
{
if (hero != null)
{
Creatures.Add(new NpcListViewModel(npc, hero));
}
}
public void RemoveNpc(NPC npc)
{
Creatures.RemoveAll(x => x.Id == npc.Id);
}
public void AddPlayer(Player player)
{
if (hero != null)
@ -77,6 +58,33 @@ namespace Client.Application.ViewModels
Drops.RemoveAll(x => x.Id == drop.Id);
}
public void Handle(HeroCreatedEvent @event)
{
Hero = new HeroSummaryInfoViewModel(@event.Hero);
hero = @event.Hero;
OnPropertyChanged("Hero");
}
public void Handle(HeroDeletedEvent @event)
{
Hero = null;
hero = null;
OnPropertyChanged("Hero");
}
public void Handle(NpcCreatedEvent @event)
{
if (hero != null)
{
Creatures.Add(new NpcListViewModel(@event.NPC, hero));
}
}
public void Handle(NpcDeletedEvent @event)
{
Creatures.RemoveAll(x => x.Id == @event.Id);
}
public ObservableCollection<ChatMessageViewModel> ChatMessages { get; } = new ObservableCollection<ChatMessageViewModel>();
public ObservableCollection<CreatureListViewModelInterface> Creatures { get; } = new ObservableCollection<CreatureListViewModelInterface>();
public ObservableCollection<DropListViewModel> Drops { get; } = new ObservableCollection<DropListViewModel>();