Exemplo n.º 1
0
        //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);
        }
Exemplo n.º 2
0
        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);
        }
        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();
        }
Exemplo n.º 4
0
        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 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();
                    }
                }
            }
        }
Exemplo n.º 7
0
        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;
            }
        }
Exemplo n.º 9
0
        //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();
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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();
        }