static void PostfixCalculateCurrentOrder(Formation ____mainFormation, ref FacingOrder ___CurrentFacingOrder) { if (____mainFormation != null) { ___CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(____mainFormation.Direction); } }
static void PostfixCalculateCurrentOrder(Formation ____mainFormation, Formation ___formation, ref MovementOrder ____currentOrder, ref FacingOrder ___CurrentFacingOrder) { if (____mainFormation != null && ___formation != null) { ___CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(____mainFormation.Direction); WorldPosition medianPosition = ____mainFormation.QuerySystem.MedianPosition; //medianPosition.SetVec2(medianPosition.AsVec2 - ____mainFormation.Direction * ((____mainFormation.Depth + ___formation.Depth) * 1.5f)); medianPosition.SetVec2(medianPosition.AsVec2 - ____mainFormation.Direction * ((____mainFormation.Depth + ___formation.Depth) * 0.25f + 0.0f)); ____currentOrder = MovementOrder.MovementOrderMove(medianPosition); } }
static bool PrefixCalculateCurrentOrder(ref Formation ___formation, ref MovementOrder ____currentOrder, ref FacingOrder ___CurrentFacingOrder) { if (___formation != null && ___formation.QuerySystem.IsInfantryFormation && ___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation != null) { Formation significantEnemy = Utilities.FindSignificantEnemy(___formation, true, true, false, false, false); if (significantEnemy != null) { ___formation.ArrangementOrder = ArrangementOrder.ArrangementOrderLine; ___formation.FiringOrder = FiringOrder.FiringOrderFireAtWill; ___formation.FormOrder = FormOrder.FormOrderWide; ___formation.WeaponUsageOrder = WeaponUsageOrder.WeaponUsageOrderUseAny; WorldPosition medianPosition = ___formation.QuerySystem.MedianPosition; ____currentOrder = MovementOrder.MovementOrderMove(medianPosition); Vec2 direction = (significantEnemy.QuerySystem.MedianPosition.AsVec2 - ___formation.QuerySystem.AveragePosition).Normalized(); ___CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(direction); return(false); } } return(true); }
private void Check() { float time = this.Mission.Time; if (this._battlePhase == CPUBenchmarkMissionLogic.BattlePhase.Start && (double)time >= 5.0) { this.Mission.IsTeleportingAgents = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.ArrowShower; } else { if (this._battlePhase == CPUBenchmarkMissionLogic.BattlePhase.Start) { return; } if (!this._isCurPhaseInPlay) { Debug.Print("State: " + (object)this._battlePhase, color: Debug.DebugColor.Cyan, debugFilter: 64UL); switch (this._battlePhase) { case CPUBenchmarkMissionLogic.BattlePhase.ArrowShower: this._attLeftRanged.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._attRightRanged.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._defLeftBInf.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._defRightBInf.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._defMidBInf.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._defLeftInf.ArrangementOrder = ArrangementOrder.ArrangementOrderShieldWall; this._defRightInf.ArrangementOrder = ArrangementOrder.ArrangementOrderShieldWall; this._defLeftInf.FormOrder = FormOrder.FormOrderCustom(35f); this._defRightInf.FormOrder = FormOrder.FormOrderCustom(35f); this._attLeftInf.ArrangementOrder = ArrangementOrder.ArrangementOrderShieldWall; this._attRightInf.ArrangementOrder = ArrangementOrder.ArrangementOrderShieldWall; break; case CPUBenchmarkMissionLogic.BattlePhase.MeleePosition: Vec3 vec3_1 = -(this._attLeftInf.OrderPosition.Position - this._defRightInf.OrderPosition.Position); Vec3 vec3_2 = -(this._attRightInf.OrderPosition.Position - this._defLeftInf.OrderPosition.Position); vec3_1.RotateAboutZ((float)Math.PI / 36f); vec3_2.RotateAboutZ(-1f * (float)Math.PI / 36f); this._attLeftInf.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, this._attLeftInf.OrderPosition.Position + vec3_1)); this._attRightInf.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, this._attRightInf.OrderPosition.Position + vec3_2)); break; case CPUBenchmarkMissionLogic.BattlePhase.Cav1Pos: Vec3 position1 = this._attLeftRanged.OrderPosition.Position; Vec2 direction1 = this._attLeftRanged.Direction; Vec3 vec3_3 = position1 - 15f * direction1.ToVec3(); direction1.RotateCCW(1.570796f); this._attLeftCav.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, vec3_3 + 60f * direction1.ToVec3())); break; case CPUBenchmarkMissionLogic.BattlePhase.Cav1PosDef: MatrixFrame globalFrame1 = this.Mission.Scene.FindEntityWithTag("defend_right").GetGlobalFrame(); this._defMidCav.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, globalFrame1.origin + 40f * globalFrame1.rotation.s)); break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryPosition: Vec3 position2 = this._attRightRanged.OrderPosition.Position; Vec2 direction2 = this._attRightRanged.Direction; Vec3 vec3_4 = position2 + 20f * direction2.ToVec3(); direction2.RotateCCW(-1.570796f); this._attRightCav.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, vec3_4 + 80f * direction2.ToVec3())); this._attLeftInf.MovementOrder = MovementOrder.MovementOrderCharge; this._attRightInf.MovementOrder = MovementOrder.MovementOrderCharge; this._defLeftBInf.FiringOrder = FiringOrder.FiringOrderFireAtWill; break; case CPUBenchmarkMissionLogic.BattlePhase.MeleeAttack: this._defLeftInf.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._defMidBInf.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._defRightBInf.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._attLeftInf.ArrangementOrder = ArrangementOrder.ArrangementOrderLine; this._attRightInf.ArrangementOrder = ArrangementOrder.ArrangementOrderLine; this._attLeftInf.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, this._defRightInf.GetAveragePositionOfUnits(true, false).ToVec3())); this._attRightInf.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, this._defLeftInf.GetAveragePositionOfUnits(true, false).ToVec3())); break; case CPUBenchmarkMissionLogic.BattlePhase.RangedAdvance: Vec2 averagePositionOfUnits1 = this._attLeftRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_5 = averagePositionOfUnits1.ToVec3(); averagePositionOfUnits1 = this._attLeftRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_6 = averagePositionOfUnits1.ToVec3(); averagePositionOfUnits1 = this._defRightInf.GetAveragePositionOfUnits(true, false); Vec3 vec3_7 = averagePositionOfUnits1.ToVec3(); Vec3 vec3_8 = 0.15f * (vec3_6 - vec3_7); Vec3 position3 = vec3_5 - vec3_8; averagePositionOfUnits1 = this._attRightRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_9 = averagePositionOfUnits1.ToVec3(); averagePositionOfUnits1 = this._attRightRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_10 = averagePositionOfUnits1.ToVec3(); averagePositionOfUnits1 = this._defLeftInf.GetAveragePositionOfUnits(true, false); Vec3 vec3_11 = averagePositionOfUnits1.ToVec3(); Vec3 vec3_12 = 0.15f * (vec3_10 - vec3_11); Vec3 position4 = vec3_9 - vec3_12; this._attLeftRanged.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, position3)); this._attRightRanged.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, position4)); break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryAdvance: this.Mission.Scene.FindEntityWithTag("attacker_mid").GetGlobalFrame(); MatrixFrame globalFrame2 = this.Mission.Scene.FindEntityWithTag("defend_right").GetGlobalFrame(); this.Mission.Scene.FindEntityWithTag("defend_left").GetGlobalFrame(); Vec3 position5 = globalFrame2.origin + globalFrame2.rotation.s * 68f + 10f * this._attLeftRanged.Direction.ToVec3(); this._attLeftCav.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, position5)); this._defMidCav.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, position5)); break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryCharge: MatrixFrame globalFrame3 = this.Mission.Scene.FindEntityWithTag("defend_left").GetGlobalFrame(); this._defLeftBInf.FacingOrder = FacingOrder.FacingOrderLookAtDirection((this._attRightCav.CurrentPosition - this._defLeftBInf.CurrentPosition).Normalized()); this._defLeftBInf.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, globalFrame3.origin - globalFrame3.rotation.s * 10f)); this._attRightCav.MovementOrder = MovementOrder.MovementOrderChargeToTarget(this._defLeftBInf); this._attLeftCav.MovementOrder = MovementOrder.MovementOrderChargeToTarget(this._attLeftInf); this._defMidCav.MovementOrder = MovementOrder.MovementOrderChargeToTarget(this._attRightInf); break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryCharge2: this._attRightCav.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, this._defLeftBInf.OrderPosition.Position)); this._attLeftRanged.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._attLeftRanged.MovementOrder = MovementOrder.MovementOrderAdvance; this._attRightRanged.FiringOrder = FiringOrder.FiringOrderFireAtWill; this._attRightRanged.MovementOrder = MovementOrder.MovementOrderAdvance; break; case CPUBenchmarkMissionLogic.BattlePhase.RangedAdvance2: Vec2 averagePositionOfUnits2 = this._attLeftRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_13 = averagePositionOfUnits2.ToVec3(); averagePositionOfUnits2 = this._attLeftRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_14 = averagePositionOfUnits2.ToVec3(); averagePositionOfUnits2 = this._defRightInf.GetAveragePositionOfUnits(true, false); Vec3 vec3_15 = averagePositionOfUnits2.ToVec3(); Vec3 vec3_16 = 0.15f * (vec3_14 - vec3_15); Vec3 position6 = vec3_13 - vec3_16; averagePositionOfUnits2 = this._attRightRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_17 = averagePositionOfUnits2.ToVec3(); averagePositionOfUnits2 = this._attRightRanged.GetAveragePositionOfUnits(true, false); Vec3 vec3_18 = averagePositionOfUnits2.ToVec3(); averagePositionOfUnits2 = this._defLeftInf.GetAveragePositionOfUnits(true, false); Vec3 vec3_19 = averagePositionOfUnits2.ToVec3(); Vec3 vec3_20 = 0.15f * (vec3_18 - vec3_19); Vec3 position7 = vec3_17 - vec3_20; this._attLeftRanged.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, position6)); this._attRightRanged.MovementOrder = MovementOrder.MovementOrderMove(new WorldPosition(this.Mission.Scene, position7)); break; case CPUBenchmarkMissionLogic.BattlePhase.FullCharge: using (IEnumerator <Formation> enumerator = this.Mission.AttackerTeam.Formations.GetEnumerator()) { while (enumerator.MoveNext()) { Formation current = enumerator.Current; if (current != this._attLeftRanged && current != this._attRightRanged && current != this._attRightCav) { current.MovementOrder = MovementOrder.MovementOrderCharge; } } break; } } this._isCurPhaseInPlay = true; } else { switch (this._battlePhase) { case CPUBenchmarkMissionLogic.BattlePhase.ArrowShower: if ((double)time <= 14.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.MeleePosition; break; case CPUBenchmarkMissionLogic.BattlePhase.MeleePosition: if ((double)time <= 19.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.MeleeAttack; break; case CPUBenchmarkMissionLogic.BattlePhase.Cav1Pos: if ((double)time <= 19.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.Cav1PosDef; break; case CPUBenchmarkMissionLogic.BattlePhase.Cav1PosDef: if ((double)time <= 24.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.CavalryAdvance; break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryPosition: if ((double)time <= 74.5) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.CavalryCharge; break; case CPUBenchmarkMissionLogic.BattlePhase.MeleeAttack: if ((double)time <= 19.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.Cav1Pos; break; case CPUBenchmarkMissionLogic.BattlePhase.RangedAdvance: if ((double)time <= 60.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.CavalryPosition; break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryAdvance: if ((double)time <= 30.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.RangedAdvance; break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryCharge: if ((double)time <= 92.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.CavalryCharge2; break; case CPUBenchmarkMissionLogic.BattlePhase.CavalryCharge2: if ((double)time <= 93.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.RangedAdvance2; break; case CPUBenchmarkMissionLogic.BattlePhase.RangedAdvance2: if ((double)time <= 94.0) { break; } this._isCurPhaseInPlay = false; this._battlePhase = CPUBenchmarkMissionLogic.BattlePhase.FullCharge; break; } } } }
public static bool Prefix_MoveToLineSegment( IEnumerable <Formation> formations, Dictionary <Formation, Formation> simulationFormations, WorldPosition TargetLineSegmentBegin, WorldPosition TargetLineSegmentEnd, OnOrderIssuedDelegate OnOrderIssued, Dictionary <Formation, float> actualWidths, Dictionary <Formation, int> actualUnitSpacings, bool isFormationLayoutVertical) { try { foreach (Formation formation in formations) { if (actualUnitSpacings.TryGetValue(formation, out var num)) { formation.SetPositioning(new WorldPosition?(), new Vec2?(), num); } if (actualWidths.TryGetValue(formation, out var customWidth)) { formation.FormOrder = FormOrder.FormOrderCustom(customWidth); } } formations = GetSortedFormations(formations, isFormationLayoutVertical); OrderController.SimulateNewOrderWithPositionAndDirection(formations, simulationFormations, TargetLineSegmentBegin, TargetLineSegmentEnd, out var formationChanges, out var isLineShort, isFormationLayoutVertical); foreach ((Formation element, int unitSpacingReduction, float customWidth1, Vec2 direction, WorldPosition position) in formationChanges) { int oldUnitSpacing = element.UnitSpacing; float oldWidth = element.Width; if (unitSpacingReduction > 0) { // change minimum unit spacing from 0 to 1 in circle arrangement. int newUnitSpacing = Math.Max(oldUnitSpacing - unitSpacingReduction, element.ArrangementOrder.OrderType == OrderType.ArrangementCircular ? 1 : 0); element.SetPositioning(new WorldPosition?(), new Vec2?(), newUnitSpacing); if (element.UnitSpacing != oldUnitSpacing) { actualUnitSpacings[element] = oldUnitSpacing; } } if (Math.Abs(element.Width - (double)customWidth1) > 0.1f) { element.FormOrder = FormOrder.FormOrderCustom(customWidth1); if (isLineShort) { actualWidths[element] = oldWidth; } } if (!isLineShort) { element.MovementOrder = MovementOrder.MovementOrderMove(position); element.FacingOrder = FacingOrder.FacingOrderLookAtDirection(direction); element.FormOrder = FormOrder.FormOrderCustom(customWidth1); if (OnOrderIssued != null) { IEnumerable <Formation> singleFormation = Enumerable.Repeat(element, 1); OnOrderIssued(OrderType.Move, singleFormation, (object)position); OnOrderIssued(OrderType.LookAtDirection, singleFormation, (object)direction); OnOrderIssued(OrderType.FormCustom, singleFormation, (object)customWidth1); } } else { Formation largestFormation = formations.MaxBy(f => f.CountOfUnitsWithoutDetachedOnes); switch (OrderController.GetActiveFacingOrderOf(largestFormation)) { case OrderType.LookAtEnemy: element.MovementOrder = MovementOrder.MovementOrderMove(position); if (OnOrderIssued != null) { IEnumerable <Formation> local_20 = Enumerable.Repeat(element, 1); OnOrderIssued(OrderType.Move, local_20, (object)position); OnOrderIssued(OrderType.LookAtEnemy, local_20, Array.Empty <object>()); } continue; case OrderType.LookAtDirection: element.MovementOrder = MovementOrder.MovementOrderMove(position); element.FacingOrder = FacingOrder.FacingOrderLookAtDirection(direction); if (OnOrderIssued != null) { IEnumerable <Formation> local_21 = Enumerable.Repeat(element, 1); OnOrderIssued(OrderType.Move, local_21, (object)position); OnOrderIssued(OrderType.LookAtDirection, local_21, (object)largestFormation.Direction); } continue; default: continue; } } } return(false); } catch (Exception) { return(true); } }
static void PostfixCalculateCurrentOrder(ref Vec2 ____shootPosition, ref Formation ___formation, ref Formation ____archerFormation, BehaviorCautiousAdvance __instance, ref BehaviorState ____behaviorState, ref MovementOrder ____currentOrder, ref FacingOrder ___CurrentFacingOrder) { if (___formation != null && ____archerFormation != null && ___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation != null) { Formation significantEnemy = Utilities.FindSignificantEnemy(___formation, true, true, false, false, false); if (significantEnemy != null) { Vec2 vec = significantEnemy.QuerySystem.MedianPosition.AsVec2 - ___formation.QuerySystem.AveragePosition; float distance = vec.Normalize(); switch (____behaviorState) { case BehaviorState.Shooting: { if (waitCountShooting > 75) { if (distance > 100f) { WorldPosition medianPosition = ___formation.QuerySystem.MedianPosition; medianPosition.SetVec2(medianPosition.AsVec2 + vec * 5f); ____shootPosition = medianPosition.AsVec2 + vec * 5f; ____currentOrder = MovementOrder.MovementOrderMove(medianPosition); ___CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(vec); } waitCountShooting = 0; waitCountApproaching = 0; } else { ___CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(vec); waitCountShooting++; } break; } case BehaviorState.Approaching: { if (waitCountApproaching > 30) { if (distance < 210f) { WorldPosition medianPosition = ___formation.QuerySystem.MedianPosition; medianPosition.SetVec2(medianPosition.AsVec2 + vec * 5f); ____shootPosition = medianPosition.AsVec2 + vec * 5f; ____currentOrder = MovementOrder.MovementOrderMove(medianPosition); ___CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(vec); } waitCountApproaching = 0; } else { if (distance < 210f) { WorldPosition medianPosition = ___formation.QuerySystem.MedianPosition; medianPosition.SetVec2(____shootPosition); ____currentOrder = MovementOrder.MovementOrderMove(medianPosition); ___CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(vec); } waitCountApproaching++; } break; } case BehaviorState.PullingBack: { if (waitCountApproaching > 30) { if (distance < 210f) { WorldPosition medianPosition = ___formation.QuerySystem.MedianPosition; medianPosition.SetVec2(medianPosition.AsVec2 - vec * 10f); ____shootPosition = medianPosition.AsVec2 + vec * 5f; ____currentOrder = MovementOrder.MovementOrderMove(medianPosition); } waitCountApproaching = 0; } else { if (distance < 210f) { WorldPosition medianPosition = ___formation.QuerySystem.MedianPosition; medianPosition.SetVec2(____shootPosition); ____currentOrder = MovementOrder.MovementOrderMove(medianPosition); } waitCountApproaching++; } break; } } } } }