From 50fdc170716b5fdac26a4d5fa3d8bf9823920112 Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Mon, 21 Mar 2022 23:34:51 +0100 Subject: [PATCH] corrected a stupid bug in deallocation of std::vector --- src/main.cc | 137 +++++++++++++++++++++++++++++++++++++++++------ src/parameters.h | 2 +- 2 files changed, 121 insertions(+), 18 deletions(-) diff --git a/src/main.cc b/src/main.cc index 1fdc125..eeff38d 100644 --- a/src/main.cc +++ b/src/main.cc @@ -25,6 +25,8 @@ #include "include/cars.h" #include "include/menus.h" +#include +#include extern bopti_image_t player; extern font_t speedfont; @@ -86,6 +88,78 @@ int lastindex=0; int CC=0; // current curve int CS=0; + + + +void initEverything( void ) +{ + CurrentCircuitBiome = PLAINS; + + circuit.clear(); + nuages.clear(); + traffic.clear(); + MAX_SEGMENT=0; + + DataIndex=0; + + stop = false; + record = false; + screenshot = false; + + ShowDebug1 = false; + ShowDebug2 = false; + ShowDebug3 = false; + + BDrawDeco = true; + BDrawClds = true; + BDrawCars = true; + BDrawFPS = false; + + + currentcurve=0; + shiftcolor=0; + + + speed = 0.0; + maxspeedforward = 5.0; + maxspeedbackward = 2.0; + direction = 1; + speedcontrol = false; + + + minYRoad = 224; // We will track the upper Y (in fact the minimum Y during the RoadDrawing to optimize the rendering of the Sky + viewside = 0; + + deltaFarbackground = 0; + deltaNearbackground = 0; + lastindex=0; + + CC=0; // current curve + CS=0; +} + + + +int my_profile(int key, int duration, int count) +{ + // key: Key being repeated + // duration: How long that key has been pressed + // count: How many times it's been repeated already + // Return value: how long to wait before next repeat (\B5s) + + // Only allow KEY_LEFT and KEY_RIGHT + if(key!=KEY_LEFT && key!=KEY_RIGHT && key!=KEY_DOWN && key!=KEY_UP && key!=KEY_ALPHA && key!=KEY_SHIFT) + return -1; + + // 500 ms for first repeat, 50 ms after that; stop after 10 repeats + if(count == 0) + return 500*1000; + else + return -1; + +} + + static void get_inputs( float dt, int index ) { CC = circuit[index]->Curve; @@ -231,7 +305,7 @@ static void get_inputs( float dt, int index ) } - /* Adjust position of the background */ + // Adjust position of the background if (lastindex!=index) { deltaFarbackground -= CC*speed*dt/250; @@ -239,7 +313,7 @@ static void get_inputs( float dt, int index ) } lastindex = index; - /* adjust speed if we drive on the side of the road */ + // adjust speed if we drive on the side of the road if (fround(cam->cX)<-1*ROAD_WIDTH && speed>2.0) speed=2.0; if (fround(cam->cX)>ROAD_WIDTH && speed>2.0) speed=2.0; @@ -256,6 +330,8 @@ static void get_inputs( float dt, int index ) } + + int main(void) { __printf_enable_fp(); @@ -267,6 +343,9 @@ int main(void) #endif + kmalloc_arena_t *_uram = kmalloc_get_arena("_uram"); + kmalloc_gint_stats_t *_uram_stats; + srand( rtc_ticks() ); prof_init(); @@ -274,11 +353,21 @@ int main(void) drawStartTitle(); + char texttosend[1024]; bool exitToOS = false; do { +/* + _uram_stats = kmalloc_get_gint_stats(_uram); + sprintf( texttosend, "[Begining of loop] Memory Status - Used: %d - Free: %d - Peak Used: %d", _uram_stats->used_memory, _uram_stats->free_memory, _uram_stats->peak_used_memory); + usb_fxlink_text(texttosend, 0); +*/ + + // Try to restart from very begining + initEverything(); + prof_t perf_update, perf_create, perf_project, perf_render; int32_t start_time = 99000000; uint32_t score=99999; @@ -343,19 +432,24 @@ int main(void) perf_create = prof_make(); prof_enter(perf_create); - initData( ); // Positioning of the Camera - createCircuit( selectedCircuit ); // Creates the circuit + initData( ); // Positioning of the Camera - MAX_SEGMENT = circuit.size(); - uint32_t maxDistance = (MAX_SEGMENT-nbInterestingSegments-5)*SEGMENT_LENGTH; + createCircuit( selectedCircuit ); // Creates the circuit - putBillBoards(); + MAX_SEGMENT = circuit.size(); + uint32_t maxDistance = (MAX_SEGMENT-nbInterestingSegments-5)*SEGMENT_LENGTH; + + putBillBoards(); + + createClouds(); // Creates the Sky and Clouds + + createTraffic( MAX_SEGMENT ); // Creates the cars + + prepareDecoration( CurrentCircuitBiome ); // Prepares the multiple variations of Decoration (image scaling) + + prepareTraffic(); // Prepares the multiple variations of Cars (image scaling) - createClouds(); // Creates the Sky and Clouds - createTraffic( MAX_SEGMENT ); // Creates the cars - prepareDecoration( CurrentCircuitBiome ); // Prepares the multiple variations of Decoration (image scaling) - prepareTraffic(); // Prepares the multiple variations of Cars (image scaling) prof_leave(perf_create); time_create = prof_time(perf_create); @@ -562,8 +656,6 @@ int main(void) dsubimage( 245, 5, &speedhud, 37, 117, 38, 13, DIMAGE_NONE); // speed logo dsubimage( 245, 25, &speedhud, 37, 130, 38, 13, DIMAGE_NONE); // timer logo - dsubimage( 5, 205, &speedhud, 0, 143, 27, 13, DIMAGE_NONE); // fps logo - dfont(&speedfont); if (drawspeed==0.0) { @@ -604,6 +696,7 @@ int main(void) if (BDrawFPS) { + dsubimage( 5, 205, &speedhud, 0, 143, 27, 13, DIMAGE_NONE); // fps logo dprint_opt(42,202, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%.0f <", (float) (1000.0f/dt) ); // the '>' symbol corresponds to "fps" dprint_opt(40,200, C_RGB(255,255,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "%.0f <", (float) (1000.0f/dt) ); @@ -661,11 +754,21 @@ int main(void) l++; } - circuit.clear(); - nuages.clear(); - traffic.clear(); - freeDecoration(); + // Free all memory + freeTraffic(); + + freeDecoration(); + + for(int i=0; i