diff --git a/SOURCE/Simulateur.cpp b/SOURCE/Simulateur.cpp index 819f954..d464cfb 100644 --- a/SOURCE/Simulateur.cpp +++ b/SOURCE/Simulateur.cpp @@ -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; @@ -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"); @@ -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; @@ -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; @@ -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; @@ -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(); } @@ -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())); @@ -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 \ No newline at end of file diff --git a/SOURCE/interface2d.cpp b/SOURCE/interface2d.cpp index 081c586..842192c 100644 --- a/SOURCE/interface2d.cpp +++ b/SOURCE/interface2d.cpp @@ -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; @@ -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); @@ -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; diff --git a/TERRAIN/Chunk.h b/TERRAIN/Chunk.h index 4d697c4..2b2d598 100644 --- a/TERRAIN/Chunk.h +++ b/TERRAIN/Chunk.h @@ -28,7 +28,6 @@ class Chunk : public nico::DrawableObject bool wasCreated() const; bool isReloadingRes() const; std::vector* getHitbox(); - //std::vector& getTrees(); void CalculateHitbox(); void checkBadGeneration(); diff --git a/TERRAIN/Land.cpp b/TERRAIN/Land.cpp index 21fd3c3..8e00111 100644 --- a/TERRAIN/Land.cpp +++ b/TERRAIN/Land.cpp @@ -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 diff --git a/TERRAIN/terrain.frag b/TERRAIN/terrain.frag index 60aeec5..3cd60e3 100644 --- a/TERRAIN/terrain.frag +++ b/TERRAIN/terrain.frag @@ -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 @@ -281,6 +283,7 @@ void calcColor(vec3 N){ } pbr.alpha = 1; + } diff --git a/nico/InstancedMesh.h b/nico/InstancedMesh.h index 00d2f1c..cc309e6 100644 --- a/nico/InstancedMesh.h +++ b/nico/InstancedMesh.h @@ -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( diff --git a/nico/objects/textures/Roboto-Light.ttf b/nico/objects/textures/Roboto-Light.ttf new file mode 100644 index 0000000..0e97751 Binary files /dev/null and b/nico/objects/textures/Roboto-Light.ttf differ diff --git a/nico/objects/textures/Roboto-Medium.ttf b/nico/objects/textures/Roboto-Medium.ttf new file mode 100644 index 0000000..e89b0b7 Binary files /dev/null and b/nico/objects/textures/Roboto-Medium.ttf differ diff --git a/nico/objects/textures/kloppenheim_06_4k.hdr b/nico/objects/textures/kloppenheim_06_4k.hdr deleted file mode 100644 index 7a001d6..0000000 Binary files a/nico/objects/textures/kloppenheim_06_4k.hdr and /dev/null differ diff --git a/nico/window.cpp b/nico/window.cpp index 556f2c2..f3cbd11 100644 --- a/nico/window.cpp +++ b/nico/window.cpp @@ -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); diff --git a/nico/window.h b/nico/window.h index e0641c4..5ba0cc9 100644 --- a/nico/window.h +++ b/nico/window.h @@ -10,6 +10,7 @@ #include #include "openGlObject.h" #include "glDebugging.h" +#include #define DEFAULT_SCREEN_SIZE glm::vec2(600,400) @@ -25,7 +26,7 @@ namespace nico { double deltaTime; double time; bool pauseIfUnfocused; - + public: Window(int openglMajorVersion, int openglMinorVersion ,