const float fps60 = 0.0166f; // length of frame at 60fps void Awake() { if (main == null) { main = this; } }
protected float IsMyBattleEffectAppliedOnTarget(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget) { if (potentialTarget.Unit != null) { IEnumerable <BattleUnitActionController.UnitAction> availableActions; if (potentialTarget.Unit.Contender.Group == unit.Contender.Group) { availableActions = this.battleSimulation.BattleUnitActionController.GetAvailableActions(unit, BattleActionUnit.ActionType.Support); } else { availableActions = this.battleSimulation.BattleUnitActionController.GetAvailableActions(unit, BattleActionUnit.ActionType.Attack); } if (availableActions != null) { foreach (BattleUnitActionController.UnitAction unitAction in availableActions) { for (int i = 0; i < unitAction.BattleAction.BattleEffects.Length; i++) { BattleEffects battleEffects = unitAction.BattleAction.BattleEffects[i]; if (battleEffects != null && battleEffects.BattleEffectList != null) { for (int j = 0; j < battleEffects.BattleEffectList.Length; j++) { BattleEffectContext contextFromBattleEffect = unit.GetContextFromBattleEffect(battleEffects.BattleEffectList[j]); if (contextFromBattleEffect != null && contextFromBattleEffect.Target.Unit == potentialTarget.Unit) { return(1f); } } } } } } } return(0f); }
private bool ExecuteBattleAction(float battleActionContextRandomNumber, BattleAction battleAction, BattleEffects battleEffects, BattleSimulationUnit initiator, BattleSimulationUnit activator, BattleSimulationTarget[] currentTargets, bool immediate) { if (battleAction == null) { throw new ArgumentNullException("battleAction"); } if (battleEffects == null) { throw new ArgumentNullException("battleEffects"); } if (!battleAction.CanBeAppliedByDeadUnit && activator.GetPropertyValue(SimulationProperties.Health) <= 0f) { return(false); } Diagnostics.Assert(this.Simulation != null && this.Simulation.BattleSimulationRandom != null); double num = this.Simulation.BattleSimulationRandom.NextDouble(); double num2 = (double)battleEffects.GetProbability(initiator); if (num >= num2) { return(false); } BattleSimulationTarget[] array = this.Simulation.FilterTargets(battleEffects.TargetsFilter, initiator, currentTargets); BattleEffectsArea battleEffectsArea = battleEffects as BattleEffectsArea; if (battleEffectsArea == null) { BattleActionContext battleActionContext = new BattleActionContext(this, battleAction, battleEffects, initiator, activator, array, battleActionContextRandomNumber); this.ExecuteBattleAction(battleActionContext, immediate); } else { this.ExecuteAOEBattleAction(battleActionContextRandomNumber, battleAction, battleEffectsArea, initiator, activator, array, immediate); } return(true); }
private void ExecuteAOEBattleAction(float battleActionContextRandomNumber, BattleAction battleAction, BattleEffectsArea battleEffectsArea, BattleSimulationUnit initiator, BattleSimulationUnit activator, BattleSimulationTarget[] aoeCenterTargets, bool immediate) { if (battleAction == null) { throw new ArgumentNullException("battleAction"); } if (battleEffectsArea == null) { throw new ArgumentNullException("battleEffectsArea"); } if (aoeCenterTargets == null || aoeCenterTargets.Length == 0) { return; } List <BattleSimulationTarget> list = new List <BattleSimulationTarget>(); foreach (BattleSimulationTarget battleSimulationTarget3 in aoeCenterTargets) { WorldOrientation worldOrientation = (battleSimulationTarget3.Unit == null) ? WorldOrientation.Undefined : battleSimulationTarget3.Unit.Orientation; if (battleEffectsArea.InitiatorAsCenter || worldOrientation == WorldOrientation.Undefined) { worldOrientation = ((initiator == null) ? worldOrientation : initiator.Orientation); } List <WorldPosition> list2 = null; if (battleEffectsArea.Type == BattleEffectsArea.AreaType.Chain) { Diagnostics.Assert(this.Simulation != null); BattleSimulationTarget[] array = null; if (battleSimulationTarget3.Unit != null) { array = this.Simulation.FilterTargets(BattleEffects.TargetFlags.SameGroup, battleSimulationTarget3.Unit, null); } if (array != null && array.Length != 0) { list2 = new List <WorldPosition>(array.Length); list2.AddRange(from battleSimulationTarget in array select battleSimulationTarget.DynamicPosition); } } SimulationObject context = null; if (initiator != null) { context = initiator.SimulationObject; } Diagnostics.Assert(this.Simulation != null); WorldPosition dynamicPosition = battleSimulationTarget3.DynamicPosition; if (battleEffectsArea.InitiatorAsCenter) { dynamicPosition = new BattleSimulationTarget(initiator).DynamicPosition; } IPathfindingArea area = battleEffectsArea.GetArea(dynamicPosition, worldOrientation, list2, this.Simulation.WorldParameters, this.Simulation.BattleZone, context); if (area == null) { Diagnostics.LogError("Unknown area of effect {0}, the effect will be applied on the filtered unit.", new object[] { battleEffectsArea.Type }); } else { WorldPosition[] worldPositions = area.GetWorldPositions(this.Simulation.WorldParameters); if (worldPositions == null) { Diagnostics.LogError("Can't get area of effect positions."); } else { list.Clear(); for (int j = 0; j < worldPositions.Length; j++) { BattleSimulationUnit unitFromPosition = this.Simulation.GetUnitFromPosition(worldPositions[j], false); if (unitFromPosition != null) { BattleSimulationTarget battleSimulationTarget2 = new BattleSimulationTarget(unitFromPosition); if (battleEffectsArea.AvoidCastingUnit) { bool flag = false; for (int k = 0; k < aoeCenterTargets.Length; k++) { if (aoeCenterTargets[k].DynamicPosition == battleSimulationTarget2.DynamicPosition) { if (battleEffectsArea.Type != BattleEffectsArea.AreaType.Chain) { flag = true; break; } battleSimulationTarget2.Ignore = true; } } if (flag) { goto IL_225; } } list.Add(battleSimulationTarget2); } IL_225 :; } BattleActionAOEInstruction battleActionAOEInstruction = new BattleActionAOEInstruction(initiator.UnitGUID, battleEffectsArea.RealizationVisualEffectName); battleActionAOEInstruction.RealizationApplicationMethod = battleEffectsArea.RealizationApplicationMethod; battleActionAOEInstruction.RealizationApplicationData = battleEffectsArea.RealizationApplicationData; this.ReportInstruction(battleActionAOEInstruction); List <IUnitReportInstruction> list3 = this.reportCopy; this.reportCopy = battleActionAOEInstruction.ReportInstructions; Diagnostics.Assert(battleEffectsArea.BattleEffects != null); for (int l = 0; l < battleEffectsArea.BattleEffects.Length; l++) { BattleEffects battleEffects = battleEffectsArea.BattleEffects[l]; this.ExecuteBattleAction(battleActionContextRandomNumber, battleAction, battleEffects, initiator, activator, list.ToArray(), immediate); } this.reportCopy = list3; } } } }
public void ExecuteWaitingActions(BattleSimulation battleSimulation, RoundReport roundReport) { BattleSimulationUnit battleSimulationUnit = this.Units.FirstOrDefault((BattleSimulationUnit match) => match.Position.IsValid); if (battleSimulationUnit == null) { return; } List <IUnitReportInstruction> list = new List <IUnitReportInstruction>(); for (int i = 0; i < this.WaitingArmyActions.Count; i++) { int num = BattleSimulation.UnitStateNextID++; BattleArmyAction battleArmyAction = this.WaitingArmyActions[i]; ContenderActionInstruction contenderActionInstruction = battleArmyAction.BuildContenderActionInstruction(this.ContenderGUID, num, battleSimulationUnit.UnitGUID); WorldOrientation orientation = this.Contender.WorldOrientation; if (contenderActionInstruction is ContenderActionSpellInstruction) { orientation = this.Contender.Deployment.DeploymentArea.Forward; } if (contenderActionInstruction != null) { contenderActionInstruction.AddEffectPosition(battleArmyAction.TargetPosition); BattleSimulationTarget[] currentTargets = new BattleSimulationTarget[] { new BattleSimulationTarget(battleArmyAction.TargetPosition) }; for (int j = 0; j < battleArmyAction.BattleActions.Count; j++) { BattleAction battleAction = battleArmyAction.BattleActions[j]; for (int k = 0; k < battleAction.BattleEffects.Length; k++) { BattleEffects battleEffects = battleAction.BattleEffects[k]; if (battleEffects is BattleEffectsArea) { IPathfindingArea area = (battleEffects as BattleEffectsArea).GetArea(battleArmyAction.TargetPosition, orientation, null, battleSimulation.WorldParameters, battleSimulation.BattleZone, battleSimulationUnit); if (area != null) { WorldPosition[] worldPositions = area.GetWorldPositions(battleSimulation.WorldParameters); if (worldPositions != null) { contenderActionInstruction.AddEffectArea(worldPositions); } } } } WorldOrientation orientation2 = battleSimulationUnit.Orientation; battleSimulationUnit.Orientation = orientation; battleSimulation.BattleActionController.ExecuteBattleAction(battleAction, battleAction.BattleEffects, battleSimulationUnit, currentTargets, true, list); battleSimulationUnit.Orientation = orientation2; battleSimulation.CheckUnitsDeath(num); } for (int l = 0; l < list.Count; l++) { contenderActionInstruction.AddReportInstruction(list[l]); } roundReport.ReportInstruction(this.ContenderGUID, contenderActionInstruction); } } this.ClearWaitingActions(); }