public void LoseHealth(Player source, int magnitude)
{
if (source.IsDead) return;
var args = new HealthChangedEventArgs() { Source = null, Delta = -magnitude };
args.Targets.Add(source);
Emit(GameEvent.BeforeHealthChanged, args);
Trace.Assert(args.Targets.Count == 1);
args.Targets[0].Health += args.Delta;
Trace.TraceInformation("Player {0} lose {1} hp, @ {2} hp", args.Targets[0].Id, -args.Delta, args.Targets[0].Health);
NotificationProxy.NotifyLoseHealth(args.Targets[0], -args.Delta);
GameDelays.Delay(GameDelays.Damage);
try
{
Emit(GameEvent.AfterHealthChanged, args);
}
catch (TriggerResultException)
{
}
}