/// <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;
            }
        }
Example #3
0
        /// <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();
        }
Example #4
0
 /// <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();
 }
Example #5
0
 /// <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();
 }
Example #6
0
        /// <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();
        }
Example #7
0
 public PilotPositionPair(UnitPilot Pilot, RelativeVector Position)
 {
     this.Pilot = Pilot;
     this.Position = Position;
 }
Example #8
0
        /// <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;
                }
            }
        }
Example #9
0
 /// <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;
         }
 }
Example #10
0
 /// <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)));
 }
Example #11
0
 //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)));
     }
 }
Example #12
0
        /// <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);
 }
Example #15
0
 public MaintainingOrderData(UnitPilot Leader, float RotationAngle, float AllowedDistToOrderedPlace)
 {
     this.Leader = Leader;
     this.RotationAngle = RotationAngle;
     this.AllowedDistToOrderedPlace = AllowedDistToOrderedPlace;
 }
Example #16
0
 internal void MarshalingUpdate(UnitPilot Leader, float RotationAngle)
 {
     maintainingInOrderData.Leader = Leader;
     maintainingInOrderData.RotationAngle = RotationAngle;
 }