public override void DetectionUpdated(DetectedUnit detectedUnit) { CheckFriendOrFoeStatus(detectedUnit); SetThreatClassification(detectedUnit); CheckEventTriggersForDetection(detectedUnit); //EngageAirThreat(detectedUnit, true, true); }
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); } }
public EngagementOrder(DetectedUnit targetDetectedUnit, GameConstants.EngagementOrderType engagementOrder, string weaponClassId) : this() { TargetDetectedUnit = targetDetectedUnit; EngagementOrderType = engagementOrder; WeaponClassId = weaponClassId; }
public void AddWaypointToTop(DetectedUnit targetDetectedUnit, double effectiveRangeM, Orders <BaseOrder> orders) { Waypoint wp = new Waypoint(targetDetectedUnit); wp.Orders = orders; wp.DesiredDistanceToTargetM = effectiveRangeM; _waypoints.AddFirst(wp); }
public EngagementOrder(DetectedUnit targetDetectedUnit, GameConstants.EngagementOrderType engagementOrder, GameConstants.EngagementStrength engagementStrength) : this() { TargetDetectedUnit = targetDetectedUnit; EngagementOrderType = engagementOrder; EngagementStrength = engagementStrength; }
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; } } }
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"); }
public Waypoint(DetectedUnit targetDetectedUnit) : this() { _Position = targetDetectedUnit.Position.Clone(); TargetDetectedUnit = targetDetectedUnit; }