Camera tweaked, flawless now
This commit is contained in:
+67
-64
@@ -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));
|
||||
// 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(this->getPosition().y> window->getSize().y / 2) {
|
||||
this->camera->MoveCamera(window, sf::Vector2f(0, this->velocity.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));
|
||||
}
|
||||
//
|
||||
|
||||
// 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)
|
||||
}
|
||||
|
||||
Player::~Player()
|
||||
|
||||
+3
-1
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user