Пример #1
0
 public override void DetectionUpdated(DetectedUnit detectedUnit)
 {
     CheckFriendOrFoeStatus(detectedUnit);
     SetThreatClassification(detectedUnit);
     CheckEventTriggersForDetection(detectedUnit);
     //EngageAirThreat(detectedUnit, true, true);
 }
Пример #2
0
 public Waypoint(WaypointInfo waypointInfo)
     : this()
 {
     Position = new Position(waypointInfo.Position);
     if (!string.IsNullOrEmpty(waypointInfo.ReturningToUnitId))
     {
         BaseUnit returnToUnit = GameManager.Instance.Game.GetUnitById(waypointInfo.ReturningToUnitId);
         if (returnToUnit != null)
         {
             this.TargetBaseUnit = returnToUnit;
         }
     }
     else if (!string.IsNullOrEmpty(waypointInfo.TargetDetectedUnitId))
     {
         DetectedUnit det = GameManager.Instance.Game.GetDetectedUnitById(waypointInfo.TargetDetectedUnitId);
         if (det != null)
         {
             this.TargetDetectedUnit = det;
         }
     }
     foreach (var order in waypointInfo.UnitOrders)
     {
         BaseOrder baseOrder = GameManager.Instance.Game.GetBaseOrderFromUnitOrder(order);
         this.Orders.Add(baseOrder);
     }
 }
Пример #3
0
 public EngagementOrder(DetectedUnit targetDetectedUnit,
                        GameConstants.EngagementOrderType engagementOrder,
                        string weaponClassId) : this()
 {
     TargetDetectedUnit  = targetDetectedUnit;
     EngagementOrderType = engagementOrder;
     WeaponClassId       = weaponClassId;
 }
Пример #4
0
        public void AddWaypointToTop(DetectedUnit targetDetectedUnit, double effectiveRangeM, Orders <BaseOrder> orders)
        {
            Waypoint wp = new Waypoint(targetDetectedUnit);

            wp.Orders = orders;
            wp.DesiredDistanceToTargetM = effectiveRangeM;
            _waypoints.AddFirst(wp);
        }
Пример #5
0
 public EngagementOrder(DetectedUnit targetDetectedUnit,
                        GameConstants.EngagementOrderType engagementOrder,
                        GameConstants.EngagementStrength engagementStrength)
     : this()
 {
     TargetDetectedUnit  = targetDetectedUnit;
     EngagementOrderType = engagementOrder;
     EngagementStrength  = engagementStrength;
 }
Пример #6
0
 protected void CheckFriendOrFoeStatus(DetectedUnit detectedUnit)
 {
     if (detectedUnit.IsIdentified && detectedUnit.RefersToUnit != null)
     {
         if (detectedUnit.FriendOrFoeClassification == GameConstants.FriendOrFoe.Foe && !OwnerPlayer.IsEnemy(detectedUnit.RefersToUnit.OwnerPlayer))
         {
             detectedUnit.FriendOrFoeClassification = GameConstants.FriendOrFoe.Undetermined;
         }
     }
 }
Пример #7
0
        public void MissileLaunchAndMovement()
        {
            Player player1 = new Player();

            player1.Name = "Player1";
            Player player2 = new Player();

            player2.Name = "Player2";

            Group group1 = new Group();
            Group group2 = new Group();

            GameManager.Instance.GameData.InitAllData();
            Game game = GameManager.Instance.CreateGame(player1, "test game");

            GameManager.Instance.Game.UpperLeftCorner  = new Coordinate(70, -10);
            GameManager.Instance.Game.LowerRightCorner = new Coordinate(40, 10);
            game.AddPlayer(player2);

            Position     pos1       = new Position(60, 3, 0, 70 + 180);
            Position     pos2       = pos1.Offset(new PositionOffset(1800, 1780));
            BaseUnit     unitNansen = GameManager.Instance.GameData.CreateUnit(player1, group1, "fridtjofnansen", "Nansen", pos1, true);
            AircraftUnit helo       = unitNansen.AircraftHangar.Aircraft.First <AircraftUnit>();

            unitNansen.LaunchAircraft(new List <AircraftUnit> {
                helo
            }, string.Empty, "", null, "");
            helo.SetSensorsActivePassive(GameConstants.SensorType.Radar, true);

            BaseUnit unitEnemyBurke = GameManager.Instance.GameData.CreateUnit(player2, group2, "arleighburke", "Enemy Burke", pos2, true);

            unitNansen.SensorSweep();
            helo.SensorSweep();

            Assert.IsTrue(player1.DetectedUnits.Count == 1, "Player1 should have detected one unit.");
            DetectedUnit enemyUnit = player1.DetectedUnits[0];

            enemyUnit.FriendOrFoeClassification = GameConstants.FriendOrFoe.Foe;
            var engagementOrder = new EngagementOrder(enemyUnit, GameConstants.EngagementOrderType.EngageNotClose);

            engagementOrder.WeaponClassId = "nsm";
            unitNansen.Orders.Enqueue(engagementOrder);
            unitNansen.ExecuteOrders();
            MissileUnit missile     = (MissileUnit)player1.Units.First <BaseUnit>(u => u.UnitClass.IsMissileOrTorpedo);
            double      OldDistance = MapHelper.CalculateDistanceM(
                unitEnemyBurke.Position.Coordinate, missile.Position.Coordinate);
            double distanceM  = 0;
            int    iterations = 0;

            do
            {
                iterations++;
                missile.MoveToNewCoordinate(100);
                var heightM = missile.Position.HeightOverSeaLevelM;
                distanceM = MapHelper.CalculateDistanceM(
                    unitEnemyBurke.Position.Coordinate, missile.Position.Coordinate);
                if (distanceM < 5000)
                {
                    GameManager.Instance.Log.LogDebug(string.Format(
                                                          "MissileLaunchAndMovement test: {0} at pos {1} ** distanceM={2} FuelM={3}",
                                                          missile, missile.Position, Math.Round(distanceM, 0), Math.Round(missile.FuelDistanceRemainingM, 0)));
                }
            } while (distanceM > GameConstants.DISTANCE_TO_TARGET_IS_HIT_M * 2 && !missile.IsMarkedForDeletion);

            double newDistance = MapHelper.CalculateDistanceM(
                unitEnemyBurke.Position.Coordinate, missile.Position.Coordinate);

            Assert.IsTrue(newDistance < OldDistance, "Missile should have moved closer to target.");
            Assert.IsTrue(newDistance < 200, "Missile should be closer to target than 200m");
        }
Пример #8
0
 public Waypoint(DetectedUnit targetDetectedUnit) : this()
 {
     _Position          = targetDetectedUnit.Position.Clone();
     TargetDetectedUnit = targetDetectedUnit;
 }