public override EncounterPosition PositionInFormation(int formationNumber, Unit unit) { EncounterPosition center = unit.RallyPoint; int dx = formationNumber % 10; int dy = Mathf.FloorToInt(formationNumber / 10) - 1; Tuple <int, int> rotated = AIUtils.RotateForFormation(dx, dy, unit.UnitFacing); return(new EncounterPosition(center.X + rotated.Item1, center.Y + rotated.Item2)); }
public override EncounterPosition PositionInFormation(int formationNumber, Unit unit) { EncounterPosition center = unit.RallyPoint; int halfFormation = unit.NumInFormation / 2 + 1; if (formationNumber < halfFormation) { int dx = formationNumber % 10; int dy = Mathf.FloorToInt(formationNumber / 10) - 1; var rotated = AIUtils.RotateForFormation(dx, dy, unit.UnitFacing); return(new EncounterPosition(center.X + rotated.Item1, center.Y + rotated.Item2)); } else { int dx = formationNumber % 10 - 10; int dy = Mathf.FloorToInt((formationNumber - halfFormation) / 10) - 1; var rotated = AIUtils.RotateForFormation(dx, dy, unit.UnitFacing); return(new EncounterPosition(center.X + rotated.Item1, center.Y + rotated.Item2)); } }