public void ReportInstruction(IUnitReportInstruction reportInstruction) { if (reportInstruction == null) { throw new ArgumentNullException("reportInstruction"); } Diagnostics.Assert(this.reportInstructions != null); BattleActionUpdateInstruction battleActionUpdateInstruction = reportInstruction as BattleActionUpdateInstruction; if (battleActionUpdateInstruction != null) { if (this.reportCopy != null) { this.reportCopy.RemoveAll((IUnitReportInstruction instruction) => instruction.UnitGUID == reportInstruction.UnitGUID && instruction is BattleActionUpdateInstruction && (instruction as BattleActionUpdateInstruction).BattleActionName == battleActionUpdateInstruction.BattleActionName); } this.reportInstructions.RemoveAll((IUnitReportInstruction instruction) => instruction.UnitGUID == reportInstruction.UnitGUID && instruction is BattleActionUpdateInstruction && (instruction as BattleActionUpdateInstruction).BattleActionName == battleActionUpdateInstruction.BattleActionName); } BattleEffectUpdateInstruction battleEffectUpdateInstruction = reportInstruction as BattleEffectUpdateInstruction; if (battleEffectUpdateInstruction != null && !battleEffectUpdateInstruction.IsCumulable) { if (this.reportCopy != null) { this.reportCopy.RemoveAll((IUnitReportInstruction instruction) => instruction.UnitGUID == reportInstruction.UnitGUID && instruction is BattleEffectUpdateInstruction && (instruction as BattleEffectUpdateInstruction).BattleEffectName == battleEffectUpdateInstruction.BattleEffectName && (instruction as BattleEffectUpdateInstruction).TargetGUID == battleEffectUpdateInstruction.TargetGUID && (instruction as BattleEffectUpdateInstruction).TargetWorldPosition == battleEffectUpdateInstruction.TargetWorldPosition); } this.reportInstructions.RemoveAll((IUnitReportInstruction instruction) => instruction.UnitGUID == reportInstruction.UnitGUID && instruction is BattleEffectUpdateInstruction && (instruction as BattleEffectUpdateInstruction).BattleEffectName == battleEffectUpdateInstruction.BattleEffectName && (instruction as BattleEffectUpdateInstruction).TargetGUID == battleEffectUpdateInstruction.TargetGUID && (instruction as BattleEffectUpdateInstruction).TargetWorldPosition == battleEffectUpdateInstruction.TargetWorldPosition); } if (this.reportCopy != null) { this.reportCopy.Add(reportInstruction); } this.reportInstructions.Add(reportInstruction); }
public void DoReportInstructions(RoundReport currentReport, bool postRound = false) { if (currentReport == null) { throw new ArgumentNullException("currentReport"); } Diagnostics.Assert(this.reportInstructions != null); Diagnostics.Assert(this.Simulation != null); for (int i = 0; i < this.reportInstructions.Count; i++) { IUnitReportInstruction unitReportInstruction = this.reportInstructions[i]; Diagnostics.Assert(unitReportInstruction != null); BattleSimulationUnit battleUnit = this.Simulation.GetBattleUnit(unitReportInstruction.UnitGUID); currentReport.DoReportInstruction(battleUnit, unitReportInstruction, postRound); } this.reportInstructions.Clear(); }
public override Alteration.Response HandleEvent(StaticString eventName, params object[] parameters) { if (eventName == Alteration.Events.BattleEnd) { this.HideHealthStatus(); } else if (eventName == Alteration.Events.RoundStart || eventName == Alteration.Events.TargetingPhaseEnd || eventName == Alteration.Events.DeploymentEnd) { if (!this.WorldBattleUnit.EncounterUnit.IsOnBattlefield) { return(Alteration.Response.Pass); } if (this.isHealthStatusDisplayed) { return(Alteration.Response.Pass); } this.battleHealthStatus.SetMaxHealth(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.MaximumHealth)); this.battleHealthStatus.SetCurrentHealth(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.Health)); this.battleHealthStatus.SetCurrentAttackingHitInfo(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.AttackingHitInfo)); this.battleHealthStatus.SetCurrentMoral(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.BattleMorale)); this.battleHealthStatus.SetMaxArmor(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.MaximumArmor)); this.battleHealthStatus.SetCurrentArmor(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.Armor)); if (this.WorldBattleUnit.Unit.Garrison.Empire != null) { Color factionColor = this.WorldBattleUnit.Unit.Garrison.Empire.Color; IPlayerControllerRepositoryService service = Services.GetService <IGameService>().Game.Services.GetService <IPlayerControllerRepositoryService>(); if (service.ActivePlayerController != null && service.ActivePlayerController.Empire != null) { if (service.ActivePlayerController.Empire.Index != this.WorldBattleUnit.Unit.Garrison.Empire.Index) { Army army = this.WorldBattleUnit.Unit.Garrison as Army; if (army != null && army.IsPrivateers) { factionColor = global::Game.PrivateersColor; } } else { this.battleHealthStatus.AddRemoveAlteration(this.WorldBattleUnit.EncounterUnit.Strategy, true, -1f, true); this.isStrategyDisplayed = true; } } this.battleHealthStatus.SetFactionColor(factionColor); } if (!this.WorldBattleUnit.Dead) { this.ShowHealthStatus(); } } else if (eventName == Alteration.Events.UnitDead) { this.HideHealthStatus(); } else if (eventName == Alteration.Events.UnitRevived) { this.ShowHealthStatus(); } else if (eventName == Alteration.Events.AlterationUnitStatChange) { if (parameters == null || parameters.Length < 4) { return(Alteration.Response.Pass); } StaticString x = (StaticString)parameters[0]; float num = (float)parameters[1]; Mathf.Abs(num); bool critical = (bool)parameters[3]; if (x == SimulationProperties.Health) { this.battleHealthStatus.ChangeHealth(num, critical); } else if (x == SimulationProperties.Armor) { if (num > 0f) { this.battleHealthStatus.SetMaxArmor(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.MaximumArmor)); this.battleHealthStatus.SetCurrentArmor(this.WorldBattleUnit.EncounterUnit.GetPropertyValue(SimulationProperties.Armor)); } this.battleHealthStatus.ChangeArmor(num, critical); } else if (x == SimulationProperties.AttackingHitInfo) { this.battleHealthStatus.ChangeAttackingHitInfo(num); } else if (x == SimulationProperties.BattleMorale) { this.battleHealthStatus.ChangeMoral(num, critical); } } else if (eventName == Alteration_UnitStatChange.EventAltitude) { if (parameters == null || parameters.Length < 1) { return(Alteration.Response.Pass); } if (!this.unit.SimulationObject.Tags.Contains(DownloadableContent16.SeafaringUnit)) { bool flag = (bool)parameters[0]; float altitudeDifference = 0f; if (flag) { altitudeDifference = (float)parameters[1]; } this.DisplayAltitudeBonus(flag, altitudeDifference); } } else if (eventName == Alteration.Events.AlterationStatusFeedback) { if (parameters.Length < 1) { return(Alteration.Response.Pass); } bool add = true; float duration = -1f; IUnitReportInstruction unitReportInstruction = null; string alterationName = (string)parameters[0]; if (parameters.Length >= 2) { if (parameters[1] is bool) { add = (bool)parameters[1]; if (parameters.Length >= 3) { if (parameters[2] is float) { duration = (float)parameters[2]; if (parameters.Length >= 4 && parameters[3] is IUnitReportInstruction) { unitReportInstruction = (IUnitReportInstruction)parameters[3]; } } else if (parameters[2] is IUnitReportInstruction) { unitReportInstruction = (IUnitReportInstruction)parameters[2]; } } } else if (parameters[1] is float) { duration = (float)parameters[1]; if (parameters.Length >= 3 && parameters[2] is IUnitReportInstruction) { unitReportInstruction = (IUnitReportInstruction)parameters[2]; } } else if (parameters[1] is IUnitReportInstruction) { unitReportInstruction = (IUnitReportInstruction)parameters[1]; } } bool isCumulable = true; if (unitReportInstruction != null && unitReportInstruction is BattleEffectUpdateInstruction) { isCumulable = (unitReportInstruction as BattleEffectUpdateInstruction).IsCumulable; } this.battleHealthStatus.AddRemoveAlteration(alterationName, add, duration, isCumulable); } else if (eventName == Alteration.Events.AlterationUnitMove) { if (parameters.Length < 1) { return(Alteration.Response.Pass); } if ((int)parameters[0] == 0) { } } else if (eventName == Alteration.Events.UnitStrategyChanged) { if (!this.isStrategyDisplayed) { return(Alteration.Response.Pass); } if (parameters.Length < 2) { return(Alteration.Response.Pass); } StaticString x2 = (StaticString)parameters[0]; StaticString staticString = (StaticString)parameters[1]; if (x2 == staticString) { return(Alteration.Response.Pass); } if (x2 != null) { this.battleHealthStatus.AddRemoveAlteration(x2, false, -1f, true); } if (staticString != null) { this.battleHealthStatus.AddRemoveAlteration(staticString, true, -1f, true); } } else if (eventName == Alteration.Events.UnitPotentialTarget) { if (parameters.Length < 3) { return(Alteration.Response.Pass); } bool add2 = (bool)parameters[0]; UnitAvailableTarget.TargetAccessibilityType targetAccessibilityType = (UnitAvailableTarget.TargetAccessibilityType)((int)parameters[1]); bool flag2 = (bool)parameters[2]; string alterationName2 = "AvailableTarget" + targetAccessibilityType.ToString() + ((!flag2) ? string.Empty : "Ally"); this.battleHealthStatus.AddRemoveAlteration(alterationName2, add2, -1f, true); } else if (eventName == Alteration.Events.UnitPotentialOpportunityTarget) { if (parameters.Length < 2) { return(Alteration.Response.Pass); } bool add3 = (bool)parameters[0]; bool flag3 = (bool)parameters[1]; string alterationName3 = "AvailableOpportunityTarget" + ((!flag3) ? string.Empty : "Ally"); this.battleHealthStatus.AddRemoveAlteration(alterationName3, add3, -1f, true); } return(Alteration.Response.Pass); }