Exemplo n.º 1
0
        /// <summary>
        /// This method causes an entity to move a certain distance away from the 
        /// center of the toEntity.
        /// </summary>
        /// <param name="toEntity">Entity to move to.</param>
        /// <param name="distance">Distance to move away.</param>
        public virtual void MoveDistanceInFrontOfEntity(GameEntitity toEntity, int distance)
        {
            if (toEntity == null)
                return;
            Vector2 targetPos = Vector2.Add(toEntity.m_WorldPosition, toEntity.m_EntityCenter);
            DIRECTION movementDir;
            FaceEntity(toEntity);

            m_MovementDelta.X = 0;
            m_MovementDelta.Y = 0;
            if (m_WorldPosition.Y < targetPos.Y)
            {
                movementDir = DIRECTION.DOWN;
                m_MovementDelta.X = 0;
                m_MovementDelta.Y = 1;

                targetPos.Y -= distance;
                //targetPos.Y -= m_SpriteSize.Y / 2;

                if (m_WorldPosition.X < targetPos.X)
                {
                    movementDir = DIRECTION.DOWN_RIGHT;
                    m_MovementDelta.X = 1;
                    targetPos.X -= distance;
                    targetPos.X -= m_SpriteSize.X;
                }
                else if (m_WorldPosition.X > targetPos.X)
                {
                    movementDir = DIRECTION.DOWN_LEFT;
                    m_MovementDelta.X = -1;
                    targetPos.X += distance;
                    //targetPos.X += m_SpriteSize.X / 8;
                }

            }
            else if (m_WorldPosition.Y == targetPos.Y)
            {
                movementDir = m_EntityDircetion;
                m_MovementDelta.X = 0;
                m_MovementDelta.Y = 0;

                if (m_WorldPosition.X < targetPos.X)
                {
                    movementDir = DIRECTION.RIGHT;
                    m_MovementDelta.X = 1;
                    targetPos.X -= distance;
                    targetPos.X -= m_SpriteSize.X;

                }
                else if (m_WorldPosition.X > targetPos.X)
                {
                    movementDir = DIRECTION.LEFT;
                    m_MovementDelta.X = -1;
                    targetPos.X += distance;
                    //targetPos.X += m_SpriteSize.X / 8;

                }
            }
            else
            {
                movementDir = DIRECTION.UP;

                m_MovementDelta.X = 0;
                m_MovementDelta.Y = -1;
                targetPos.Y += distance;
                //targetPos.Y += m_SpriteSize.Y / 2;

                if (m_WorldPosition.X < targetPos.X)
                {
                    movementDir = DIRECTION.UP_RIGHT;
                    m_MovementDelta.X = 1;
                    targetPos.X -= distance;
                    targetPos.X -= m_SpriteSize.X;
                }
                else if (m_WorldPosition.X > targetPos.X)
                {
                    movementDir = DIRECTION.UP_LEFT;
                    m_MovementDelta.X = -1;
                    targetPos.X += distance;
                    //targetPos.X += m_SpriteSize.X / 8;
                }
            }
            m_EntityDircetion = movementDir;
            m_DestinationPosition = targetPos;
        }
Exemplo n.º 2
0
        /// <summary>
        /// This method changes the direction of the entity
        /// to face the desired entity.
        /// </summary>
        /// <param name="entity"></param>
        public void FaceEntity(GameEntitity entity)
        {
            if (entity == null)
                return;

            DIRECTION movementDir = DIRECTION.UP;
            Vector2 targetPos = Vector2.Add( entity.m_WorldPosition, entity.m_EntityCenter);

            m_TargetEntity = entity;

            if (m_WorldPosition.Y < targetPos.Y)
            {
                movementDir = DIRECTION.DOWN;
            }
            else if (m_WorldPosition.Y > targetPos.Y)
            {
                movementDir = DIRECTION.UP;
            }
            else
            {

                if (m_WorldPosition.X < entity.m_WorldPosition.X)//targetPos.X)
                {
                    if (movementDir == DIRECTION.DOWN)
                        movementDir = DIRECTION.DOWN_RIGHT;
                    else if (movementDir == DIRECTION.UP)
                        movementDir = DIRECTION.UP_RIGHT;
                    else
                        movementDir = DIRECTION.RIGHT;
                }
                else if (m_WorldPosition.X > entity.m_WorldPosition.X)//targetPos.X)
                {
                    if (movementDir == DIRECTION.DOWN)
                        movementDir = DIRECTION.DOWN_LEFT;
                    else if (movementDir == DIRECTION.UP)
                        movementDir = DIRECTION.UP_LEFT;
                    else
                        movementDir = DIRECTION.LEFT;
                }
                else
                    movementDir = m_EntityDircetion;
            }

            m_EntityDircetion = movementDir;
        }