diff --git a/src/player.cpp b/src/player.cpp index 2055099..9ff56da 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1,7 +1,8 @@ #include "player.h" -Player::Player(EntityManager* entityManager, Camera *camera, float x, float y) { +Player::Player(EntityManager* entityManager, Map *map, Camera *camera, float x, float y) { this->entityManager = entityManager; + this->map = map; this->camera = camera; this->Load("data/gfx/player.png"); @@ -11,7 +12,7 @@ Player::Player(EntityManager* entityManager, Camera *camera, float x, float y) { void Player::Update(sf::RenderWindow* window, InputManager inputManager) { // Store currect location of the player for the Camera to use - sf::Vector2f cameraPosition = sf::Vector2f(this->getPosition().x, this->getPosition().y); + sf::Vector2f playerPosition = sf::Vector2f(this->getPosition().x, this->getPosition().y);; // Update player velocity this->velocity.x = inputManager.IsPressed(InputManager::Right) * this->speed - @@ -20,77 +21,79 @@ void Player::Update(sf::RenderWindow* window, InputManager inputManager) { inputManager.IsPressed(InputManager::Up) * this->speed; // Update camera position - // VERSION 1! -// if(this->getPosition().x + 16 > window->getSize().x / 2) { -// this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, 0)); -// } -// else { -// camera->SetCenter(window, sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2)); -// } + //|------------|--------------|------------| + //| 1 | 2 | 1 | + //| | | | + //|------------x--------------|------------| + //| 3 | 4 | 3 | + //| | | | + //|------------|--------------y------------| + //| 1 | 2 | 1 | + //| | | | + //|------------|--------------|------------| -// if(this->getPosition().y + 16 > window->getSize().y / 2) { -// this->camera->MoveCamera(window, sf::Vector2f(0, this->velocity.y)); -// } -// else { -// camera->SetCenter(window, sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2)); -// } - // + // 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); - // VERSION 2! -// if(this->getPosition().x < window->getSize().x / 2 -// && this->getPosition().y < window->getSize().y / 2) { -// camera->SetCenter(window, sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2)); -// } - -// if(this->getPosition().x> window->getSize().x / 2 -// && this->getPosition().y> window->getSize().y / 2) { -// //this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, this->velocity.y)); -// camera->SetCenter(window, sf::Vector2f(this->getPosition().x, this->getPosition().y)); -// } -// else if(this->getPosition().x> window->getSize().x / 2) { -// this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, 0)); -// } -// else if(this->getPosition().y> window->getSize().y / 2) { -// this->camera->MoveCamera(window, sf::Vector2f(0, this->velocity.y)); -// } - // - - // VERSION 3! - if(this->getPosition().x < window->getSize().x / 2 - && this->getPosition().y < window->getSize().y / 2) { - camera->SetCenter(window, sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2)); + // 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(this->getPosition().x> window->getSize().x / 2 - && this->getPosition().y> window->getSize().y / 2) { - //this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, this->velocity.y)); - camera->SetCenter(window, sf::Vector2f(this->getPosition().x, this->getPosition().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)); } - else { - if(this->getPosition().x> window->getSize().x / 2) { - this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, 0)); - } - - if(this->getPosition().y> window->getSize().y / 2) { - this->camera->MoveCamera(window, sf::Vector2f(0, this->velocity.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)); } - // - - // VERSION 4! - // @Todo - // -// sf::Vertex2f tempPlayerLoc; -// if(playerLoc.x != edge X) -// { -// tempPlayerLoc.x = playerLoc.x -// } -// if(playerLoc.y != edge Y) -// { -// tempPlayerLoc.y = playerLoc.y -// } -// view->setCenter(playerLoc) + // 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)); + } } Player::~Player() diff --git a/src/player.h b/src/player.h index 0ca384c..845fcc5 100644 --- a/src/player.h +++ b/src/player.h @@ -7,11 +7,12 @@ #include "camera.h" #include "entitymanager.h" #include "inputmanager.h" +#include "map.h" class Player : public Entity { public: - Player(EntityManager* entityManager, Camera* camera, float x = 0, float y = 0); + Player(EntityManager* entityManager, Map* map, Camera* camera, float x = 0, float y = 0); void Update(sf::RenderWindow *window, InputManager inputManager); float SetSpeed(); int GetHealth(); @@ -20,6 +21,7 @@ public: private: EntityManager* entityManager; + Map* map; Camera* camera; int health; int maxHealth; diff --git a/src/state/maingame.cpp b/src/state/maingame.cpp index 10156e4..0f09351 100644 --- a/src/state/maingame.cpp +++ b/src/state/maingame.cpp @@ -25,7 +25,7 @@ void MainGame::Initialize(sf::RenderWindow* window) { this->camera->SetNewView(window); // Load Player - this->player = new Player(this->entityManager, this->camera, 100, 100); + this->player = new Player(this->entityManager, this->map, this->camera, 100, 100); this->entityManager->AddEntity("Player", this->player); }