Browse Source

walking

master
alistair 2 years ago
parent
commit
04ce247779
  1. 11
      src/main.cpp
  2. 46
      src/player.cpp
  3. 17
      src/player.h

11
src/main.cpp

@ -68,6 +68,7 @@ class SDLGLGLWindow { @@ -68,6 +68,7 @@ class SDLGLGLWindow {
public:
level * running_level;
std::shared_ptr<player::player> player_data;
Shader *skyboxShader;
@ -164,7 +165,7 @@ class SDLGLGLWindow { @@ -164,7 +165,7 @@ class SDLGLGLWindow {
setup_msaa_framebuffers();
camera = player::get_camera();
initGL();
player_data = player::get_player();
@ -510,16 +511,16 @@ int main(int argc, char **argv) { @@ -510,16 +511,16 @@ int main(int argc, char **argv) {
quit = true;
break;
case SDL_SCANCODE_W:
cont.camera->pos += camera_speed * cont.camera->front;
cont.player_data->move(camera_speed, glm::vec3(0,0,1));
break;
case SDL_SCANCODE_S:
cont.camera->pos -= camera_speed * cont.camera->front;
cont.player_data->move(camera_speed, glm::vec3(0,0,-1));
break;
case SDL_SCANCODE_A:
cont.camera->pos -= camera_speed * glm::cross(cont.camera->front, cont.camera->up);
cont.player_data->move(camera_speed, glm::vec3(-1,0,0));
break;
case SDL_SCANCODE_D:
cont.camera->pos += camera_speed * glm::cross(cont.camera->front, cont.camera->up);
cont.player_data->move(camera_speed, glm::vec3(1,0,0));
break;
case SDL_SCANCODE_R:
glCheckError();

46
src/player.cpp

@ -1,8 +1,11 @@ @@ -1,8 +1,11 @@
#include "player.h"
#include <glm/geometric.hpp>
namespace player {
/* player's camera */
std::shared_ptr<camera> player_camera = std::shared_ptr<camera>(new camera {
glm::vec3(0.0f, 0.0f, 3.0f),
glm::vec3(0.0f, 0.0f, -1.0f),
@ -35,4 +38,47 @@ namespace player { @@ -35,4 +38,47 @@ namespace player {
/* player */
std::shared_ptr<player> player_data = std::shared_ptr<player>(new player {});
player::player() {
move_mode = movement::WALKING;
cam = get_camera();
}
std::shared_ptr<player> get_player() {
return player_data;
}
void player::update() {
cam->pos = physics.pos;
}
/*
* Move in direction relative to player.
*/
void player::move(float velocity, glm::vec3 direction) {
glm::vec3 amount {};
direction = glm::normalize(direction);
auto left_direction = glm::cross(cam->front, cam->up);
amount += velocity * direction.x * left_direction;
amount += velocity * direction.y * cam->up;
amount += velocity * direction.z * cam->front;
if (move_mode == movement::WALKING) {
amount *= glm::vec3(1,0,1);
}
physics.pos += amount;
cam->pos = physics.pos;
}
};

17
src/player.h

@ -3,23 +3,34 @@ @@ -3,23 +3,34 @@
#pragma once
#include <memory>
#include "shaders.h"
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include "shaders.h"
#include "entity.h"
namespace player {
class camera;
class player;
enum class movement {
WALKING,
FLYING
};
class player {
movement move_mode = movement::WALKING;
movement move_mode;
physics_model physics {};
std::shared_ptr<camera> cam;
public:
player();
void move(float velocity, glm::vec3 direction);
void update();
};
class camera {
public:
glm::vec3 pos;
@ -47,5 +58,7 @@ namespace player { @@ -47,5 +58,7 @@ namespace player {
std::shared_ptr<camera> get_camera();
std::shared_ptr<player> get_player();
}

Loading…
Cancel
Save