Ejemplo n.º 1
0
        public override void DoTurn()
        {
            if (isAggro && IsVisible())
            {
                // Finds the direction to move in that will get closer to the player
                Vector2 playerPos = ownerMap.Player.pos;

                if(ownerMap.checkLOS((int)pos.X, (int)pos.Y, (int)playerPos.X, (int)playerPos.Y))
                {
                    Vector2 newPos = pos;

                    int xDist = (int)(pos.X - playerPos.X);
                    int yDist = (int)(pos.Y - playerPos.Y);

                    int xDir = xDist > 0 ? 1 : -1;
                    int yDir = yDist > 0 ? 1 : -1;

                    bool canMoveX = !ownerMap.checkMovability(pos + new Vector2(-xDir, 0));
                    bool canMoveY = !ownerMap.checkMovability(pos + new Vector2(0, -yDir));

                    if (Math.Abs(xDist) > Math.Abs(yDist))
                    {
                        if (canMoveX)
                        {
                            int dir = xDist > 0 ? 1 : -1;
                            newPos += new Vector2(-dir, 0);
                        }
                        else if (canMoveY)
                        {
                            int dir = yDist > 0 ? 1 : -1;
                            newPos += new Vector2(0, -dir);
                        }
                    }
                    else
                    {
                        if (canMoveY)
                        {
                            int dir = yDist > 0 ? 1 : -1;
                            newPos += new Vector2(0, -dir);
                        }
                        else if (canMoveX)
                        {
                            int dir = xDist > 0 ? 1 : -1;
                            newPos += new Vector2(-dir, 0);
                        }
                    }

                    // Check to see if we can walk here
                    if (newPos != pos)
                    {
                        if (newPos != playerPos)
                        {
                            action = new MoveAction(0.2f, newPos, this);
                        }
                        else
                        {
                            MeleeAttack(ownerMap.Player);
                        }
                    }
                }
            }

            base.DoTurn();
        }
Ejemplo n.º 2
0
        public override void DoTurn()
        {
            if (isAggro)
            {
                // Finds the direction to move in that will get closer to the player
                Vector2 playerPos = GameManager.GetInstance().Camera.pos;
                Vector2 newPos = pos;

                int xDist = (int)(pos.X - playerPos.X);
                int yDist = (int)(pos.Y - playerPos.Y);

                int xDir = xDist > 0 ? 1 : -1;
                int yDir = yDist > 0 ? 1 : -1;

                bool canMoveX = !GameManager.GetInstance().Map.checkMovability(pos + new Vector2(-xDir, 0));
                bool canMoveY = !GameManager.GetInstance().Map.checkMovability(pos + new Vector2(0, -yDir));

                if (Math.Abs(xDist) > Math.Abs(yDist))
                {
                    if (canMoveX)
                    {
                        int dir = xDist > 0 ? 1 : -1;
                        newPos += new Vector2(-dir, 0);
                    }
                    else if (canMoveY)
                    {
                        int dir = yDist > 0 ? 1 : -1;
                        newPos += new Vector2(0, -dir);
                    }
                }
                else
                {
                    if (canMoveY)
                    {
                        int dir = yDist > 0 ? 1 : -1;
                        newPos += new Vector2(0, -dir);
                    }
                    else if (canMoveX)
                    {
                        int dir = xDist > 0 ? 1 : -1;
                        newPos += new Vector2(-dir, 0);
                    }
                }

                // Check to see if we can walk here
                if (newPos != pos)
                {
                    if (newPos != playerPos)
                    {
                        action = new MoveAction(0.2f, newPos, this);
                    }
                    else
                    {
                        if (attributes.CheckHit())
                        {
                            MeleeAttack(GameManager.GetInstance().Player);
                        }
                        else
                        {
                            GameManager.GetInstance().AddMessage(String.Format("The {0} attacks, but misses.", Name));
                        }
                    }
                }
            }

            base.DoTurn();
        }