|
|
|
@ -7,99 +7,22 @@ Player::Player(EntityManager* entityManager, Map *map, Camera *camera, float x,
|
|
|
|
|
|
|
|
|
|
this->Load("data/gfx/player.png"); |
|
|
|
|
this->setPosition(x, y); |
|
|
|
|
this->speed = 2.5f; |
|
|
|
|
this->speed = 0.00015f; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Player::Update(sf::RenderWindow* window, InputManager inputManager) { |
|
|
|
|
// Store currect location of the player for the Camera to use
|
|
|
|
|
sf::Vector2f playerPosition = sf::Vector2f(this->getPosition().x, this->getPosition().y);; |
|
|
|
|
|
|
|
|
|
void Player::Update(sf::RenderWindow* window, InputManager inputManager, int elapsedTime) { |
|
|
|
|
float speed = this->speed * elapsedTime; |
|
|
|
|
// Update player velocity
|
|
|
|
|
this->velocity.x = inputManager.IsPressed(InputManager::Right) * this->speed - |
|
|
|
|
inputManager.IsPressed(InputManager::Left) * this->speed; |
|
|
|
|
this->velocity.y = inputManager.IsPressed(InputManager::Down) * this->speed - |
|
|
|
|
inputManager.IsPressed(InputManager::Up) * this->speed; |
|
|
|
|
this->velocity.x = inputManager.IsPressed(InputManager::Right) * speed - |
|
|
|
|
inputManager.IsPressed(InputManager::Left) * speed; |
|
|
|
|
this->velocity.y = inputManager.IsPressed(InputManager::Down) * speed - |
|
|
|
|
inputManager.IsPressed(InputManager::Up) * speed; |
|
|
|
|
|
|
|
|
|
// Set correct speed on diagonal movement
|
|
|
|
|
if((this->velocity.x == this->speed || this->velocity.x == -this->speed) |
|
|
|
|
&& (this->velocity.y == this->speed || this->velocity.y == -this->speed)) { |
|
|
|
|
this->velocity.x *= sqrt(this->speed * 2 + this->speed * 2) / (this->speed * 2); |
|
|
|
|
this->velocity.y *= sqrt(this->speed * 2 + this->speed * 2) / (this->speed * 2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Update camera position
|
|
|
|
|
//|------------|--------------|------------|
|
|
|
|
|
//| 1 | 2 | 1 |
|
|
|
|
|
//| | | |
|
|
|
|
|
//|------------x--------------|------------|
|
|
|
|
|
//| 3 | 4 | 3 |
|
|
|
|
|
//| | | |
|
|
|
|
|
//|------------|--------------y------------|
|
|
|
|
|
//| 1 | 2 | 1 |
|
|
|
|
|
//| | | |
|
|
|
|
|
//|------------|--------------|------------|
|
|
|
|
|
|
|
|
|
|
// Get window center start and end
|
|
|
|
|
// x on map scetch
|
|
|
|
|
sf::Vector2f windowCenterStart = sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2); |
|
|
|
|
// y on map scetch
|
|
|
|
|
sf::Vector2f windowCenterEnd = sf::Vector2f(map->width * map->tilewidth - windowCenterStart.x, |
|
|
|
|
map->height * map->tileheight - windowCenterStart.y); |
|
|
|
|
|
|
|
|
|
// If Player is in the center (4)
|
|
|
|
|
if(playerPosition.x > windowCenterStart.x |
|
|
|
|
&& playerPosition.y > windowCenterStart.y |
|
|
|
|
&& playerPosition.x < windowCenterEnd.x |
|
|
|
|
&& playerPosition.y < windowCenterEnd.y) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(playerPosition.x, playerPosition.y)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// If Player is in the edge (2,3)
|
|
|
|
|
// Middle Top
|
|
|
|
|
else if(playerPosition.x > windowCenterStart.x |
|
|
|
|
&& playerPosition.x < windowCenterEnd.x |
|
|
|
|
&& playerPosition.y < windowCenterStart.y) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(playerPosition.x, windowCenterStart.y)); |
|
|
|
|
} |
|
|
|
|
// Middle Bottom
|
|
|
|
|
else if(playerPosition.x > windowCenterStart.x |
|
|
|
|
&& playerPosition.x < windowCenterEnd.x |
|
|
|
|
&& playerPosition.y > windowCenterEnd.y) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(playerPosition.x, windowCenterEnd.y)); |
|
|
|
|
} |
|
|
|
|
// Middle Left
|
|
|
|
|
else if(playerPosition.y > windowCenterStart.y |
|
|
|
|
&& playerPosition.y < windowCenterEnd.y |
|
|
|
|
&& playerPosition.x < windowCenterStart.x) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(windowCenterStart.x, playerPosition.y)); |
|
|
|
|
} |
|
|
|
|
// Middle Right
|
|
|
|
|
else if(playerPosition.y > windowCenterStart.y |
|
|
|
|
&& playerPosition.y < windowCenterEnd.y |
|
|
|
|
&& playerPosition.x > windowCenterEnd.x) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(windowCenterEnd.x, playerPosition.y)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// If Player is in one of the corners (1)
|
|
|
|
|
// Top Left
|
|
|
|
|
else if(playerPosition.x < windowCenterStart.x |
|
|
|
|
&& playerPosition.y < windowCenterStart.y) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(windowCenterStart.x, windowCenterStart.y)); |
|
|
|
|
} |
|
|
|
|
// Top Right
|
|
|
|
|
else if(playerPosition.x > windowCenterEnd.x |
|
|
|
|
&& playerPosition.y < windowCenterStart.y) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(windowCenterEnd.x, windowCenterStart.y)); |
|
|
|
|
} |
|
|
|
|
// Bottom Left
|
|
|
|
|
else if(playerPosition.x < windowCenterStart.x |
|
|
|
|
&& playerPosition.y > windowCenterEnd.y) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(windowCenterStart.x, windowCenterEnd.y)); |
|
|
|
|
} |
|
|
|
|
// Bottom Right
|
|
|
|
|
else if(playerPosition.x > windowCenterEnd.x |
|
|
|
|
&& playerPosition.y > windowCenterEnd.y) { |
|
|
|
|
camera->SetCenter(window, sf::Vector2f(windowCenterEnd.x, windowCenterEnd.y)); |
|
|
|
|
if((this->velocity.x == speed || this->velocity.x == -speed) |
|
|
|
|
&& (this->velocity.y == speed || this->velocity.y == -speed)) { |
|
|
|
|
this->velocity.x *= .75; |
|
|
|
|
this->velocity.y *= .75; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|