/// <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; }
/// <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; }