public override void Action() { if (ai.Target != null && ai.TargetYDistance > 25) { aIAction = AIAction.Attack; } else if (ai.ClosestObject != null && CollisionDetection.IsPointInsideCircle(ai.ClosestObject.Position, Ship.Position, ai.AvoidRadius)) { aIAction = AIAction.Avoid; } else if (ai.FormationArea.X != -1 && !Ship.Bounding.Intersects(ai.FormationArea)) { aIAction = AIAction.Formation; } else { aIAction = AIAction.Idle; } base.Action(); }
public GameObjectVertical FindFollowObject() { if (FollowObject == null) { List <GameObjectVertical> objectList = Game.stateManager.shooterState.gameObjects; foreach (String type in FollowObjectTypes) { foreach (GameObjectVertical obj in objectList) { if (obj.ObjectClass.Equals(type)) { if (CollisionDetection.IsPointInsideCircle(obj.Position, Position, SightRange)) { followObject = obj; } } } } } else { if (!CollisionDetection.IsPointInsideCircle(FollowObject.Position, Position, SightRange)) { FollowObject = null; } } return(null); }
public GameObjectVertical FindAimObject() { if (ShootObject == null) { var targetsWithinRange = GetTargetsWithinRange(SightRange); if (targetsWithinRange.Count > 0) { shootObject = targetsWithinRange[0]; foreach (GameObjectVertical obj in targetsWithinRange) { if (MathFunctions.ObjectDistance(this, obj) < MathFunctions.ObjectDistance(this, shootObject)) { shootObject = obj; } } } } else { if (!CollisionDetection.IsPointInsideCircle(ShootObject.Position, Position, SightRange)) { ShootObject = null; } } return(ShootObject); }
//Kontrollerar "shooting" private void UpdateShooting(GameTime gameTime) { //Slutar skjuta mot objekt utanfor SightRange if (ShootObject != null) { if (!CollisionDetection.IsPointInsideCircle(ShootObject.Position, Position, SightRange)) { ShootObject = null; } } //Styr via prioritetsordningen i CheckPriority vilket objekt som ska laggas in i ShootObject. foreach (GameObjectVertical obj in Game.stateManager.shooterState.gameObjects) { if (!this.IsKilled && obj.ObjectName != null && obj.ObjectName.Equals("Player")) { if (CollisionDetection.IsPointInsideCircle(obj.Position, Position, SightRange)) { ShootObject = obj; } } } //Skjuter om det finns att skjuta pa //if (ShootObject != null) HandleShooting(gameTime); }
public override bool Completed() { if (isOnCompletedCalled) { return(true); } return(GameStateManager.currentState.Equals("OverworldState") && !game.player.HyperspeedOn && CollisionDetection.IsPointInsideCircle(game.player.position, Destination.position, radius)); }
public override void Update(PlayTime playTime) { base.Update(playTime); if (GameStateManager.currentState == "OverworldState" && !startMessageDisplayed) { startMessageDisplayed = true; PopupHandler.DisplayMessage(startMessage); } if (!deviationAllowed && !CollisionDetection.IsPointInsideCircle(game.player.position, shipsToFollow[0].position, deviationRadius) && outOfRangeTimer <= 0) { outOfRangeTimer = 150; PopupHandler.DisplayMessage(deviationMessage); foreach (OverworldShip ship in shipsToFollow) { ship.Wait(); } } if (!deviationAllowed && outOfRangeTimer > 0) { outOfRangeTimer--; if (outOfRangeTimer == 149) { game.player.InitializeHyperSpeedJump(shipsToFollow[0].position, false); } if (outOfRangeTimer < 1) { outOfRangeTimer = -100; foreach (OverworldShip ship in shipsToFollow) { ship.Start(); } } } }
public void Update(GameTime gameTime, List <GameObjectOverworld> objectsInOverworld, Vector2 cameraPos) { objectsVisibleOnRadar.Clear(); missionArrows.Clear(); availableMainMissionArrows.Clear(); availableMainMissionLocationNames.Clear(); availableMainMissionLocationNames = MissionManager.GetAvailableMainMissionLocationNames(); colorSwapCounter += 1 * MathFunctions.FPSSyncFactor(gameTime); foreach (GameObjectOverworld obj in objectsInOverworld) { // Adds visible game objects if (CollisionDetection.IsPointInsideCircle(obj.position, game.player.position, viewRadius)) { objectsVisibleOnRadar.Add(obj); } // Adds mission arrows for non-visible mission coordinates else if (MissionManager.IsCurrentObjectiveDestination(obj) || MissionManager.IsFailedMissionDestination(obj)) { Boolean isMain = MissionManager.IsMainMissionDestination(obj); missionArrows.Add(new DirectionArrow(spriteSheet, obj.position, playerpos, isMain)); } else if (MissionManager.IsNoMainMissionActive()) { foreach (String str in availableMainMissionLocationNames) { if (obj.name.ToLower().Equals(str.ToLower())) { availableMainMissionArrows.Add(new DirectionArrow(spriteSheet, obj.position, playerpos, true)); break; } } } } playerpos = game.player.position; Origin = new Vector2(cameraPos.X + Game1.ScreenSize.X / 2 - background.SourceRectangle.Value.Width, cameraPos.Y + Game1.ScreenSize.Y / 2 - background.SourceRectangle.Value.Height); }
public override void MissionLogic() { base.MissionLogic(); if (StatsManager.gameMode != GameMode.Develop && !CollisionDetection.IsPointInsideCircle(Game.player.position, MissionArea, MissionAreaRadius) && !Game.player.HyperspeedOn) { PopupHandler.DisplayPortraitMessage(PortraitID.Berr, "Where are you going? Follow the blinking gold dot on you radar to get to the mining station."); Game.player.BounceBack(); } if (downedShips == -1 && Game.stateManager.shooterState.GetLevel("RebelsInTheMeteors").IsMapCompleted) { downedShips = Game.stateManager.shooterState.GetLevel("RebelsInTheMeteors").enemiesKilledByPlayer; int bonus = downedShips * DownedShipsMultiplier; ReplaceObjectiveText(TextType.Completed, MoneyID, MoneyReward); ReplaceObjectiveText(TextType.Completed, BonusID, bonus); moneyReward += bonus; } }
//Kontrollerar "shooting" private void UpdateShooting(GameTime gameTime) { //Slutar skjuta mot objekt utanfor SightRange if (ShootObject != null) { if (!CollisionDetection.IsPointInsideCircle(ShootObject.Position, Position, SightRange)) { ShootObject = null; } } //Styr via prioritetsordningen i CheckPriority vilket objekt som ska laggas in i ShootObject. foreach (GameObjectVertical obj in Game.stateManager.shooterState.gameObjects) { if (!this.IsKilled && obj.ObjectName.Equals("Player")) { if (CollisionDetection.IsPointInsideCircle(obj.Position, Position, SightRange)) { ShootObject = obj; gunAngle = (float)Math.Atan2((double)(ShootObject.Position.Y - PositionY), (double)(ShootObject.Position.X - PositionX)); } } } //Skjuter om det finns att skjuta pa if (ShootObject != null) { HandleShooting(gameTime); } else { IdleMovement(); } }
public List <GameObjectVertical> GetTargetsWithinRange(float range) { var allGameObjects = Game.stateManager.shooterState.gameObjects; var targetsWithinRange = new List <GameObjectVertical>(); foreach (String type in ShootObjectTypes) { foreach (GameObjectVertical obj in allGameObjects) { if (obj.ObjectClass.Equals(type)) { if (CollisionDetection.IsPointInsideCircle(obj.Position, Position, range)) { if (CheckIfValidAimTarget(obj)) { targetsWithinRange.Add(obj); } } } } } return(targetsWithinRange); }
public void Avoid() { foreach (GameObjectVertical obj in Game.stateManager.shooterState.gameObjects) { if (obj.ObjectClass == "enemy" || obj.ObjectClass == "enemyBullet") { if (CollisionDetection.IsPointInsideCircle(obj.Position, ship.Position, AvoidRadius)) { AvoidList.Add(obj); } } } if (AvoidList.Count > 0) { objToAvoid = MathFunctions.ReturnClosestObject(ship, AvoidRadius, AvoidList); } if (objToAvoid == target) { Behaviour.GarbageIgnoreList.Add(target); Behaviour.UpdateIgnoreList(); target = null; } if (AvoidList.Count > 0 && objToAvoid != null) { //enemy is to the right on AI-ship's center if (objToAvoid.BoundingX + objToAvoid.BoundingWidth >= ship.PositionX && objToAvoid.BoundingX - 20 < ship.PositionX + ship.CenterPointX) { if (ship.BoundingX > (Game1.ScreenSize.X - Game.stateManager.shooterState.CurrentLevel.LevelWidth) / 2 + 20) { ship.Move(new Vector2(-1, ship.DirectionY)); } } else if (objToAvoid.BoundingX < ship.PositionX && objToAvoid.BoundingX + objToAvoid.BoundingWidth + 20 > ship.BoundingX) { if (ship.BoundingX + ship.BoundingWidth < Game.stateManager.shooterState.CurrentLevel.LevelWidth - 20) { ship.Move(new Vector2(1, ship.DirectionY)); } } else { ship.Stop("x"); } } for (int i = 0; i < AvoidList.Count; i++) { if (AvoidList[i].IsKilled || AvoidList[i].IsOutside || !CollisionDetection.IsPointInsideCircle(AvoidList[i].Position, ship.Position, AvoidRadius)) { GarbageAvoidList.Add(AvoidList[i]); if (objToAvoid == AvoidList[i]) { objToAvoid = null; } } } foreach (GameObjectVertical obj in GarbageAvoidList) { AvoidList.Remove(obj); } GarbageAvoidList.Clear(); }