diff --git a/CMakeLists.txt b/CMakeLists.txt index a7c8700..acba949 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) add_executable(shmup ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}}) target_compile_options(shmup PRIVATE -Wall -Wextra -Os -std=c++20) -target_link_options(shmup PRIVATE -Wl,-Map=Build_Addin.map -Wl,--print-memory-usage -fpermissive) +target_link_options(shmup PRIVATE -Wl,-Map=Build_Addin.map -Wl,--print-memory-usage -fno-use-cxa-atexit -fpermissive) target_link_libraries(shmup Azur::Azur -lnum LibProf::LibProf Gint::Gint -lstdc++) if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50) diff --git a/TODO.txt b/TODO.txt index 0507b88..5b92fea 100644 --- a/TODO.txt +++ b/TODO.txt @@ -11,22 +11,38 @@ The SHMUP Todo list : - interaction avec le décors (collisions possibles avec certaines tiles) qui imposent donc de suivre un "chemin" dans le niveau - multiple layers de tiles pour avoir des niveaux plus beaux - Partie mouvement : +# Partie mouvement : - améliorer le système de trajectoires sur base de Splines pour rendre la vitesse des ennemis plus constante. - rendre les satellites sur une trajectoire (possibilité d'avoir des patterns plus complexes) - possibilité de transformer les trajectoires (grossissement/rétrécissement, translation et rotation) - Partie interaction / gameplay : +# Partie interaction / gameplay : - implémenter les tirs ennemis (avec une IA minimale) - implémenter les hits des tirs ennemis sur le joueur - implémenter les collisions avec les ennemies +- implémenter les collisions de bullets avec les satellites pour que ceux-ci perdent de la vie aussi - implémenter le tir des satellites - implémenter un système de bonus (points, upgrade tir/satellites/... ) -Autres : +# Bosses +- Créer des bosses avec différentes zones, mobiles les unes par rapport aux autres +- Créer des hitboxes pour chacune des zones du boss avec différentes sensibilités (par exemple le coeur/générateur = zone critique, mais mieux défendues) +- Créer des protections des certaines zones qui peuvent "sauter" (boucliers qui s'usent) + +# Autres : - plein de trucs dont boss "multi-morceaux et multi-hitboxes" - création de différents levels - créations de différents ennemis - créations de différents boss - créations de différentes armes -- créations de différents bonus \ No newline at end of file +- créations de différents bonus +- création de shields pour se protéger + +# Modes spéciaux +- mode menu avec différentes planètes à selectionner pour les différents niveaux +- mode hyperspace travel pour les transitions : + - sous mode : à la "tie fighter" ? + - sous mode : éviter les astéroïdes + - sous mode classique shmup horizontal + - sous mode classiqie shmup vertical + \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 0d709eb..88813b4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -61,7 +61,7 @@ uint8_t texttodraw=1; float elapsedTime = 0.0f; -uint32_t time_update=0, time_render=0; +uint32_t time_update=0, time_render=0; prof_t perf_update, perf_render; @@ -124,11 +124,10 @@ static void update( float dt ) MyPlayer->Update( dt ); - for(unsigned int i=0; iUpdate( dt ); - + // Check if the property toberemoved has been set to "true" for particle deletion if (MyImpacts[i]->toberemoved == true) { @@ -140,7 +139,7 @@ static void update( float dt ) for(unsigned int i=0; iUpdate( dt ); - + // Check if there is a collision with the current enemy //MyPlayer->Test_Collision( MyEnemies[i] ); @@ -168,7 +167,6 @@ static void update( float dt ) } } - for(unsigned int i=0; iUpdate( dt ); @@ -238,7 +236,7 @@ static void render( void ) { if (drawstars) azrp_starfield(); - + if (drawback) MyBackground.Render( ); for(auto& b : MyPlayerBullets) @@ -266,11 +264,11 @@ static void render( void ) if (texttodraw>=1) Azur_draw_text(1,01, "FPS = %.0f", (float) (1000000.0f / elapsedTime) ); //if (texttodraw>=1) Azur_draw_text(1,11, "Part.= %d - Bull.= %d", MyParticles.size(), MyPlayerBullets.size() ); //if (texttodraw>=1 && !MyEnemies.empty()) Azur_draw_text(1,21, "Ennmy Life= %d", MyEnemies[0]->life ); - + if (texttodraw>=2) Azur_draw_text(1,31, "Update = %.3f ms", (float) time_update / 1000.0f ); if (texttodraw>=2) Azur_draw_text(1,41, "Render = %.3f ms", (float) time_render / 1000.0f ); if (texttodraw>=2) Azur_draw_text(1,51, ">Total = %.0f ms", (float) elapsedTime / 1000.0f ); - + if (texttodraw>=3) Azur_draw_text(1,81, "Mem Used : %d", _uram_stats->used_memory + extram_stats->used_memory); if (texttodraw>=3) Azur_draw_text(1,91, "Mem Free : %d", _uram_stats->free_memory + extram_stats->free_memory); if (texttodraw>=3) Azur_draw_text(1,101, "Mem Peak Used : %d", _uram_stats->peak_used_memory + extram_stats->peak_used_memory ); @@ -307,8 +305,8 @@ static void get_inputs( float dt ) if(MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_8) && usb_is_open()) {record = true; }; if(MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_9) && usb_is_open()) {record = false; }; if(MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_DEL) && usb_is_open()) {textoutput = true;}; - #endif - + #endif + if(MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_F1)) {texttodraw=0;} if(MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_F2)) {texttodraw=1;} if(MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_F3)) {texttodraw=2;} @@ -317,7 +315,7 @@ static void get_inputs( float dt ) { azrp_starfield_close( ); azrp_starfield_init( 250 ); - } + } if(MyKeyboard.IsKeyPressed(MYKEY_LEFT)) { MyPlayer->Go_Left( dt ); } if(MyKeyboard.IsKeyPressed(MYKEY_RIGHT)) { MyPlayer->Go_Right( dt ); }