public Coroner(BoundDamageInfo info) { DamageInfo = info; AnalyzeDeath(info); HandleMinionDeath(info); AssignKillPhrase(); AssignSpecialPhrase(); }
public void Setup() { _arena = new Arena(); _avengers = new Team("Avengers", null); _player1 = new Player(null, "Player 1", CanonicalString.Null, CanonicalString.Null, CanonicalString.Null, new UI.PlayerControls()); _player2 = new Player(null, "Player 2", CanonicalString.Null, CanonicalString.Null, CanonicalString.Null, new UI.PlayerControls()); _player3 = new Player(null, "Player 3", CanonicalString.Null, CanonicalString.Null, CanonicalString.Null, new UI.PlayerControls()); _player2.AssignTeam(_avengers); _player3.AssignTeam(_avengers); _gob1 = new Gob { ID = 10, Owner = _player1, MaxDamageLevel = 100, Arena = _arena }; _gob1DamagedBy2 = new Gob { ID = 11, Owner = _player1, MaxDamageLevel = 100, Arena = _arena }; _gob2 = new Gob { ID = 2, Owner = _player2, MaxDamageLevel = 100, Arena = _arena }; _gob3 = new Gob { ID = 3, Owner = _player3, MaxDamageLevel = 100, Arena = _arena }; _gobNature = new Gob { ID = 4, Owner = null, MaxDamageLevel = 100, Arena = _arena }; _info1Hit1 = new DamageInfo(_gob1).Bind(_gob1); _info2Hit1 = new DamageInfo(_gob2).Bind(_gob1); _info3Hit2 = new DamageInfo(_gob3).Bind(_gob2); _infoNatureHit1 = new DamageInfo(_gobNature).Bind(_gob1); _arena.TotalTime = TimeSpan.FromSeconds(10); _gob1DamagedBy2.InflictDamage(10, new DamageInfo(_gob2)); _info1DamagedBy2 = DamageInfo.Unspecified.Bind(_gob1DamagedBy2); }
private void HandleMinionDeath(BoundDamageInfo info) { if (Game != null && Game.NetworkMode == NetworkMode.Client) return; if (KilledSpectator == null || !KilledSpectator.Minions.Contains(info.Target)) return; switch (DeathType) { default: throw new ApplicationException("Unexpected DeathType " + DeathType); case DeathTypeType.Accident: break; case DeathTypeType.TeamKill: break; case DeathTypeType.Kill: KillerSpectator.ArenaStatistics.Kills++; KillerSpectator.ArenaStatistics.KillsWithoutDying++; if (KillerSpectator.Team != null) { KillerSpectator.Team.ArenaStatistics.Kills++; KillerSpectator.Team.ArenaStatistics.KillsWithoutDying++; } break; } KilledSpectator.ArenaStatistics.Deaths++; KilledSpectator.ArenaStatistics.Lives--; KilledSpectator.ArenaStatistics.KillsWithoutDying = 0; if (KilledSpectator.Team != null) { KilledSpectator.Team.ArenaStatistics.Deaths++; KilledSpectator.Team.ArenaStatistics.Lives--; KilledSpectator.Team.ArenaStatistics.KillsWithoutDying = 0; } }
private void AnalyzeDeath(BoundDamageInfo info) { Action markAsSuicide = () => { DeathType = DeathTypeType.Accident; KillerSpectator = null; }; Action<Spectator> markAsTeamKill = teamKiller => { DeathType = DeathTypeType.TeamKill; KillerSpectator = teamKiller; }; Action<Spectator> markAsKill = killer => { DeathType = DeathTypeType.Kill; KillerSpectator = killer; }; if (info.SourceType == BoundDamageInfo.SourceTypeType.EnemyPlayer) markAsKill(info.Cause.Owner); else if (info.Target.LastDamagerOrNull != null) markAsKill(info.Target.LastDamagerOrNull); else if (info.SourceType == BoundDamageInfo.SourceTypeType.OwnTeamPlayer) markAsTeamKill(info.Cause.Owner); else markAsSuicide(); KilledSpectator = info.Target.Owner; }