static void PostfixCalculateCurrentOrder(ref Formation ___formation, BehaviorMountedSkirmish __instance, ref bool ____engaging, ref MovementOrder ____currentOrder) { WorldPosition position = ___formation.QuerySystem.MedianPosition; if (___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation == null) { position.SetVec2(___formation.QuerySystem.AveragePosition); } else { bool num = (___formation.QuerySystem.AverageAllyPosition - ___formation.Team.QuerySystem.AverageEnemyPosition).LengthSquared <= 3600f; bool engaging = ____engaging; engaging = (____engaging = (num || ((!____engaging) ? ((___formation.QuerySystem.AveragePosition - ___formation.QuerySystem.AverageAllyPosition).LengthSquared <= 3600f) : (!(___formation.QuerySystem.UnderRangedAttackRatio > ___formation.QuerySystem.MakingRangedAttackRatio) && ((!___formation.QuerySystem.FastestSignificantlyLargeEnemyFormation.IsCavalryFormation && !___formation.QuerySystem.FastestSignificantlyLargeEnemyFormation.IsRangedCavalryFormation) || (___formation.QuerySystem.AveragePosition - ___formation.QuerySystem.FastestSignificantlyLargeEnemyFormation.MedianPosition.AsVec2).LengthSquared / (___formation.QuerySystem.FastestSignificantlyLargeEnemyFormation.MovementSpeed * ___formation.QuerySystem.FastestSignificantlyLargeEnemyFormation.MovementSpeed) >= 16f))))); if (!____engaging) { position = new WorldPosition(Mission.Current.Scene, new Vec3(___formation.QuerySystem.AverageAllyPosition, ___formation.Team.QuerySystem.MedianPosition.GetNavMeshZ() + 100f)); } else { Vec2 vec = (___formation.QuerySystem.AveragePosition - ___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation.AveragePosition).Normalized().LeftVec(); FormationQuerySystem closestSignificantlyLargeEnemyFormation = ___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation; float num2 = 50f + (___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation.Formation.Width + ___formation.Depth) * 0.5f; float num3 = 0f; Formation formation = ___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation.Formation; for (int i = 0; i < Mission.Current.Teams.Count; i++) { Team team = Mission.Current.Teams[i]; if (!team.IsEnemyOf(___formation.Team)) { continue; } for (int j = 0; j < team.FormationsIncludingSpecialAndEmpty.Count; j++) { Formation formation2 = team.FormationsIncludingSpecialAndEmpty[j]; if (formation2.CountOfUnits > 0 && formation2.QuerySystem != closestSignificantlyLargeEnemyFormation) { Vec2 v = formation2.QuerySystem.AveragePosition - closestSignificantlyLargeEnemyFormation.AveragePosition; float num4 = v.Normalize(); if (vec.DotProduct(v) > 0.8f && num4 < num2 && num4 > num3) { num3 = num4; formation = formation2; } } } } if (___formation.QuerySystem.RangedCavalryUnitRatio > 0.95f && ___formation.QuerySystem.ClosestSignificantlyLargeEnemyFormation.Formation == formation) { ____currentOrder = MovementOrder.MovementOrderCharge; return; } bool flag = formation.QuerySystem.IsCavalryFormation || formation.QuerySystem.IsRangedCavalryFormation; float num5 = flag ? 35f : 20f; num5 += (formation.Depth + ___formation.Width) * 0.25f; //num5 = Math.Min(num5, ___formation.QuerySystem.MissileRange - ___formation.Width * 0.5f); Ellipse ellipse = new Ellipse(formation.QuerySystem.MedianPosition.AsVec2, num5, formation.Width * 0.25f * (flag ? 1.5f : 1f), formation.Direction); position.SetVec2(ellipse.GetTargetPos(___formation.QuerySystem.AveragePosition, 20f)); } } ____currentOrder = MovementOrder.MovementOrderMove(position); }