diff options
Diffstat (limited to 'engine/player.cpp')
-rw-r--r-- | engine/player.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/engine/player.cpp b/engine/player.cpp new file mode 100644 index 0000000..4a159ca --- /dev/null +++ b/engine/player.cpp @@ -0,0 +1,49 @@ +#ifndef __APPLE__ +#include <GL/gl.h> +#else +#include <OpenGL/gl.h> +#endif +#include <cmath> +#include <SDL/SDL.h> + +#include "player.h" +#include "texturesdl.h" +#include "config.h" + +Player::Player() { + x = 0.5; + y = 0.1; + move_factor = 0.005; + focus_factor = 0.5; + texture = new TextureSDL("textures/player.png"); +} + +void Player::draw() { + glPointSize(32.0); + + glColor4f(1, 1, 1, 1); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, texture->tex()); + + glBegin(GL_POINTS); + glVertex2f(x, y); + glEnd(); + + glDisable(GL_TEXTURE_2D); +} + +void Player::update() { + Uint8 *keystate = SDL_GetKeyState(NULL); + float factor = move_factor * (SDL_GetModState() & KMOD_SHIFT ? focus_factor : 1); + + float x_speed = factor * keystate[SDLK_RIGHT] - factor * keystate[SDLK_LEFT]; + float y_speed = factor * keystate[SDLK_UP] - factor * keystate[SDLK_DOWN]; + + if(x_speed && y_speed) { + x_speed /= sqrtf(2); + y_speed /= sqrtf(2); + } + + x = fmaxf(fminf(x + x_speed, 1.0 - 0.018), 0.018); + y = fmaxf(fminf(y + y_speed, Config::viewport_aspect - 0.018), 0.018); +} |