Camera tweaked, flawless now
This commit is contained in:
+69
-66
@@ -1,7 +1,8 @@
|
|||||||
#include "player.h"
|
#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->entityManager = entityManager;
|
||||||
|
this->map = map;
|
||||||
this->camera = camera;
|
this->camera = camera;
|
||||||
|
|
||||||
this->Load("data/gfx/player.png");
|
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) {
|
void Player::Update(sf::RenderWindow* window, InputManager inputManager) {
|
||||||
// Store currect location of the player for the Camera to use
|
// 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
|
// Update player velocity
|
||||||
this->velocity.x = inputManager.IsPressed(InputManager::Right) * this->speed -
|
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;
|
inputManager.IsPressed(InputManager::Up) * this->speed;
|
||||||
|
|
||||||
// Update camera position
|
// Update camera position
|
||||||
// VERSION 1!
|
//|------------|--------------|------------|
|
||||||
// if(this->getPosition().x + 16 > window->getSize().x / 2) {
|
//| 1 | 2 | 1 |
|
||||||
// this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, 0));
|
//| | | |
|
||||||
// }
|
//|------------x--------------|------------|
|
||||||
// else {
|
//| 3 | 4 | 3 |
|
||||||
// camera->SetCenter(window, sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2));
|
//| | | |
|
||||||
// }
|
//|------------|--------------y------------|
|
||||||
|
//| 1 | 2 | 1 |
|
||||||
|
//| | | |
|
||||||
|
//|------------|--------------|------------|
|
||||||
|
|
||||||
// if(this->getPosition().y + 16 > window->getSize().y / 2) {
|
// Get window center start and end
|
||||||
// this->camera->MoveCamera(window, sf::Vector2f(0, this->velocity.y));
|
// x on map scetch
|
||||||
// }
|
sf::Vector2f windowCenterStart = sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2);
|
||||||
// else {
|
// y on map scetch
|
||||||
// camera->SetCenter(window, sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2));
|
sf::Vector2f windowCenterEnd = sf::Vector2f(map->width * map->tilewidth - windowCenterStart.x,
|
||||||
// }
|
map->height * map->tileheight - windowCenterStart.y);
|
||||||
//
|
|
||||||
|
|
||||||
// VERSION 2!
|
// If Player is in the center (4)
|
||||||
// if(this->getPosition().x < window->getSize().x / 2
|
if(playerPosition.x > windowCenterStart.x
|
||||||
// && this->getPosition().y < window->getSize().y / 2) {
|
&& playerPosition.y > windowCenterStart.y
|
||||||
// camera->SetCenter(window, sf::Vector2f(window->getSize().x / 2, window->getSize().y / 2));
|
&& 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));
|
|
||||||
// }
|
|
||||||
// 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(this->getPosition().x> window->getSize().x / 2
|
// If Player is in the edge (2,3)
|
||||||
&& this->getPosition().y> window->getSize().y / 2) {
|
// Middle Top
|
||||||
//this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, this->velocity.y));
|
else if(playerPosition.x > windowCenterStart.x
|
||||||
camera->SetCenter(window, sf::Vector2f(this->getPosition().x, this->getPosition().y));
|
&& playerPosition.x < windowCenterEnd.x
|
||||||
|
&& playerPosition.y < windowCenterStart.y) {
|
||||||
|
camera->SetCenter(window, sf::Vector2f(playerPosition.x, windowCenterStart.y));
|
||||||
}
|
}
|
||||||
else {
|
// Middle Bottom
|
||||||
if(this->getPosition().x> window->getSize().x / 2) {
|
else if(playerPosition.x > windowCenterStart.x
|
||||||
this->camera->MoveCamera(window, sf::Vector2f(this->velocity.x, 0));
|
&& playerPosition.x < windowCenterEnd.x
|
||||||
}
|
&& playerPosition.y > windowCenterEnd.y) {
|
||||||
|
camera->SetCenter(window, sf::Vector2f(playerPosition.x, windowCenterEnd.y));
|
||||||
if(this->getPosition().y> window->getSize().y / 2) {
|
}
|
||||||
this->camera->MoveCamera(window, sf::Vector2f(0, this->velocity.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!
|
// If Player is in one of the corners (1)
|
||||||
// @Todo
|
// Top Left
|
||||||
//
|
else if(playerPosition.x < windowCenterStart.x
|
||||||
|
&& playerPosition.y < windowCenterStart.y) {
|
||||||
// sf::Vertex2f tempPlayerLoc;
|
camera->SetCenter(window, sf::Vector2f(windowCenterStart.x, windowCenterStart.y));
|
||||||
// if(playerLoc.x != edge X)
|
}
|
||||||
// {
|
// Top Right
|
||||||
// tempPlayerLoc.x = playerLoc.x
|
else if(playerPosition.x > windowCenterEnd.x
|
||||||
// }
|
&& playerPosition.y < windowCenterStart.y) {
|
||||||
// if(playerLoc.y != edge Y)
|
camera->SetCenter(window, sf::Vector2f(windowCenterEnd.x, windowCenterStart.y));
|
||||||
// {
|
}
|
||||||
// tempPlayerLoc.y = playerLoc.y
|
// Bottom Left
|
||||||
// }
|
else if(playerPosition.x < windowCenterStart.x
|
||||||
// view->setCenter(playerLoc)
|
&& 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()
|
Player::~Player()
|
||||||
|
|||||||
+3
-1
@@ -7,11 +7,12 @@
|
|||||||
#include "camera.h"
|
#include "camera.h"
|
||||||
#include "entitymanager.h"
|
#include "entitymanager.h"
|
||||||
#include "inputmanager.h"
|
#include "inputmanager.h"
|
||||||
|
#include "map.h"
|
||||||
|
|
||||||
class Player : public Entity
|
class Player : public Entity
|
||||||
{
|
{
|
||||||
public:
|
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);
|
void Update(sf::RenderWindow *window, InputManager inputManager);
|
||||||
float SetSpeed();
|
float SetSpeed();
|
||||||
int GetHealth();
|
int GetHealth();
|
||||||
@@ -20,6 +21,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
EntityManager* entityManager;
|
EntityManager* entityManager;
|
||||||
|
Map* map;
|
||||||
Camera* camera;
|
Camera* camera;
|
||||||
int health;
|
int health;
|
||||||
int maxHealth;
|
int maxHealth;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ void MainGame::Initialize(sf::RenderWindow* window) {
|
|||||||
this->camera->SetNewView(window);
|
this->camera->SetNewView(window);
|
||||||
|
|
||||||
// Load Player
|
// 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);
|
this->entityManager->AddEntity("Player", this->player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user