/// <summary> /// create new squadron /// </summary> /// <param name="Colonel">unit that will be formation leader</param> /// <param name="game">game</param> public Squadron(UnitPilot Colonel, IGame game) { isOrdered = false; state = States.Nothing; neededState = States.Nothing; stateChangingTimer = new Timer(0.5f); behaviour = Behaviours.Waiting; reSortingTimer = new Timer(2); List<UnitPilot> pilots = new List<UnitPilot>(); formation = new SwarmFormation(pilots); }
/// <summary> /// create new squadron /// </summary> /// <param name="Colonel">unit that will be formation leader</param> /// <param name="game">game</param> /// <param name="FormationType">formation type to set</param> public Squadron(UnitPilot Colonel,IGame game,FormationTypes FormationType) { isOrdered = true; state = States.Nothing; neededState = States.Nothing; stateChangingTimer = new Timer(0.5f); behaviour = Behaviours.Waiting; reSortingTimer = new Timer(2); List<UnitPilot> pilots = new List<UnitPilot>(); switch (FormationType) { case FormationTypes.Line: formation = new LineFormation(Colonel, pilots, 100, AngleClass.pi * 0.0f); break; case FormationTypes.Bar: formation = new BarFormation(Colonel, pilots, 5, 200, 150, 0); break; case FormationTypes.Stagger: formation = new StaggerFormation(Colonel, pilots, 90, 120); break; } }
/// <summary> /// creates new instance /// </summary> /// <param name="Leader">formation leader</param> /// <param name="Subordinates">list of units</param> /// <param name="WidthBetweenUnits">width between neirbours</param> /// <param name="HeightBetweenUnits">depth between neirbours</param> public StaggerFormation(UnitPilot Leader, List<UnitPilot> Subordinates, float WidthBetweenUnits, float HeightBetweenUnits) : base(Leader, Subordinates) { widthBetweenUnits = WidthBetweenUnits; heightBetweenUnits = HeightBetweenUnits; CreatePositions(); }
/// <summary> /// creates new instance /// </summary> /// <param name="Leader">formation leader</param> /// <param name="Subordinates">list of units</param> /// <param name="DistBetweenUnits">distance between neirbours</param> /// <param name="RotationAngle">forward angle in radians</param> public LineFormation(UnitPilot Leader, List<UnitPilot> Subordinates, float DistBetweenUnits, float RotationAngle) : base(Leader, Subordinates) { distBetweenUnits = DistBetweenUnits; rotationAngle = RotationAngle; CreatePositions(); }
/// <summary> /// creates new instance /// </summary> /// <param name="Leader">formation leader</param> /// <param name="Subordinates">list of units</param> /// <param name="DistBetweenUnits">distance between neirbours</param> public LineFormation(UnitPilot Leader, List<UnitPilot> Subordinates, float DistBetweenUnits) : base(Leader, Subordinates) { distBetweenUnits = DistBetweenUnits; Line line = DefineLineFormation(rotationAngle, GetMassCenter()); CreateLinePositions(line); SortUnitsByNearanceToPositions(); }
/// <summary> /// creates new instance /// </summary> /// <param name="Leader">formation leader</param> /// <param name="Subordinates">list of units</param> /// <param name="CUnitsInLine"></param> /// <param name="WidthBetweenUnits"></param> /// <param name="HeightBetweenUnits"></param> /// <param name="RotationAngle"></param> public BarFormation(UnitPilot Leader, List<UnitPilot> Subordinates, int CUnitsInLine, float WidthBetweenUnits, float HeightBetweenUnits, float RotationAngle) : base(Leader, Subordinates) { cUnitsInLine = CUnitsInLine; rotationAngle = RotationAngle; widthBetweenUnits = WidthBetweenUnits; heightBetweenUnits = HeightBetweenUnits; CreatePositions(); }
public PilotPositionPair(UnitPilot Pilot, RelativeVector Position) { this.Pilot = Pilot; this.Position = Position; }
/// <summary> /// updates formation /// </summary> internal void Update() { UnitPilot cruiser = null; UnitPilot corvette = null; UnitPilot destroyer = null; for (int i = 0; i < subordinates.Count; i++) { if (subordinates[i].Pilot.ControlledUnit.Dead) { subordinates.RemoveAt(i); i--; } } if ((leader == null || leader.ControlledUnit.Dead) && subordinates.Count > 0) { leader = subordinates[0].Pilot; for (int i = 0; i < subordinates.Count; i++) { if (subordinates[i].Pilot.Type == ShipTypes.Destroyer) destroyer = subordinates[i].Pilot; if (subordinates[i].Pilot.Type == ShipTypes.Corvette) corvette = subordinates[i].Pilot; if (subordinates[i].Pilot.Type == ShipTypes.Cruiser) cruiser = subordinates[i].Pilot; } } }
/// <summary> /// removes unit from formation /// </summary> /// <param name="unitPilot">unit ot remove</param> public void Remove(UnitPilot unitPilot) { for (int i = 0; i < subordinates.Count; i++) if (unitPilot.Equals(subordinates[i].Pilot)) { subordinates.RemoveAt(i); break; } }
/// <summary> /// adds a unit to formation /// </summary> /// <param name="unitPilot">unit to add</param> public void Add(UnitPilot unitPilot) { if (leader == null) leader = unitPilot; subordinates.Add(new PilotPositionPair(unitPilot, new RelativeVector(unitPilot.ControlledUnit.Position))); }
//positions of units in formation /// <summary> /// creates new instance of formation /// </summary> /// <param name="Leader">leader of the formation</param> /// <param name="Subordinates">list of units in this formation. can be clear, units may be added later</param> public Formation(UnitPilot Leader, List<UnitPilot> Subordinates) { leader = Leader; subordinates = new List<PilotPositionPair>(); foreach (UnitPilot pilot in Subordinates) { subordinates.Add(new PilotPositionPair(pilot, new RelativeVector(GameVector.Zero))); } }
/// <summary> /// AI initializing method /// </summary> /// <param name="PlayerNumber">Player number</param> /// <param name="Game">Played game</param> public virtual void Init(int PlayerNumber, IGame Game) { playerNumber = PlayerNumber; friends = new List<UnitPilot>(); enemies = new List<IUnit>(); squadrons = new List<Squadron>(); game = Game; IUnit unit; for (int i = 0; i < game.UnitsCount; i++) { unit = game.GetUnit(i); if (unit.PlayerOwner == playerNumber) { UnitPilot pilot = new UnitPilot(unit, this); friends.Add(pilot); } else enemies.Add(unit); } enemyAnalyzing = new EnemyAnalyzing(enemies); analyzingTimer = new Timer(3); }
/// <summary> /// removes unit from a squadron /// </summary> /// <param name="unitPilot">unit to remove</param> public void RemoveUnit(UnitPilot unitPilot) { formation.Remove(unitPilot); }
/// <summary> /// adds a unit to squadron /// </summary> /// <param name="unitPilot">unit to add</param> public void AddUnit(UnitPilot unitPilot) { formation.Add(unitPilot); }
public MaintainingOrderData(UnitPilot Leader, float RotationAngle, float AllowedDistToOrderedPlace) { this.Leader = Leader; this.RotationAngle = RotationAngle; this.AllowedDistToOrderedPlace = AllowedDistToOrderedPlace; }
internal void MarshalingUpdate(UnitPilot Leader, float RotationAngle) { maintainingInOrderData.Leader = Leader; maintainingInOrderData.RotationAngle = RotationAngle; }