fix: fix memory leaks
This commit is contained in:
parent
4e2e108076
commit
914f6ba20f
@ -62,6 +62,14 @@ namespace Client.Application.ViewModels
|
||||
this.pathMover = pathMover;
|
||||
}
|
||||
|
||||
public void UnsubscribeAll()
|
||||
{
|
||||
creature.PropertyChanged -= Creature_PropertyChanged;
|
||||
creature.Transform.Position.PropertyChanged -= Position_PropertyChanged;
|
||||
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||
hero.PropertyChanged -= Hero_PropertyChanged;
|
||||
}
|
||||
|
||||
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
OnPropertyChanged("Distance");
|
||||
|
@ -109,6 +109,16 @@ namespace Client.Application.ViewModels
|
||||
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
||||
}
|
||||
|
||||
public void UnsubscribeAll()
|
||||
{
|
||||
creature.PropertyChanged -= Creature_PropertyChanged;
|
||||
creature.Transform.PropertyChanged -= Transform_PropertyChanged;
|
||||
creature.Transform.Position.PropertyChanged -= Position_PropertyChanged;
|
||||
creature.VitalStats.PropertyChanged -= VitalStats_PropertyChanged;
|
||||
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||
hero.PropertyChanged -= Hero_PropertyChanged;
|
||||
}
|
||||
|
||||
private void VitalStats_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "Hp" || e.PropertyName == "MaxHp")
|
||||
|
@ -92,6 +92,13 @@ namespace Client.Application.ViewModels
|
||||
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
||||
}
|
||||
|
||||
public void UnsubscribeAll()
|
||||
{
|
||||
drop.PropertyChanged -= Drop_PropertyChanged;
|
||||
drop.Transform.Position.PropertyChanged -= DropPosition_PropertyChanged;
|
||||
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||
}
|
||||
|
||||
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
OnPropertyChanged("Distance");
|
||||
|
@ -73,24 +73,31 @@ namespace Client.Application.ViewModels
|
||||
this.hero = hero;
|
||||
this.worldHandler = worldHandler;
|
||||
this.pathMover = pathMover;
|
||||
drop.PropertyChanged += Creature_PropertyChanged;
|
||||
drop.Transform.Position.PropertyChanged += Position_PropertyChanged;
|
||||
drop.PropertyChanged += Drop_PropertyChanged;
|
||||
drop.Transform.Position.PropertyChanged += DropPosition_PropertyChanged;
|
||||
hero.Transform.Position.PropertyChanged += HeroPosition_PropertyChanged;
|
||||
MouseLeftClickCommand = new RelayCommand(OnMouseLeftClick);
|
||||
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
||||
}
|
||||
|
||||
public void UnsubscribeAll()
|
||||
{
|
||||
drop.PropertyChanged -= Drop_PropertyChanged;
|
||||
drop.Transform.Position.PropertyChanged -= DropPosition_PropertyChanged;
|
||||
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||
}
|
||||
|
||||
private void HeroPosition_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
OnPropertyChanged("Position");
|
||||
}
|
||||
|
||||
private void Position_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||
private void DropPosition_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
OnPropertyChanged("Position");
|
||||
}
|
||||
|
||||
private void Creature_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||
private void Drop_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "Name" || e.PropertyName == "Amount")
|
||||
{
|
||||
|
@ -105,6 +105,7 @@ namespace Client.Application.ViewModels
|
||||
}
|
||||
else if (target != null && hero.Target == null)
|
||||
{
|
||||
target.UnsubscribeAll();
|
||||
target = null;
|
||||
OnPropertyChanged("Target");
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ using Client.Domain.Entities;
|
||||
using Client.Domain.Events;
|
||||
using Client.Domain.Service;
|
||||
using Client.Domain.ValueObjects;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
@ -72,7 +73,12 @@ namespace Client.Application.ViewModels
|
||||
|
||||
public void Handle(CreatureDeletedEvent @event)
|
||||
{
|
||||
Creatures.RemoveAll(x => x.Id == @event.Id);
|
||||
var creature = Creatures.Where(x => x.Id == @event.Id).FirstOrDefault();
|
||||
if (creature != null)
|
||||
{
|
||||
creature.UnsubscribeAll();
|
||||
Creatures.Remove(creature);
|
||||
}
|
||||
RemoveCreature(@event.Id);
|
||||
}
|
||||
|
||||
@ -87,8 +93,18 @@ namespace Client.Application.ViewModels
|
||||
|
||||
public void Handle(DropDeletedEvent @event)
|
||||
{
|
||||
Drops.RemoveAll(x => x.Id == @event.Id);
|
||||
Map.Drops.RemoveAll(x => x.Id == @event.Id);
|
||||
var drop = Drops.Where(x => x.Id == @event.Id).FirstOrDefault();
|
||||
if (drop != null)
|
||||
{
|
||||
drop.UnsubscribeAll();
|
||||
Drops.Remove(drop);
|
||||
}
|
||||
var mapDrop = Map.Drops.Where(x => x.Id == @event.Id).FirstOrDefault();
|
||||
if (mapDrop != null)
|
||||
{
|
||||
mapDrop.UnsubscribeAll();
|
||||
Map.Drops.Remove(mapDrop);
|
||||
}
|
||||
}
|
||||
|
||||
public void Handle(ChatMessageCreatedEvent @event)
|
||||
@ -156,7 +172,12 @@ namespace Client.Application.ViewModels
|
||||
|
||||
private void RemoveCreature(uint id)
|
||||
{
|
||||
Map.Creatures.RemoveAll(x => x.Id == id);
|
||||
var creature = Map.Creatures.Where(x => x.Id == id).FirstOrDefault();
|
||||
if (creature != null)
|
||||
{
|
||||
creature.UnsubscribeAll();
|
||||
Map.Creatures.Remove(creature);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnToggleAI(object? sender)
|
||||
|
@ -230,11 +230,16 @@ namespace Client.Application.ViewModels
|
||||
{
|
||||
foreach (var item in e.OldItems)
|
||||
{
|
||||
Path[0].UnsubscribeAll();
|
||||
Path.RemoveAt(0);
|
||||
}
|
||||
}
|
||||
else if (e.Action == NotifyCollectionChangedAction.Reset)
|
||||
{
|
||||
foreach (var item in Path)
|
||||
{
|
||||
item.UnsubscribeAll();
|
||||
}
|
||||
Path.RemoveAll();
|
||||
}
|
||||
}
|
||||
|
@ -69,6 +69,11 @@ namespace Client.Application.ViewModels
|
||||
hero.Transform.Position.PropertyChanged += HeroPosition_PropertyChanged;
|
||||
}
|
||||
|
||||
public void UnsubscribeAll()
|
||||
{
|
||||
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||
}
|
||||
|
||||
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
OnPropertyChanged("From");
|
||||
|
@ -38,6 +38,14 @@ namespace Client.Application.ViewModels
|
||||
this.hero = hero;
|
||||
}
|
||||
|
||||
public void UnsubscribeAll()
|
||||
{
|
||||
creature.PropertyChanged -= Creature_PropertyChanged;
|
||||
creature.Transform.Position.PropertyChanged -= Position_PropertyChanged;
|
||||
creature.VitalStats.PropertyChanged -= VitalStats_PropertyChanged;
|
||||
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||
}
|
||||
|
||||
private void VitalStats_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "Hp")
|
||||
|
Loading…
Reference in New Issue
Block a user