Skip to content

Commit

Permalink
version 1.0.2-alpha
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas92g committed May 18, 2021
1 parent 606ea9e commit 506a236
Show file tree
Hide file tree
Showing 11 changed files with 46 additions and 25 deletions.
36 changes: 28 additions & 8 deletions SOURCE/Simulateur.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,25 @@
#include "Forces.h"
#include "interface2d.h"

//simplifie la syntaxe
using namespace nico;
using namespace glm;

// nombre de troncons minimun a chargé avant d'afficher quoi que ce soit
#define NOMBRE_DE_CHUNK_MIN 4
//position par default de la montgolfiere
#define DEFAULT_POS vec3(2554, 8 , 5312)
//temperature par default de la montgolfiere
#define DEFAULT_TEMPERATURE 45


int main() {
//initialisation de l'afficheur 3D
Renderer render;
//mettre une iconne a la fenetre
render.Window()->setIcon(NICO_TEXTURES_PATH"montgol.png");
//creer un afficheur de texte avec la police par default
TextRenderer text;
TextRenderer text(NICO_TEXTURES_PATH"Roboto-Light.ttf");

//creer la camera
Camera player;
Expand All @@ -31,17 +36,20 @@ int main() {
//creer l'afficheur 2D
Renderer2d render2d(render.Window());

//creer un switch (on/off) pour le mode pleine ecran
//creer un switch (on/off) pour le mode pleine ecran, l'affichage supplementaire et le cheat mode
KeySwitch fullscreen(render.Window(), GLFW_KEY_F11);
KeySwitch menuInfo(render.Window(), GLFW_KEY_F3);
KeySwitch godMode(render.Window(), GLFW_KEY_F6);

//valeurs physiques de la mongolfiere
float masse(200.0f);
float volume(1400.0f);

float temperature = DEFAULT_TEMPERATURE;

//multiplie le temps
float temps(1);

//creation de l'affichage 2D des indicateurs de directions
Boussole::createTexture();
Boussole sunBoussole(render.Window(), &player, &text);
sunBoussole.setName("soleil");
Expand Down Expand Up @@ -113,7 +121,7 @@ int main() {
render.Window()->maximise();

//titre de la fenetre
render.Window()->setTitle(" Simulateur de montgolfiere ( v-46.3.2 )");
render.Window()->setTitle("Simulateur de montgolfiere v1.0.2-alpha");

//creation de la hitbox de la mongolfiere
sphere mongolHitbox;
Expand Down Expand Up @@ -158,14 +166,17 @@ int main() {
//fonction qui gere la physique de deplacement

if (!gameOver) {
//met a jour le deplacement de la mongolfiere et verifie que ce deplacement n'engendre pas une destruction de la motgolfiere
gameOver = deplacement(&montgolPhysique, render.Window(), terrain.getHitbox(montgolPhysique.pos), temps);

//si la montoglfiere a été detuite afficher gameover et afficher le curseur
if (gameOver) {
interface2d.setState(Interface2d::State::gameOver);
render.Window()->hideCursor(false);
}
}
else {
//si l'utilisateur a perdu et qu'il appuit sur reprendre
if (interface2d.getState() == Interface2d::State::recommencerAuMemeEndroit) {
gameOver = false;
montgolPhysique.pos.y = 50;
Expand All @@ -174,6 +185,7 @@ int main() {
interface2d.setState(Interface2d::State::playing);
}
}
//si l'utilisateur appuit sur recommencer
if (interface2d.getState() == Interface2d::State::recommencer) {
gameOver = false;
montgolPhysique.pos = DEFAULT_POS;
Expand All @@ -182,19 +194,24 @@ int main() {
temps = 1;
interface2d.setState(Interface2d::State::playing);

//il est possible que la translation que l'on viens d'effectuer amene le ballon sur des trocons non chargée
//on verifie donc qu'il y a un nombre suffisant de chunks chargé avant d'afficher (comme au début du programme)
do {
terrain.update();
} while (terrain.getNumberOfLoadedChunks() < NOMBRE_DE_CHUNK_MIN);

}
//si l'utilisateur appuit sur echap
else if (interface2d.getState() == Interface2d::State::pause) {
temps = 0;
}
//si l'utilisateur a mis pause et qu'il appuit sur reprendre
else if (interface2d.getState() == Interface2d::State::reprendre) {
temps = 1;
interface2d.setState(Interface2d::State::playing);
render.Window()->setCursorPos(render.Window()->getWidth() * .5, render.Window()->getHeight() * .5);
}
//si l'utilisateur est entrain de jouer
if (interface2d.getState() == Interface2d::State::playing) {
temps = interface2d.getTimeAcceleration();
}
Expand Down Expand Up @@ -234,6 +251,7 @@ int main() {
//affichage 2d
render2d.frame();

//affichage supplementaire (activation avec F3)
if (menuInfo) {
text.printLeftTop("loc : " + nico::strings::ivec3Tostring(montgolPhysique.pos) +
" chunks : " + std::to_string(terrain.getNumberOfLoadedChunks()));
Expand All @@ -246,14 +264,16 @@ int main() {

} while (!render.Window()->shouldClose());//ferme la fenetre

//while (Chunk::getNumberOfWorkingThreads());//attends que tous les programmes parallele soit terminé

//attendre une seconde que les thread paralelle soit terminé
for (size_t i = 0; i < 1000 and Chunk::getNumberOfWorkingThreads(); i++)
std::this_thread::sleep_for(std::chrono::milliseconds(1));

return 0;//exit
}


//pour creer une application windows (la configuration release n'a pas de cmd, la fonction main est donc remplacée par WinMain)
#ifdef NDEBUG
int WinMain(){
int WinMain(){
return main();
}
#endif // NDEBUG
22 changes: 9 additions & 13 deletions SOURCE/interface2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,17 +167,17 @@ void Interface2d::draw(nico::Shader* shader)
recommencer.setPosition(glm::vec2(x, y));
recommencer.setScale(glm::vec2(x * .5, x * .1));
recommencer.draw(shader);
text->print("Recommencer", x - text->calculateTextRenderingSize("Recommencer", y * .075).x * .5, y, y * .075, glm::vec4(0, 0, 0, 1), false);
text->print("Recommencer", x - text->calculateTextRenderingSize("Recommencer", y * .075).x * .5, y * .98, y * .075, glm::vec4(0, 0, 0, 1), false);

reprendrePlusHaut.setPosition(glm::vec2(x, y * .7));
reprendrePlusHaut.setScale(glm::vec2(x * .5, x * .1));
reprendrePlusHaut.draw(shader);
text->print("Reprendre", x - text->calculateTextRenderingSize("Reprendre", y * .075).x * .5, y * .7, y * .075, glm::vec4(0, 0, 0, 1), false);
text->print("Reprendre", x - text->calculateTextRenderingSize("Reprendre", y * .075).x * .5, y * .68, y * .075, glm::vec4(0, 0, 0, 1), false);

quitter.setPosition(glm::vec2(x, y * .4));
quitter.setScale(glm::vec2(x * .5, x * .1));
quitter.draw(shader);
text->print("Quitter", x - text->calculateTextRenderingSize("Quitter", y * .075).x * .5, y * .4, y * .075, glm::vec4(0, 0, 0, 1), false);
text->print("Quitter", x - text->calculateTextRenderingSize("Quitter", y * .075).x * .5, y * .38, y * .075, glm::vec4(0, 0, 0, 1), false);

if (recommencer.isClicked())
state = State::recommencer;
Expand All @@ -195,23 +195,19 @@ void Interface2d::draw(nico::Shader* shader)
recommencer.setPosition(glm::vec2(x, y));
recommencer.setScale(glm::vec2(x * .5, x * .1));
recommencer.draw(shader);
text->print("Recommencer", x - text->calculateTextRenderingSize("Recommencer", y * .075).x * .5, y, y * .075, glm::vec4(0, 0, 0, 1), false);
text->print("Recommencer", x - text->calculateTextRenderingSize("Recommencer", y * .075).x * .5, y * .98, y * .075, glm::vec4(0, 0, 0, 1), false);

reprendre.setPosition(glm::vec2(x, y * .7));
reprendre.setScale(glm::vec2(x * .5, x * .1));
reprendre.draw(shader);
text->print("Reprendre", x - text->calculateTextRenderingSize("Reprendre", y * .075).x * .5, y * .7, y * .075, glm::vec4(0, 0, 0, 1), false);
text->print("Reprendre", x - text->calculateTextRenderingSize("Reprendre", y * .075).x * .5, y * .68, y * .075, glm::vec4(0, 0, 0, 1), false);

quitter.setPosition(glm::vec2(x, y * .4));
quitter.setScale(glm::vec2(x * .5, x * .1));
quitter.draw(shader);
text->print("Quitter", x - text->calculateTextRenderingSize("Quitter", y * .075).x * .5, y * .4, y * .075, glm::vec4(0, 0, 0, 1), false);
text->print("Quitter", x - text->calculateTextRenderingSize("Quitter", y * .075).x * .5, y * .38, y * .075, glm::vec4(0, 0, 0, 1), false);

# ifdef VERSION_DE_CLEMENT
text->print("connard et testeur legendaire : Clement Guillot", x - text->calculateTextRenderingSize("connard et testeur légendaire : Clement Guillot", y * .045).x * .5, y * .03, y * .045, glm::vec4(0.5, 0, 0, 1), false);
# endif

help.setPosition(glm::vec2(x * 0.8, y * 1.3));
help.setPosition(glm::vec2(x, y * 1.3));
help.setScale(glm::vec2(x * 0.05, x * 0.05));
help.draw(shader);

Expand Down Expand Up @@ -257,14 +253,14 @@ void Interface2d::draw(nico::Shader* shader)
text->print(line6, x - text->calculateTextRenderingSize(line6, y * .04).x * .5, y * 1.0, y * .04, glm::vec4(1), false);

static const char const* line7 =
"PS : a oui j'allais oublier ! la montgolfiere c hyper chiant ducoup bas vous pouvez accelerer le temps avec les fleches ";
"Pour finir, vous pouvez accelerer le temps grace aux fleches ";
text->print(line7, x - text->calculateTextRenderingSize(line7, y * .04).x * .5, y * 0.9, y * .04, glm::vec4(1), false);


retour.setPosition(glm::vec2(x, y * .6));
retour.setScale(glm::vec2(x * .5, x * .1));
retour.draw(shader);
text->print("retour", x - text->calculateTextRenderingSize("retour", y * .075).x * .5, y * .6, y * .075, glm::vec4(0, 0, 0, 1), false);
text->print("retour", x - text->calculateTextRenderingSize("retour", y * .075).x * .5, y * .58, y * .075, glm::vec4(0, 0, 0, 1), false);

if (retour.isClicked())
state = State::pause;
Expand Down
1 change: 0 additions & 1 deletion TERRAIN/Chunk.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ class Chunk : public nico::DrawableObject
bool wasCreated() const;
bool isReloadingRes() const;
std::vector<sphere>* getHitbox();
//std::vector<glm::mat4>& getTrees();

void CalculateHitbox();
void checkBadGeneration();
Expand Down
2 changes: 1 addition & 1 deletion TERRAIN/Land.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Land::~Land()
void Land::update()
{
shader->set("seaLevel", Chunk::seaLevel);

shader->set("ortho", (glm::mat4)glm::ortho(0, 800, 600, 0, -1, 1));
bool needToReloadTrees = false;

//reload shaders
Expand Down
3 changes: 3 additions & 0 deletions TERRAIN/terrain.frag
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ uniform bool water;
uniform float time;
uniform float seaLevel;

uniform mat4 ortho;

uniform sampler2D diffuse;//this name is just to be the same as the non-pbr shader, it represent albedo or base-color
uniform sampler2D specular;//how metallic is the fragment
uniform sampler2D roughness;//how rough is the fragment
Expand Down Expand Up @@ -281,6 +283,7 @@ void calcColor(vec3 N){
}

pbr.alpha = 1;


}

Expand Down
3 changes: 3 additions & 0 deletions nico/InstancedMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
#include "mesh.h"

namespace nico{
/**
* @brief utilisée pour afficher des modeles 3D par instanciation mais ca marche pas encore
*/
class InstancedMesh : public DrawableObject{
public:
InstancedMesh(
Expand Down
Binary file added nico/objects/textures/Roboto-Light.ttf
Binary file not shown.
Binary file added nico/objects/textures/Roboto-Medium.ttf
Binary file not shown.
Binary file removed nico/objects/textures/kloppenheim_06_4k.hdr
Binary file not shown.
1 change: 0 additions & 1 deletion nico/window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ nico::Window::Window(int openglMajorVersion, int openglMinorVersion, bool debugM
fprintf(stderr, "error glfw cant init\n");
exit(-1);
}

glfwWindowHint(GLFW_SAMPLES, antialiasingLevel); // 4x antialiasing
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, openglMajorVersion); // On veut OpenGL 4.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, openglMinorVersion);
Expand Down
3 changes: 2 additions & 1 deletion nico/window.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <stb_image.h>
#include "openGlObject.h"
#include "glDebugging.h"
#include <glm/gtc/matrix_transform.hpp>


#define DEFAULT_SCREEN_SIZE glm::vec2(600,400)
Expand All @@ -25,7 +26,7 @@ namespace nico {
double deltaTime;
double time;
bool pauseIfUnfocused;

public:
Window(int openglMajorVersion,
int openglMinorVersion ,
Expand Down

0 comments on commit 506a236

Please sign in to comment.