Nouvelles textures.
@ -42,9 +42,9 @@ void Engine::Init()
|
||||
void Engine::DeInit() { }
|
||||
|
||||
void Engine::LoadResource() {
|
||||
LoadTexture(m_textureFloor, TEXTURE_PATH "floortile.png");
|
||||
LoadTexture(m_textureSkybox, TEXTURE_PATH "curtains.png");
|
||||
LoadTexture(m_textureCube, TEXTURE_PATH "laura.png");
|
||||
LoadTexture(m_textureFloor, TEXTURE_PATH "grass.png");
|
||||
LoadTexture(m_textureSkybox, TEXTURE_PATH "skybox.png");
|
||||
LoadTexture(m_textureCube, TEXTURE_PATH "metal.png");
|
||||
}
|
||||
|
||||
void Engine::UnloadResource()
|
||||
@ -76,59 +76,59 @@ void Engine::Render(float elapsedTime)
|
||||
glDisable(GL_DEPTH_TEST); // Pour que tout ce qui est dessiné après soit dessiné par-dessus la skybox.
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
glTexCoord2f(0, 1);
|
||||
glTexCoord2f(0, .75f);
|
||||
glVertex3f(5.f, 5.f, 5.f);
|
||||
glTexCoord2f(1, 1);
|
||||
glTexCoord2f(.25f, .75f);
|
||||
glVertex3f(-5.f, 5.f, 5.f);
|
||||
glTexCoord2f(1, 0);
|
||||
glTexCoord2f(.25f, .50f);
|
||||
glVertex3f(-5.f, -5.f, 5.f);
|
||||
glTexCoord2f(0, 0);
|
||||
glTexCoord2f(0, .50f);
|
||||
glVertex3f(5.f, -5.f, 5.f);
|
||||
|
||||
glTexCoord2f(1, 0);
|
||||
glVertex3f(5.f, -5.f, -5.f);
|
||||
glTexCoord2f(0, 0);
|
||||
glVertex3f(-5.f, -5.f, -5.f);
|
||||
glTexCoord2f(0, 1);
|
||||
glVertex3f(-5.f, 5.f, -5.f);
|
||||
glTexCoord2f(1, 1);
|
||||
glVertex3f(5.f, 5.f, -5.f);
|
||||
|
||||
glTexCoord2f(0, 1);
|
||||
glTexCoord2f(.25f, .75f);
|
||||
glVertex3f(-5.f, 5.f, 5.f);
|
||||
glTexCoord2f(1, 1);
|
||||
glTexCoord2f(.50f, .75f);
|
||||
glVertex3f(-5.f, 5.f, -5.f);
|
||||
glTexCoord2f(1, 0);
|
||||
glTexCoord2f(.50f, .50f);
|
||||
glVertex3f(-5.f, -5.f, -5.f);
|
||||
glTexCoord2f(0, 0);
|
||||
glTexCoord2f(.25f, .50f);
|
||||
glVertex3f(-5.f, -5.f, 5.f);
|
||||
|
||||
glTexCoord2f(0, 1);
|
||||
glTexCoord2f(.50f, .75f);
|
||||
glVertex3f(-5.f, 5.f, -5.f);
|
||||
glTexCoord2f(.75f, .75f);
|
||||
glVertex3f(5.f, 5.f, -5.f);
|
||||
glTexCoord2f(1, 1);
|
||||
glTexCoord2f(.75f, .50f);
|
||||
glVertex3f(5.f, -5.f, -5.f);
|
||||
glTexCoord2f(.50f, .50f);
|
||||
glVertex3f(-5.f, -5.f, -5.f);
|
||||
|
||||
glTexCoord2f(.75f, .75f);
|
||||
glVertex3f(5.f, 5.f, -5.f);
|
||||
glTexCoord2f(1, .75f);
|
||||
glVertex3f(5.f, 5.f, 5.f);
|
||||
glTexCoord2f(1, 0);
|
||||
glTexCoord2f(1, .50f);
|
||||
glVertex3f(5.f, -5.f, 5.f);
|
||||
glTexCoord2f(0, 0);
|
||||
glTexCoord2f(.75f, .50f);
|
||||
glVertex3f(5.f, -5.f, -5.f);
|
||||
|
||||
//glTexCoord2f(0, 0); // Pas besoin de cette face pour cette version de la skybox.
|
||||
//glVertex3f(-5.f, 5.f, -5.f);
|
||||
//glTexCoord2f(0, 1);
|
||||
//glVertex3f(-5.f, 5.f, 5.f);
|
||||
//glTexCoord2f(1, 1);
|
||||
//glVertex3f(5.f, 5.f, 5.f);
|
||||
//glTexCoord2f(1, 0);
|
||||
//glVertex3f(5.f, 5.f, -5.f);
|
||||
glTexCoord2f(.25f, 1);
|
||||
glVertex3f(5.f, 5.f, 5.f);
|
||||
glTexCoord2f(.50f, 1);
|
||||
glVertex3f(5.f, 5.f, -5.f);
|
||||
glTexCoord2f(.50f, .75f);
|
||||
glVertex3f(-5.f, 5.f, -5.f);
|
||||
glTexCoord2f(.25f, .75f);
|
||||
glVertex3f(-5.f, 5.f, 5.f);
|
||||
|
||||
//glTexCoord2f(0, 0); // Pas besoin de cette face pour cette version de la skybox.
|
||||
//glVertex3f(-5.f, -5.f, -5.f);
|
||||
//glTexCoord2f(0, 1);
|
||||
//glVertex3f(-5.f, -5.f, 5.f);
|
||||
//glTexCoord2f(1, 1);
|
||||
//glVertex3f(5.f, -5.f, 5.f);
|
||||
//glTexCoord2f(1, 0);
|
||||
//glVertex3f(5.f, -5.f, -5.f);
|
||||
glTexCoord2f(.50f, .50f);
|
||||
glVertex3f(-5.f, -5.f, -5.f);
|
||||
glTexCoord2f(.75f, .50f);
|
||||
glVertex3f(5.f, -5.f, -5.f);
|
||||
glTexCoord2f(.75f, .25f);
|
||||
glVertex3f(5.f, -5.f, 5.f);
|
||||
glTexCoord2f(.50f, .25f);
|
||||
glVertex3f(-5.f, -5.f, 5.f);
|
||||
|
||||
glEnd();
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
@ -137,7 +137,7 @@ void Engine::Render(float elapsedTime)
|
||||
// Plancher
|
||||
// Les vertex doivent etre affiches dans le sens anti-horaire (CCW)
|
||||
m_textureFloor.Bind();
|
||||
float nbRep = 50.f;
|
||||
float nbRep = 1.f;
|
||||
glBegin(GL_QUADS);
|
||||
glNormal3f(0, 1, 0); // Normal vector
|
||||
glTexCoord2f(0, 0);
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 215 KiB |
BIN
SQCSim2021/media/textures/grass.png
Normal file
After Width: | Height: | Size: 656 KiB |
Before Width: | Height: | Size: 313 KiB |
BIN
SQCSim2021/media/textures/metal.png
Normal file
After Width: | Height: | Size: 592 KiB |
Before Width: | Height: | Size: 1.3 MiB |
BIN
SQCSim2021/media/textures/skybox.png
Normal file
After Width: | Height: | Size: 3.4 MiB |
@ -152,7 +152,7 @@ void OpenglContext::ShowCrossCursor() const
|
||||
|
||||
void OpenglContext::InitWindow(int width, int height)
|
||||
{
|
||||
m_app.create((m_fullscreen ? sf::VideoMode::getFullscreenModes()[0] : sf::VideoMode(width, height, 32)), m_title.c_str(), m_fullscreen ? sf::Style::Fullscreen : (sf::Style::Resize | sf::Style::Close), sf::ContextSettings(32, 8, 0));
|
||||
m_app.create((m_fullscreen ? sf::VideoMode::getFullscreenModes()[0] : sf::VideoMode(width, height, 32)), m_title.c_str(), m_fullscreen ? sf::Style::Fullscreen : (sf::Style::Resize | sf::Style::Close), sf::ContextSettings(32, 8, 4));
|
||||
}
|
||||
|
||||
OpenglContext::MOUSE_BUTTON OpenglContext::ConvertMouseButton(sf::Mouse::Button button) const
|
||||
|
@ -8,18 +8,15 @@ void Player::TurnLeftRight(float value) {
|
||||
else if (m_rotX < -45) m_rotX = -45;
|
||||
}
|
||||
|
||||
void Player::TurnTopBottom(float value) {
|
||||
m_rotY += value;
|
||||
}
|
||||
void Player::TurnTopBottom(float value) { m_rotY += value; }
|
||||
|
||||
void Player::Move(bool front, bool back, bool left, bool right, bool jump, float elapsedTime) {
|
||||
float xrotrad, yrotrad;
|
||||
|
||||
if (m_accjmp == 0 && jump && !jumped) {
|
||||
m_accjmp = 0.3;
|
||||
if (jump && !jumped) {
|
||||
m_accjmp = m_jumpheight;
|
||||
jumped = true;
|
||||
}
|
||||
else if (m_position.y > -0.2f && m_accjmp != 0)
|
||||
else if (m_position.y > -0.3f && m_accjmp != 0) {
|
||||
if (m_accjmp > 0.1f) {
|
||||
if (jump) {
|
||||
m_accjmp *= 0.95 - m_accjmp * elapsedTime;
|
||||
@ -34,64 +31,69 @@ void Player::Move(bool front, bool back, bool left, bool right, bool jump, float
|
||||
if (jump) m_accjmp -= elapsedTime * 0.7;
|
||||
else m_accjmp -= elapsedTime * 0.9;
|
||||
}
|
||||
front = false; // Empêche le déplacement dans les airs.
|
||||
back = false;
|
||||
left = false;
|
||||
right = false;
|
||||
}
|
||||
else m_accjmp = 0;
|
||||
|
||||
if (!jump) jumped = false; // Bloque les sauts à répétition en tenant le bouton de saut.
|
||||
|
||||
if (m_position.y < 0) { // Suivi de mouvement pour l'atterrissage.
|
||||
m_position.y += elapsedTime * 5;
|
||||
if (m_position.y > 0.f) m_position.y = 0;
|
||||
if (m_position.y > 0.f) {
|
||||
jumped = false;
|
||||
m_position.y = 0;
|
||||
}
|
||||
}
|
||||
|
||||
m_position.y += m_accjmp;
|
||||
|
||||
if (!jumped || left || right || front || back) {
|
||||
m_yrotrad = (m_rotY / 57.2957795056f); // 180/Pi = 57.295...
|
||||
m_xrotrad = (m_rotX / 57.2957795056f);
|
||||
}
|
||||
|
||||
if (front) {
|
||||
if (m_accWS < 10) m_accWS += elapsedTime * 30; else m_accWS = 10;
|
||||
yrotrad = (m_rotY / 180 * 3.141592654f);
|
||||
xrotrad = (m_rotX / 180 * 3.141592654f);
|
||||
m_position.x += float(sin(yrotrad)) * elapsedTime * m_accWS;
|
||||
m_position.z += float(-cos(yrotrad)) * elapsedTime * m_accWS;
|
||||
if (m_accWS < m_topspeed) m_accWS += elapsedTime * 30; else m_accWS = m_topspeed;
|
||||
|
||||
m_position.x += float(sin(m_yrotrad)) * elapsedTime * m_accWS;
|
||||
m_position.z += float(-cos(m_yrotrad)) * elapsedTime * m_accWS;
|
||||
// m_position.y += float(-sin(xrotrad)) * elapsedTime * 20; // à remettre pour implémenter une fonction de vol.
|
||||
}
|
||||
else if (back) {
|
||||
if (m_accWS > -10) m_accWS -= elapsedTime * 30; else m_accWS = -10;
|
||||
yrotrad = (m_rotY / 180 * 3.141592654f);
|
||||
xrotrad = (m_rotX / 180 * 3.141592654f);
|
||||
m_position.x += float(-sin(yrotrad)) * elapsedTime * -m_accWS;
|
||||
m_position.z += float(cos(yrotrad)) * elapsedTime * -m_accWS;
|
||||
if (m_accWS > -m_topspeed) m_accWS -= elapsedTime * 30; else m_accWS = -m_topspeed;
|
||||
|
||||
m_position.x += float(-sin(m_yrotrad)) * elapsedTime * -m_accWS;
|
||||
m_position.z += float(cos(m_yrotrad)) * elapsedTime * -m_accWS;
|
||||
// m_position.y += float(sin(xrotrad)) * elapsedTime * 20; // à remettre pour implémenter une fonction de vol.
|
||||
}
|
||||
else if (m_accWS != 0) {
|
||||
m_accWS = m_accWS > 0 ? m_accWS - elapsedTime * 60 : m_accWS + elapsedTime * 60;
|
||||
yrotrad = (m_rotY / 180 * 3.141592654f);
|
||||
xrotrad = (m_rotX / 180 * 3.141592654f);
|
||||
m_position.x += float(sin(yrotrad)) * elapsedTime * m_accWS;
|
||||
m_position.z += float(-cos(yrotrad)) * elapsedTime * m_accWS;
|
||||
m_accWS = m_accWS > 0 ? m_accWS - elapsedTime * (jumped? 10 : 60) : m_accWS + elapsedTime * (jumped ? 10 : 60);
|
||||
|
||||
m_position.x += float(sin(m_yrotrad)) * elapsedTime * m_accWS;
|
||||
m_position.z += float(-cos(m_yrotrad)) * elapsedTime * m_accWS;
|
||||
if (m_accWS < 1 && m_accWS > -1) m_accWS = 0;
|
||||
}
|
||||
|
||||
if (left) {
|
||||
if (m_accAD < 10) m_accAD += elapsedTime * 30; else m_accAD = 10;
|
||||
yrotrad = (m_rotY / 180 * 3.141592654f);
|
||||
m_position.x += float(-cos(yrotrad)) * elapsedTime * m_accAD;
|
||||
m_position.z += float(-sin(yrotrad)) * elapsedTime * m_accAD;
|
||||
if (m_accAD < m_topspeed) m_accAD += elapsedTime * 30; else m_accAD = m_topspeed;
|
||||
m_position.x += float(-cos(m_yrotrad)) * elapsedTime * m_accAD;
|
||||
m_position.z += float(-sin(m_yrotrad)) * elapsedTime * m_accAD;
|
||||
}
|
||||
else if (right) {
|
||||
if (m_accAD > -10) m_accAD -= elapsedTime * 30; else m_accAD = -10;
|
||||
yrotrad = (m_rotY / 180 * 3.141592654f);
|
||||
m_position.x += float(cos(yrotrad)) * elapsedTime * -m_accAD;
|
||||
m_position.z += float(sin(yrotrad)) * elapsedTime * -m_accAD;
|
||||
if (m_accAD > -m_topspeed) m_accAD -= elapsedTime * 30; else m_accAD = -m_topspeed;
|
||||
m_position.x += float(cos(m_yrotrad)) * elapsedTime * -m_accAD;
|
||||
m_position.z += float(sin(m_yrotrad)) * elapsedTime * -m_accAD;
|
||||
}
|
||||
else if (m_accAD != 0) {
|
||||
m_accAD = m_accAD > 0 ? m_accAD - elapsedTime * 60 : m_accAD + elapsedTime * 60;
|
||||
yrotrad = (m_rotY / 180 * 3.141592654f);
|
||||
m_position.x += float(-cos(yrotrad)) * elapsedTime * m_accAD;
|
||||
m_position.z += float(-sin(yrotrad)) * elapsedTime * m_accAD;
|
||||
m_accAD = m_accAD > 0 ? m_accAD - elapsedTime * (jumped ? 10 : 60) : m_accAD + elapsedTime * (jumped ? 10 : 60);
|
||||
m_position.x += float(-cos(m_yrotrad)) * elapsedTime * m_accAD;
|
||||
m_position.z += float(-sin(m_yrotrad)) * elapsedTime * m_accAD;
|
||||
if (m_accAD < 1 && m_accAD > -1) m_accAD = 0;
|
||||
}
|
||||
|
||||
// Gestion de si le personnage va en diagonale pour qu'il n'aille pas plus vite que s'il allait en ligne droite: SQRT(10^2+10^2) = ~12.
|
||||
if ((m_accWS >= 0? m_accWS: -m_accWS + m_accAD >= 0 ? m_accAD : -m_accAD) > 12) {
|
||||
// Gestion de si le personnage va en diagonale pour qu'il n'aille pas plus vite que s'il allait en ligne droite: SQRT(15^2+15^2) = ~21.2
|
||||
if ((m_accWS >= 0? m_accWS: -m_accWS + m_accAD >= 0 ? m_accAD : -m_accAD) > sqrtf(m_topspeed * m_topspeed + m_topspeed * m_topspeed)) {
|
||||
m_accWS *= 0.9f;
|
||||
m_accAD *= 0.9f;
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define _PLAYER_H__
|
||||
#include "vector3.h"
|
||||
#include "transformation.h"
|
||||
#include <cmath>
|
||||
|
||||
class Player {
|
||||
public:
|
||||
@ -18,7 +19,14 @@ private:
|
||||
float m_accWS = 0;
|
||||
float m_accAD = 0;
|
||||
float m_accjmp = 0;
|
||||
float m_yrotrad = 0;
|
||||
float m_xrotrad = 0;
|
||||
bool jumped = false;
|
||||
|
||||
float m_topspeed = 20;
|
||||
float m_jumpheight = .4;
|
||||
|
||||
|
||||
};
|
||||
#endif //_PLAYER_H__
|
||||
|
||||
|