Browse Source

Camera tweaked, flawless now

master
Riyyi 9 years ago
parent
commit
3b86ba2556
  1. 135
      src/player.cpp
  2. 4
      src/player.h
  3. 2
      src/state/maingame.cpp

135
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()

4
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;

2
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);
}

Loading…
Cancel
Save