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);
}