diff --git a/Pinball.g3a b/Pinball.g3a deleted file mode 100644 index e33edf5..0000000 Binary files a/Pinball.g3a and /dev/null differ diff --git a/build b/build index d3b1d35..6f48891 100755 --- a/build +++ b/build @@ -1 +1,3 @@ -fxsdk build-cg VERBOSE=1 +rm -r build-cg +rm -r build-cg-push +fxsdk build-cg -B VERBOSE=1 diff --git a/buildpush b/buildpush index 9be693f..cde2707 100755 --- a/buildpush +++ b/buildpush @@ -1,3 +1,4 @@ rm -r build-cg +rm -r build-cg-push rm *.g3a -fxsdk build-cg-push -s VERBOSE=1 +fxsdk build-cg-push -B -s VERBOSE=1 diff --git a/src/main.cpp b/src/main.cpp index 2b178ec..cd6a5e2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,10 +8,12 @@ #include #include -#include -#include -#include +#if (DEBUG_MODE) + #include + #include +#endif + #include #include @@ -35,16 +37,16 @@ #include "tables.h" #include -bool screenshot = false; -bool record = false; -bool textoutput = false; +#if (DEBUG_MODE) + bool screenshot = false; + bool record = false; + bool textoutput = false; +#endif + bool exitToOS = false; uint8_t texttodraw = 1; -#define SCALE_PIXEL 1 -#define X_RESOL (DWIDTH / SCALE_PIXEL) -#define Y_RESOL (DHEIGHT / SCALE_PIXEL) float elapsedTime = 0.0f; float realDeltaTime = 0.0f; @@ -52,26 +54,14 @@ float cumulatedTime = 0.0f; uint32_t time_update = 0, time_render = 0; prof_t perf_update, perf_render; -static kmalloc_arena_t extended_ram = {0}; -static kmalloc_arena_t *_uram; -kmalloc_gint_stats_t *_uram_stats; -kmalloc_gint_stats_t *extram_stats; - KeyboardExtra MyKeyboard; Scene MyPinball; -libnum::num32 flipperHeight; -libnum::num32 cScale; -libnum::num32 simWidth; -libnum::num32 simHeight; - - -/* TODO : this is for debugging purpose */ +/* TODO : this is for debugging purpose only to be removed when fixed */ bool targetline = true; - /* create the pinball board */ void SetupScene(int which_table) { @@ -174,45 +164,50 @@ static void render(void) { /* Clear Screen */ azrp_clear(RGB565_BLACK); + /* render the side image if available */ if (MyPinball.sideimage != nullptr) azrp_image_p8(azrp_width - MyPinball.sideimage->width - 25, 5, MyPinball.sideimage, DIMAGE_NONE); - + + /* Render the border of the pinball table */ CollectionRender( MyPinball.borders, RGB565_WHITE ); if (MyPinball.has_locker) { + /* draw the locker : red if inactive and white if active and considered as a border*/ CollectionRender( MyPinball.locker, MyPinball.locker_is_enabled ? RGB565_WHITE : RGB565_BLOODYRED); /* TODO this is for debugging */ + /* Something is buggy when azrp_filled_circle is used !!! */ + /* wile it is working when lines are drawn - strange bug, need to be fixed */ if (targetline) { azrp_line(CX(MyPinball.Lock_pos)-5, CY(MyPinball.Lock_pos),CX(MyPinball.Lock_pos)+5, CY(MyPinball.Lock_pos), MyPinball.Lock_color); azrp_line(CX(MyPinball.Lock_pos), CY(MyPinball.Lock_pos)-5,CX(MyPinball.Lock_pos), CY(MyPinball.Lock_pos)+5, MyPinball.Lock_color); } - else { - azrp_filledcircle(CX(MyPinball.Lock_pos), CY(MyPinball.Lock_pos), CR(MyPinball.Lock_radius), MyPinball.Lock_color); - } + else azrp_filledcircle(CX(MyPinball.Lock_pos), CY(MyPinball.Lock_pos), CR(MyPinball.Lock_radius), MyPinball.Lock_color); } - - + /* Render the circular bumpers that gives score points and push the ball away */ for (int i = 0; i < MyPinball.obstacles.size(); i++) MyPinball.obstacles[i].Render(); - + /* render the non circular obstacles that just block the path of the ball */ for (int i = 0; i < MyPinball.islands.size(); i++) CollectionRender( MyPinball.islands[i] , RGB565_WHITE); + /* render the balls */ for (int i = 0; i < MyPinball.balls.size(); i++) MyPinball.balls[i].Render(); - + /* render de flippers */ for (int i = 0; i < MyPinball.flippers.size(); i++) MyPinball.flippers[i].Render(); - azrp_draw_text(150, 0, "FPS = %.0f - Mem Free = %d - Time = %.2 f" , - (float)(1.0f / realDeltaTime), - _uram_stats->free_memory + extram_stats->free_memory, cumulatedTime); - +#if (DEBUG_MODE) + /* debug info (FPS and current game duration )*/ + azrp_draw_text(150, 0, "FPS = %.0f - Time = %.2 f" , + (float)(1.0f / realDeltaTime)); +#endif + /* score */ azrp_draw_pinball(250, 200, RGB565_DEEPPURPLE, "Score:%d", MyPinball.score); } @@ -222,7 +217,7 @@ static void get_inputs(float dt) { if (MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyHoldPressed(MYKEY_EXIT)) { exitToOS = true; - }; + } /* LEFT FLIPPER */ if (MyKeyboard.IsKeyPressed(MYKEY_F1)) { @@ -246,7 +241,7 @@ static void get_inputs(float dt) { MyPinball.flippers[i].touchIdentifier = libnum::num32(-1); } - /* RESET THE GAME */ + /* RESET THE GAME AND CHANGE THE CURRENT TABLE ( [OPTN] + [Fx] loads Table #x )*/ if (MyKeyboard.IsKeyPressed(MYKEY_OPTN) && MyKeyboard.IsKeyHoldPressed(MYKEY_F1)) { SetupScene(0); @@ -286,73 +281,13 @@ static void get_inputs(float dt) { MyKeyboard.IsKeyPressedEvent(MYKEY_9) && usb_is_open()) { record = false; }; - #endif - - /* we can have either LEFT or RIGHT or NONE OF THEM pressed for the direction - */ } -bool AddMoreRAM(void) { - /* allow more RAM */ - char const *osv = (char *)0x80020020; - - if ((!strncmp(osv, "03.", 3) && osv[3] <= '8') && - gint[HWCALC] == HWCALC_FXCG50) // CG-50 - { - extended_ram.name = "extram"; - extended_ram.is_default = true; - extended_ram.start = (void *)0x8c200000; - extended_ram.end = (void *)0x8c4e0000; - - kmalloc_init_arena(&extended_ram, true); - kmalloc_add_arena(&extended_ram); - return true; - } else if (gint[HWCALC] == HWCALC_PRIZM) // CG-10/20 - { - - extended_ram.name = "extram"; - extended_ram.is_default = true; - - uint16_t *vram1, *vram2; - dgetvram(&vram1, &vram2); - dsetvram(vram1, vram1); - - extended_ram.start = vram2; - extended_ram.end = (char *)vram2 + 396 * 224 * 2; - - kmalloc_init_arena(&extended_ram, true); - kmalloc_add_arena(&extended_ram); - return true; - - } else if (gint[HWCALC] == HWCALC_FXCG_MANAGER) // CG-50 EMULATOR - { - - extended_ram.name = "extram"; - extended_ram.is_default = true; - extended_ram.start = (void *)0x88200000; - extended_ram.end = (void *)0x884e0000; - - kmalloc_init_arena(&extended_ram, true); - kmalloc_add_arena(&extended_ram); - return true; - } else { - return false; - } -} - -void FreeMoreRAM(void) { - memset(extended_ram.start, 0, - (char *)extended_ram.end - (char *)extended_ram.start); -} int main(void) { exitToOS = false; - _uram = kmalloc_get_arena("_uram"); - - bool canWeAllocate3Mb = AddMoreRAM(); - __printf_enable_fp(); __printf_enable_fixed(); @@ -367,59 +302,56 @@ int main(void) { azrp_hook_set_prefrag(hook_prefrag); +#if (DEBUG_MODE) usb_interface_t const *interfaces[] = {&usb_ff_bulk, NULL}; usb_open(interfaces, GINT_CALL_NULL); +#endif + // TODO : Currently Loads Table #4 that is the most complete one + // To be adjusted by a menu and based on user input in final version SetupScene(4); prof_init(); do { + perf_update = prof_make(); prof_enter(perf_update); + { + // all the stuff to be update should be put here + MyKeyboard.Update(); + get_inputs(elapsedTime); - { - // all the stuff to be update should be put here - MyKeyboard.Update(); - get_inputs(elapsedTime); - - update(elapsedTime); - - // update the RAM consumption status - _uram_stats = kmalloc_get_gint_stats(_uram); - extram_stats = kmalloc_get_gint_stats(&extended_ram); - } - + update(elapsedTime); + } prof_leave(perf_update); time_update = prof_time(perf_update); + perf_render = prof_make(); prof_enter(perf_render); + { + // all the stuff to be rendered should be put here + render(); - { - // all the stuff to be rendered should be put here - render(); - - azrp_update(); - } - + azrp_update(); + } prof_leave(perf_render); time_render = prof_time(perf_render); /* elapsedTime expressed in microseconds when coming from the libprof high * accuracy time measurement */ - realDeltaTime = ((float)(time_update + time_render)) / 1000000.0f; - - elapsedTime = ((float)1.0f / 60.0f); - cumulatedTime += elapsedTime; + realDeltaTime = ((float)(time_update + time_render)) / 1000000.0f; /* this is actual real time */ + elapsedTime = ((float)1.0f / 60.0f); /* TODO : when shaders will be optimized and quick enough, elapsedTime will be set to actual realDeltaTime */ + cumulatedTime += elapsedTime; /* TODO : this is a ugly trick to mitigate the problem with the locker - for now it closes after a certain time*/ } while (exitToOS == false); prof_quit(); - usb_close(); - if (canWeAllocate3Mb) - FreeMoreRAM(); +#if (DEBUG_MODE) + usb_close(); +#endif return 1; } diff --git a/src/parameters.h b/src/parameters.h index d7588c2..80409a5 100644 --- a/src/parameters.h +++ b/src/parameters.h @@ -1,9 +1,12 @@ #ifndef PARAMETERS_H #define PARAMETERS_H + /* define main macros and usefull parameters */ -#define DEBUG_MODE 1 -#define BIAS 1 -#define NOBIAS (1-BIAS) + #define DEBUG_MODE 1 + #define BIAS 1 + #define NOBIAS (1-BIAS) + + #define SCALE_PIXEL 1 #endif \ No newline at end of file diff --git a/src/tables.h b/src/tables.h index 0460677..1eb7f86 100644 --- a/src/tables.h +++ b/src/tables.h @@ -8,14 +8,15 @@ #include extern Scene MyPinball; -extern libnum::num32 flipperHeight; -extern libnum::num32 cScale; -extern libnum::num32 simWidth; -extern libnum::num32 simHeight; + + +libnum::num32 flipperHeight; +libnum::num32 cScale; +libnum::num32 simWidth; +libnum::num32 simHeight; extern bopti_image_t img_abyss; - void Setup_Table_0(void) { libnum::num32 offset = libnum::num32(0.02); @@ -25,39 +26,52 @@ void Setup_Table_0(void) { simHeight = libnum::num32(azrp_height) / cScale; MyPinball.has_locker = false; - + MyPinball.score = 0; MyPinball.gravity.Set(Vector2D(libnum::num32(0.0), libnum::num32(-1.0))); MyPinball.sideimage = nullptr; MyPinball.borders.clear(); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.25))); - MyPinball.borders.push_back( Vector2D(libnum::num32(1.0) - offset, libnum::num32(0.4))); - MyPinball.borders.push_back( Vector2D(libnum::num32(1.0) - offset, flipperHeight - offset)); - MyPinball.borders.push_back( Vector2D(offset, flipperHeight - offset)); - MyPinball.borders.push_back( Vector2D(offset, libnum::num32(0.4))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.25))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(offset))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(offset))); + MyPinball.borders.emplace_back(libnum::num32(0.74), libnum::num32(0.25)); + MyPinball.borders.emplace_back(libnum::num32(1.0) - offset, + libnum::num32(0.4)); + MyPinball.borders.emplace_back(libnum::num32(1.0) - offset, + flipperHeight - offset); + MyPinball.borders.emplace_back(offset, flipperHeight - offset); + MyPinball.borders.emplace_back(offset, libnum::num32(0.4)); + MyPinball.borders.emplace_back(libnum::num32(0.26), libnum::num32(0.25)); + MyPinball.borders.emplace_back(libnum::num32(0.26), libnum::num32(offset)); + MyPinball.borders.emplace_back(libnum::num32(0.74), libnum::num32(offset)); MyPinball.balls.clear(); libnum::num32 ball_radius = libnum::num32(0.03); libnum::num32 ball_mass = libnum::num32(PI) * ball_radius * ball_radius; Vector2D ball_pos1(libnum::num32(0.92), libnum::num32(0.5)); Vector2D ball_vel1(libnum::num32(0.2), libnum::num32(3.5)); - MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, 0.2, RGB565_BLOODYRED)); + MyPinball.balls.push_back(Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, + 0.2, RGB565_BLOODYRED)); Vector2D ball_pos2(libnum::num32(0.08), libnum::num32(0.5)); Vector2D ball_vel2(libnum::num32(0.2), libnum::num32(3.5)); - MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, 0.2, RGB565_BLOODYRED )); + MyPinball.balls.push_back(Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, + 0.2, RGB565_BLOODYRED)); MyPinball.obstacles.clear(); - MyPinball.obstacles.push_back( Obstacle(0.10, Vector2D(libnum::num32(0.25), libnum::num32(0.6)), 2.0, RGB565_OCEANBLUE, 25)); - MyPinball.obstacles.push_back( Obstacle(0.10, Vector2D(libnum::num32(0.75), libnum::num32(0.5)), 2.0, RGB565_OCEANBLUE, 25)); - MyPinball.obstacles.push_back( Obstacle(0.12, Vector2D(libnum::num32(0.70), libnum::num32(1.0)), 2.0, RGB565_OCEANBLUE, 25)); - MyPinball.obstacles.push_back( Obstacle(0.10, Vector2D(libnum::num32(0.20), libnum::num32(1.2)), 2.0, RGB565_OCEANBLUE, 25)); + MyPinball.obstacles.emplace_back( + 0.10, Vector2D(libnum::num32(0.25), libnum::num32(0.6)), 2.0, + RGB565_OCEANBLUE, 25); + MyPinball.obstacles.emplace_back( + 0.10, Vector2D(libnum::num32(0.75), libnum::num32(0.5)), 2.0, + RGB565_OCEANBLUE, 25); + MyPinball.obstacles.emplace_back( + 0.12, Vector2D(libnum::num32(0.70), libnum::num32(1.0)), 2.0, + RGB565_OCEANBLUE, 25); + MyPinball.obstacles.emplace_back( + 0.10, Vector2D(libnum::num32(0.20), libnum::num32(1.2)), 2.0, + RGB565_OCEANBLUE, 25); - for(int i=0; i island1; - island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.10)) ); - island1.push_back( Vector2D(libnum::num32(0.40), libnum::num32(1.20)) ); - island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.30)) ); - island1.push_back( Vector2D(libnum::num32(0.60), libnum::num32(1.20)) ); - MyPinball.islands.push_back( island1 ); + island1.emplace_back(libnum::num32(0.50), libnum::num32(1.10)); + island1.emplace_back(libnum::num32(0.40), libnum::num32(1.20)); + island1.emplace_back(libnum::num32(0.50), libnum::num32(1.30)); + island1.emplace_back(libnum::num32(0.60), libnum::num32(1.20)); + MyPinball.islands.push_back(island1); std::vector island2; - island2.push_back( Vector2D(libnum::num32(0.50), libnum::num32(0.50)) ); - island2.push_back( Vector2D(libnum::num32(0.40), libnum::num32(0.70)) ); - island2.push_back( Vector2D(libnum::num32(0.50), libnum::num32(0.72)) ); - island2.push_back( Vector2D(libnum::num32(0.60), libnum::num32(0.70)) ); - MyPinball.islands.push_back( island2 ); - + island2.emplace_back(libnum::num32(0.50), libnum::num32(0.50)); + island2.emplace_back(libnum::num32(0.40), libnum::num32(0.70)); + island2.emplace_back(libnum::num32(0.50), libnum::num32(0.72)); + island2.emplace_back(libnum::num32(0.60), libnum::num32(0.70)); + MyPinball.islands.push_back(island2); MyPinball.flippers.clear(); libnum::num32 flip_radius = libnum::num32(0.03); @@ -240,10 +301,15 @@ void Setup_Table_2(void) { libnum::num32 flip_restitution = libnum::num32(0.0); Vector2D flip_pos1(libnum::num32(0.26), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE)); + MyPinball.flippers.emplace_back( + flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, + flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE); Vector2D flip_pos2(libnum::num32(0.74), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_OCEANBLUE)); + MyPinball.flippers.emplace_back(flip_radius, flip_pos2, flip_length, + libnum::num32(PI) + flip_restAngle, + -flip_maxRotation, flip_angularVelocity, + flip_restitution, RIGHT, RGB565_OCEANBLUE); } void Setup_Table_3(void) { @@ -262,96 +328,113 @@ void Setup_Table_3(void) { MyPinball.sideimage = &img_abyss; MyPinball.borders.clear(); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.25))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.98), libnum::num32(0.40))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.98), libnum::num32(1.20))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.96), libnum::num32(1.34))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.90), libnum::num32(1.46))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.81), libnum::num32(1.56))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.70), libnum::num32(1.64))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.57), libnum::num32(1.68))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.43), libnum::num32(1.68))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.30), libnum::num32(1.64))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.19), libnum::num32(1.56))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.10), libnum::num32(1.46))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.04), libnum::num32(1.34))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.02), libnum::num32(1.20))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.02), libnum::num32(0.40))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.25))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.02))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.02))); - + MyPinball.borders.emplace_back(libnum::num32(0.74), libnum::num32(0.25)); + MyPinball.borders.emplace_back(libnum::num32(0.98), libnum::num32(0.40)); + MyPinball.borders.emplace_back(libnum::num32(0.98), libnum::num32(1.20)); + MyPinball.borders.emplace_back(libnum::num32(0.96), libnum::num32(1.34)); + MyPinball.borders.emplace_back(libnum::num32(0.90), libnum::num32(1.46)); + MyPinball.borders.emplace_back(libnum::num32(0.81), libnum::num32(1.56)); + MyPinball.borders.emplace_back(libnum::num32(0.70), libnum::num32(1.64)); + MyPinball.borders.emplace_back(libnum::num32(0.57), libnum::num32(1.68)); + MyPinball.borders.emplace_back(libnum::num32(0.43), libnum::num32(1.68)); + MyPinball.borders.emplace_back(libnum::num32(0.30), libnum::num32(1.64)); + MyPinball.borders.emplace_back(libnum::num32(0.19), libnum::num32(1.56)); + MyPinball.borders.emplace_back(libnum::num32(0.10), libnum::num32(1.46)); + MyPinball.borders.emplace_back(libnum::num32(0.04), libnum::num32(1.34)); + MyPinball.borders.emplace_back(libnum::num32(0.02), libnum::num32(1.20)); + MyPinball.borders.emplace_back(libnum::num32(0.02), libnum::num32(0.40)); + MyPinball.borders.emplace_back(libnum::num32(0.26), libnum::num32(0.25)); + MyPinball.borders.emplace_back(libnum::num32(0.26), libnum::num32(0.02)); + MyPinball.borders.emplace_back(libnum::num32(0.74), libnum::num32(0.02)); MyPinball.balls.clear(); libnum::num32 ball_radius = libnum::num32(0.03); libnum::num32 ball_mass = libnum::num32(PI) * ball_radius * ball_radius; Vector2D ball_pos1(libnum::num32(0.70), libnum::num32(0.70)); Vector2D ball_vel1(libnum::num32(0.2), libnum::num32(3.5)); - MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, 0.2, RGB565_LEMONYELLOW)); + MyPinball.balls.push_back(Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, + 0.2, RGB565_LEMONYELLOW)); Vector2D ball_pos2(libnum::num32(0.30), libnum::num32(0.70)); Vector2D ball_vel2(libnum::num32(-0.2), libnum::num32(3.5)); - MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, 0.2, RGB565_LEMONYELLOW )); - + MyPinball.balls.push_back(Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, + 0.2, RGB565_LEMONYELLOW)); MyPinball.obstacles.clear(); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.50), libnum::num32(1.45)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.74), libnum::num32(1.20)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.26), libnum::num32(1.20)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.50), libnum::num32(0.95)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.15), libnum::num32(0.80)), 1.5, RGB565_LEMONYELLOW, 25)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.85), libnum::num32(0.80)), 1.5, RGB565_LEMONYELLOW, 25)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.30), libnum::num32(0.60)), 1.5, RGB565_GREEN, 10)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.70), libnum::num32(0.60)), 1.5, RGB565_GREEN, 10)); + MyPinball.obstacles.emplace_back( + 0.06, Vector2D(libnum::num32(0.50), libnum::num32(1.45)), 1.5, RGB565_RED, + 100); + MyPinball.obstacles.emplace_back( + 0.06, Vector2D(libnum::num32(0.74), libnum::num32(1.20)), 1.5, RGB565_RED, + 100); + MyPinball.obstacles.emplace_back( + 0.06, Vector2D(libnum::num32(0.26), libnum::num32(1.20)), 1.5, RGB565_RED, + 100); + MyPinball.obstacles.emplace_back( + 0.06, Vector2D(libnum::num32(0.50), libnum::num32(0.95)), 1.5, RGB565_RED, + 100); + MyPinball.obstacles.emplace_back( + 0.04, Vector2D(libnum::num32(0.15), libnum::num32(0.80)), 1.5, + RGB565_LEMONYELLOW, 25); + MyPinball.obstacles.emplace_back( + 0.04, Vector2D(libnum::num32(0.85), libnum::num32(0.80)), 1.5, + RGB565_LEMONYELLOW, 25); + MyPinball.obstacles.emplace_back( + 0.04, Vector2D(libnum::num32(0.30), libnum::num32(0.60)), 1.5, + RGB565_GREEN, 10); + MyPinball.obstacles.emplace_back( + 0.04, Vector2D(libnum::num32(0.70), libnum::num32(0.60)), 1.5, + RGB565_GREEN, 10); - - - for( int i=0; i island1; - island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.10)) ); - island1.push_back( Vector2D(libnum::num32(0.40), libnum::num32(1.20)) ); - island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.30)) ); - island1.push_back( Vector2D(libnum::num32(0.60), libnum::num32(1.20)) ); - MyPinball.islands.push_back( island1 ); + island1.emplace_back( libnum::num32(0.50), libnum::num32(1.10) ); + island1.emplace_back( libnum::num32(0.40), libnum::num32(1.20) ); + island1.emplace_back( libnum::num32(0.50), libnum::num32(1.30) ); + island1.emplace_back( libnum::num32(0.60), libnum::num32(1.20) ); + MyPinball.islands.push_back(island1); - std::vector island2; - island2.push_back( Vector2D(libnum::num32(0.50), libnum::num32(0.60)) ); - island2.push_back( Vector2D(libnum::num32(0.40), libnum::num32(0.80)) ); - island2.push_back( Vector2D(libnum::num32(0.50), libnum::num32(0.82)) ); - island2.push_back( Vector2D(libnum::num32(0.60), libnum::num32(0.80)) ); - MyPinball.islands.push_back( island2 ); + std::vector island2; + island2.emplace_back( libnum::num32(0.50), libnum::num32(0.60) ); + island2.emplace_back( libnum::num32(0.40), libnum::num32(0.80) ); + island2.emplace_back( libnum::num32(0.50), libnum::num32(0.82) ); + island2.emplace_back( libnum::num32(0.60), libnum::num32(0.80) ); + MyPinball.islands.push_back(island2); + std::vector island3; + island3.emplace_back( libnum::num32(0.12), libnum::num32(0.45) ); + island3.emplace_back( libnum::num32(0.12), libnum::num32(0.65) ); + island3.emplace_back( libnum::num32(0.26), libnum::num32(0.37) ); + MyPinball.islands.push_back(island3); - std::vector island3; - island3.push_back( Vector2D(libnum::num32(0.12), libnum::num32(0.45)) ); - island3.push_back( Vector2D(libnum::num32(0.12), libnum::num32(0.65)) ); - island3.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.37)) ); - MyPinball.islands.push_back( island3 ); + std::vector island4; + island4.emplace_back( libnum::num32(0.88), libnum::num32(0.65) ); + island4.emplace_back( libnum::num32(0.88), libnum::num32(0.45) ); + island4.emplace_back( libnum::num32(0.74), libnum::num32(0.37) ); + MyPinball.islands.push_back(island4); - std::vector island4; - island4.push_back( Vector2D(libnum::num32(0.88), libnum::num32(0.65)) ); - island4.push_back( Vector2D(libnum::num32(0.88), libnum::num32(0.45)) ); - island4.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.37)) ); - MyPinball.islands.push_back( island4 ); + MyPinball.flippers.clear(); + libnum::num32 flip_radius = libnum::num32(0.03); + libnum::num32 flip_length = libnum::num32(0.2); + libnum::num32 flip_maxRotation = libnum::num32(1.0); + libnum::num32 flip_restAngle = libnum::num32(0.5); + libnum::num32 flip_angularVelocity = libnum::num32(10.0); + libnum::num32 flip_restitution = libnum::num32(0.0); + Vector2D flip_pos1(libnum::num32(0.26), libnum::num32(0.22)); + MyPinball.flippers.emplace_back( + flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, + flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE); - MyPinball.flippers.clear(); - libnum::num32 flip_radius = libnum::num32(0.03); - libnum::num32 flip_length = libnum::num32(0.2); - libnum::num32 flip_maxRotation = libnum::num32(1.0); - libnum::num32 flip_restAngle = libnum::num32(0.5); - libnum::num32 flip_angularVelocity = libnum::num32(10.0); - libnum::num32 flip_restitution = libnum::num32(0.0); - - Vector2D flip_pos1(libnum::num32(0.26), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE)); - - Vector2D flip_pos2(libnum::num32(0.74), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_OCEANBLUE)); + Vector2D flip_pos2(libnum::num32(0.74), libnum::num32(0.22)); + MyPinball.flippers.emplace_back(flip_radius, flip_pos2, flip_length, + libnum::num32(PI) + flip_restAngle, + -flip_maxRotation, flip_angularVelocity, + flip_restitution, RIGHT, RGB565_OCEANBLUE); } - void Setup_Table_4(void) { libnum::num32 offset = libnum::num32(0.02); @@ -368,51 +451,51 @@ void Setup_Table_4(void) { MyPinball.sideimage = &img_abyss; MyPinball.borders.clear(); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.25))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.98), libnum::num32(0.40))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.98), libnum::num32(1.10))); + MyPinball.borders.emplace_back( libnum::num32(0.74), libnum::num32(0.25) ); + MyPinball.borders.emplace_back( libnum::num32(0.98), libnum::num32(0.40) ); + MyPinball.borders.emplace_back( libnum::num32(0.98), libnum::num32(1.10) ); -// MyPinball.borders.push_back( Vector2D(libnum::num32(0.96), libnum::num32(1.34))); + // MyPinball.borders.emplace_back( libnum::num32(0.96), + // libnum::num32(1.34))); - MyPinball.borders.push_back( Vector2D(libnum::num32(1.04), libnum::num32(1.10))); - MyPinball.borders.push_back( Vector2D(libnum::num32(1.04), libnum::num32(0.10))); - MyPinball.borders.push_back( Vector2D(libnum::num32(1.11), libnum::num32(0.10))); - MyPinball.borders.push_back( Vector2D(libnum::num32(1.11), libnum::num32(1.20))); + MyPinball.borders.emplace_back( libnum::num32(1.04), libnum::num32(1.10) ); + MyPinball.borders.emplace_back( libnum::num32(1.04), libnum::num32(0.10) ); + MyPinball.borders.emplace_back( libnum::num32(1.11), libnum::num32(0.10) ); + MyPinball.borders.emplace_back( libnum::num32(1.11), libnum::num32(1.20) ); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.90), libnum::num32(1.46))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.81), libnum::num32(1.56))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.70), libnum::num32(1.64))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.57), libnum::num32(1.68))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.43), libnum::num32(1.68))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.30), libnum::num32(1.64))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.19), libnum::num32(1.56))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.10), libnum::num32(1.46))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.04), libnum::num32(1.34))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.02), libnum::num32(1.20))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.02), libnum::num32(0.40))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.25))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.02))); - MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.02))); + MyPinball.borders.emplace_back( libnum::num32(0.90), libnum::num32(1.46) ); + MyPinball.borders.emplace_back( libnum::num32(0.81), libnum::num32(1.56) ); + MyPinball.borders.emplace_back( libnum::num32(0.70), libnum::num32(1.64) ); + MyPinball.borders.emplace_back( libnum::num32(0.57), libnum::num32(1.68) ); + MyPinball.borders.emplace_back( libnum::num32(0.43), libnum::num32(1.68) ); + MyPinball.borders.emplace_back( libnum::num32(0.30), libnum::num32(1.64) ); + MyPinball.borders.emplace_back( libnum::num32(0.19), libnum::num32(1.56) ); + MyPinball.borders.emplace_back( libnum::num32(0.10), libnum::num32(1.46) ); + MyPinball.borders.emplace_back( libnum::num32(0.04), libnum::num32(1.34) ); + MyPinball.borders.emplace_back( libnum::num32(0.02), libnum::num32(1.20) ); + MyPinball.borders.emplace_back( libnum::num32(0.02), libnum::num32(0.40) ); + MyPinball.borders.emplace_back( libnum::num32(0.26), libnum::num32(0.25) ); + MyPinball.borders.emplace_back( libnum::num32(0.26), libnum::num32(0.02) ); + MyPinball.borders.emplace_back( libnum::num32(0.74), libnum::num32(0.02) ); MyPinball.has_locker = true; MyPinball.locker.clear(); - MyPinball.locker.push_back( Vector2D(libnum::num32(0.90), libnum::num32(1.46))); - MyPinball.locker.push_back( Vector2D(libnum::num32(1.11), libnum::num32(1.20))); - MyPinball.locker.push_back( Vector2D(libnum::num32(1.11), libnum::num32(1.10))); - MyPinball.locker.push_back( Vector2D(libnum::num32(1.04), libnum::num32(1.10))); - MyPinball.locker.push_back( Vector2D(libnum::num32(0.98), libnum::num32(1.10))); - MyPinball.locker.push_back( Vector2D(libnum::num32(0.98), libnum::num32(1.20))); - MyPinball.locker.push_back( Vector2D(libnum::num32(0.96), libnum::num32(1.34))); + MyPinball.locker.emplace_back( libnum::num32(0.90), libnum::num32(1.46) ); + MyPinball.locker.emplace_back( libnum::num32(1.11), libnum::num32(1.20) ); + MyPinball.locker.emplace_back( libnum::num32(1.11), libnum::num32(1.10) ); + MyPinball.locker.emplace_back( libnum::num32(1.04), libnum::num32(1.10) ); + MyPinball.locker.emplace_back( libnum::num32(0.98), libnum::num32(1.10) ); + MyPinball.locker.emplace_back( libnum::num32(0.98), libnum::num32(1.20) ); + MyPinball.locker.emplace_back( libnum::num32(0.96), libnum::num32(1.34) ); MyPinball.locker_is_enabled = false; - MyPinball.Lock_radius = libnum::num( 0.03 ); + MyPinball.Lock_radius = libnum::num(0.03); MyPinball.Lock_pos = Vector2D(libnum::num32(0.50), libnum::num32(1.64)); MyPinball.Lock_color = RGB565_LEMONYELLOW; - -// MyPinball.Locker_enabler.push_back( Target( libnum::num32(0.06), Vector2D(libnum::num32(0.83), libnum::num32(1.39)), RGB565_APPLEGREEN, 0 ) ); - - + // MyPinball.Locker_enabler.push_back( Target( libnum::num32(0.06), + // Vector2D(libnum::num32(0.83), libnum::num32(1.39)), RGB565_APPLEGREEN, 0 ) + // ); MyPinball.balls.clear(); libnum::num32 ball_radius = libnum::num32(0.03); @@ -420,75 +503,73 @@ void Setup_Table_4(void) { Vector2D ball_pos1(libnum::num32(1.075), libnum::num32(0.15)); Vector2D ball_vel1(libnum::num32(0.0), libnum::num32(3.5)); - MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, 0.2, RGB565_LEMONYELLOW)); - + MyPinball.balls.push_back(Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, + 0.2, RGB565_LEMONYELLOW)); + Vector2D ball_pos2(libnum::num32(1.075), libnum::num32(0.45)); Vector2D ball_vel2(libnum::num32(0.0), libnum::num32(3.5)); - MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, 0.2, RGB565_LEMONYELLOW )); - + MyPinball.balls.push_back(Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, + 0.2, RGB565_LEMONYELLOW)); MyPinball.obstacles.clear(); - MyPinball.obstacles.reserve( 16 ); + MyPinball.obstacles.reserve(16); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.50), libnum::num32(1.45)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.74), libnum::num32(1.20)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.26), libnum::num32(1.20)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.06, Vector2D(libnum::num32(0.50), libnum::num32(0.95)), 1.5, RGB565_RED, 100)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.15), libnum::num32(0.80)), 1.5, RGB565_LEMONYELLOW, 25)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.85), libnum::num32(0.80)), 1.5, RGB565_LEMONYELLOW, 25)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.30), libnum::num32(0.60)), 1.5, RGB565_GREEN, 10)); - MyPinball.obstacles.push_back( Obstacle(0.04, Vector2D(libnum::num32(0.70), libnum::num32(0.60)), 1.5, RGB565_GREEN, 10)); + MyPinball.obstacles.emplace_back( 0.06, Vector2D(libnum::num32(0.50), libnum::num32(1.45)), 1.5, RGB565_RED, 100 ); + MyPinball.obstacles.emplace_back( 0.06, Vector2D(libnum::num32(0.74), libnum::num32(1.20)), 1.5, RGB565_RED, 100 ); + MyPinball.obstacles.emplace_back( 0.06, Vector2D(libnum::num32(0.26), libnum::num32(1.20)), 1.5, RGB565_RED, 100 ); + MyPinball.obstacles.emplace_back( 0.06, Vector2D(libnum::num32(0.50), libnum::num32(0.95)), 1.5, RGB565_RED, 100 ); + MyPinball.obstacles.emplace_back( 0.04, Vector2D(libnum::num32(0.15), libnum::num32(0.80)), 1.5, RGB565_LEMONYELLOW, 25 ); + MyPinball.obstacles.emplace_back( 0.04, Vector2D(libnum::num32(0.85), libnum::num32(0.80)), 1.5, RGB565_LEMONYELLOW, 25 ); + MyPinball.obstacles.emplace_back( 0.04, Vector2D(libnum::num32(0.30), libnum::num32(0.60)), 1.5, RGB565_GREEN, 10 ); + MyPinball.obstacles.emplace_back( 0.04, Vector2D(libnum::num32(0.70), libnum::num32(0.60)), 1.5, RGB565_GREEN, 10 ); - - - for( int i=0; i island1; - island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.15)) ); - island1.push_back( Vector2D(libnum::num32(0.45), libnum::num32(1.20)) ); - island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.25)) ); - island1.push_back( Vector2D(libnum::num32(0.55), libnum::num32(1.20)) ); - //island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.10)) ); - //island1.push_back( Vector2D(libnum::num32(0.40), libnum::num32(1.20)) ); - //island1.push_back( Vector2D(libnum::num32(0.50), libnum::num32(1.30)) ); - //island1.push_back( Vector2D(libnum::num32(0.60), libnum::num32(1.20)) ); - MyPinball.islands.push_back( island1 ); + island1.emplace_back( libnum::num32(0.50), libnum::num32(1.15) ); + island1.emplace_back( libnum::num32(0.45), libnum::num32(1.20) ); + island1.emplace_back( libnum::num32(0.50), libnum::num32(1.25) ); + island1.emplace_back( libnum::num32(0.55), libnum::num32(1.20) ); + // island1.emplace_back( libnum::num32(0.50), libnum::num32(1.10) ); + // island1.emplace_back( libnum::num32(0.40), libnum::num32(1.20) ); + // island1.emplace_back( libnum::num32(0.50), libnum::num32(1.30) ); + // island1.emplace_back( libnum::num32(0.60), libnum::num32(1.20) ); + MyPinball.islands.push_back(island1); - std::vector island2; - island2.push_back( Vector2D(libnum::num32(0.50), libnum::num32(0.60)) ); - island2.push_back( Vector2D(libnum::num32(0.40), libnum::num32(0.80)) ); - island2.push_back( Vector2D(libnum::num32(0.50), libnum::num32(0.82)) ); - island2.push_back( Vector2D(libnum::num32(0.60), libnum::num32(0.80)) ); - MyPinball.islands.push_back( island2 ); + std::vector island2; + island2.emplace_back( libnum::num32(0.50), libnum::num32(0.60) ); + island2.emplace_back( libnum::num32(0.40), libnum::num32(0.80) ); + island2.emplace_back( libnum::num32(0.50), libnum::num32(0.82) ); + island2.emplace_back( libnum::num32(0.60), libnum::num32(0.80) ); + MyPinball.islands.push_back(island2); + std::vector island3; + island3.emplace_back( libnum::num32(0.12), libnum::num32(0.45) ); + island3.emplace_back( libnum::num32(0.12), libnum::num32(0.65) ); + island3.emplace_back( libnum::num32(0.26), libnum::num32(0.37) ); + MyPinball.islands.push_back(island3); - std::vector island3; - island3.push_back( Vector2D(libnum::num32(0.12), libnum::num32(0.45)) ); - island3.push_back( Vector2D(libnum::num32(0.12), libnum::num32(0.65)) ); - island3.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.37)) ); - MyPinball.islands.push_back( island3 ); + std::vector island4; + island4.emplace_back( libnum::num32(0.88), libnum::num32(0.65) ); + island4.emplace_back( libnum::num32(0.88), libnum::num32(0.45) ); + island4.emplace_back( libnum::num32(0.74), libnum::num32(0.37) ); + MyPinball.islands.push_back(island4); - std::vector island4; - island4.push_back( Vector2D(libnum::num32(0.88), libnum::num32(0.65)) ); - island4.push_back( Vector2D(libnum::num32(0.88), libnum::num32(0.45)) ); - island4.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.37)) ); - MyPinball.islands.push_back( island4 ); + MyPinball.flippers.clear(); + libnum::num32 flip_radius = libnum::num32(0.03); + libnum::num32 flip_length = libnum::num32(0.2); + libnum::num32 flip_maxRotation = libnum::num32(1.0); + libnum::num32 flip_restAngle = libnum::num32(0.5); + libnum::num32 flip_angularVelocity = libnum::num32(10.0); + libnum::num32 flip_restitution = libnum::num32(0.0); - - MyPinball.flippers.clear(); - libnum::num32 flip_radius = libnum::num32(0.03); - libnum::num32 flip_length = libnum::num32(0.2); - libnum::num32 flip_maxRotation = libnum::num32(1.0); - libnum::num32 flip_restAngle = libnum::num32(0.5); - libnum::num32 flip_angularVelocity = libnum::num32(10.0); - libnum::num32 flip_restitution = libnum::num32(0.0); - - Vector2D flip_pos1(libnum::num32(0.26), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE)); + Vector2D flip_pos1(libnum::num32(0.26), libnum::num32(0.22)); + MyPinball.flippers.emplace_back( flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE ); Vector2D flip_pos2(libnum::num32(0.74), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_OCEANBLUE)); + MyPinball.flippers.emplace_back( flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_OCEANBLUE ); } #endif \ No newline at end of file diff --git a/src/utilities.h b/src/utilities.h index 22f1e0e..94112bf 100644 --- a/src/utilities.h +++ b/src/utilities.h @@ -6,66 +6,64 @@ #include #include -void azrp_draw_text(int x, int y, char const *fmt, ...) -{ - char str[128]; - va_list args; - va_start(args, fmt); - vsnprintf(str, 128, fmt, args); - va_end(args); +void azrp_draw_text(int x, int y, char const *fmt, ...) { + char str[128]; + va_list args; + va_start(args, fmt); + vsnprintf(str, 128, fmt, args); + va_end(args); - extern bopti_image_t img_font; + extern bopti_image_t img_font; - for(int i = 0; str[i]; i++) { - if(str[i] < 32 || str[i] >= 0x7f) continue; + for (int i = 0; str[i]; i++) { + if (str[i] < 32 || str[i] >= 0x7f) + continue; - int row = (str[i] - 32) >> 4; - int col = (str[i] - 32) & 15; - azrp_subimage(x + 5 * i, y, &img_font, 7 * col + 1, 9 * row + 1, 6, 8, DIMAGE_NONE); - } + int row = (str[i] - 32) >> 4; + int col = (str[i] - 32) & 15; + azrp_subimage(x + 5 * i, y, &img_font, 7 * col + 1, 9 * row + 1, 6, 8, + DIMAGE_NONE); + } } -void azrp_draw_pinball(int x, int y, uint16_t color, char const *fmt, ...) -{ - char str[128]; - va_list args; - va_start(args, fmt); - vsnprintf(str, 128, fmt, args); - va_end(args); +void azrp_draw_pinball(int x, int y, uint16_t color, char const *fmt, ...) { + char str[128]; + va_list args; + va_start(args, fmt); + vsnprintf(str, 128, fmt, args); + va_end(args); - extern bopti_image_t img_font_pinball; + extern bopti_image_t img_font_pinball; - for(int i = 0; str[i]; i++) { - if(str[i] < 32 || str[i] >= 0x7f) continue; + for (int i = 0; str[i]; i++) { + if (str[i] < 32 || str[i] >= 0x7f) + continue; - int row = (str[i] - 32) >> 4; - int col = (str[i] - 32) & 15; - azrp_subimage_p8_dye(x + 11 * i, y, &img_font_pinball, 14 * col + 1, 20 * row + 2, 11, 14, IMAGE_DYE, color); - } + int row = (str[i] - 32) >> 4; + int col = (str[i] - 32) & 15; + azrp_subimage_p8_dye(x + 11 * i, y, &img_font_pinball, 14 * col + 1, + 20 * row + 2, 11, 14, IMAGE_DYE, color); + } } +libnum::num32 COS(libnum::num32 angle) { -libnum::num32 COS( libnum::num32 angle ) -{ + float a = (float)angle; + float c = cos(a); + return libnum::num32(c); - float a = (float) angle; - float c = cos( a ); - return libnum::num32(c); - - //return cos_num32( angle ); + // return cos_num32( angle ); } -libnum::num32 SIN( libnum::num32 angle ) -{ +libnum::num32 SIN(libnum::num32 angle) { - float a = (float) angle; - float s = sin( a ); - return libnum::num32(s); + float a = (float)angle; + float s = sin(a); + return libnum::num32(s); - //return sin_num32( angle ); + // return sin_num32( angle ); } - extern libnum::num32 flipperHeight; extern libnum::num32 cScale; extern libnum::num32 simWidth; @@ -79,44 +77,46 @@ uint16_t CY(Vector2D pos) { return (int)(libnum::num32(azrp_height) - pos.y * cScale); } -/* return the scaled disctance given in argument (typically for circles radii) */ -uint16_t CR(libnum::num distance ) { - return (int)(distance * cScale); -} +/* return the scaled disctance given in argument (typically for circles radii) + */ +uint16_t CR(libnum::num distance) { return (int)(distance * cScale); } -#define MIN(a,b) ( ((a)>=(b)) ? (b) : (a) ) -#define MAX(a,b) ( ((a)<=(b)) ? (b) : (a) ) -#define ABS(a) ( ((a)>=0) ? (a) : -(a) ) -#define SIGN(a) ( (a)<0 ? -1 : (a>0) ? +1 : 0 ) -#define PI 3.14159265 +/* Some usefull macros */ +#define MIN(a, b) (((a) >= (b)) ? (b) : (a)) +#define MAX(a, b) (((a) <= (b)) ? (b) : (a)) +#define ABS(a) (((a) >= 0) ? (a) : -(a)) +#define SIGN(a) ((a) < 0 ? -1 : (a > 0) ? +1 : 0) + + +/* Some constants */ +#define PI 3.14159265 /* usual colors*/ -#define RGB565_BLACK 0x0000 -#define RGB565_RED 0xF800 -#define RGB565_GREEN 0x07E0 -#define RGB565_BLUE 0x001F -#define RGB565_YELLOW 0xFFE0 -#define RGB565_PURPLE 0xF81F -#define RGB565_CYAN 0x07FF -#define RGB565_WHITE 0xFFFF - +#define RGB565_BLACK 0x0000 +#define RGB565_RED 0xF800 +#define RGB565_GREEN 0x07E0 +#define RGB565_BLUE 0x001F +#define RGB565_YELLOW 0xFFE0 +#define RGB565_PURPLE 0xF81F +#define RGB565_CYAN 0x07FF +#define RGB565_WHITE 0xFFFF /* advanced palette */ -#define RGB565_DARKORANGE 0xF280 -#define RGB565_ORANGE 0xF4A0 -#define RGB565_LIGHORANGE 0xF5C0 +#define RGB565_DARKORANGE 0xF280 +#define RGB565_ORANGE 0xF4A0 +#define RGB565_LIGHORANGE 0xF5C0 -#define RGB565_LEMONYELLOW 0xF7C6 -#define RGB565_APPLEGREEN 0xCF25 -#define RGB565_LEAFGREEN 0x6566 +#define RGB565_LEMONYELLOW 0xF7C6 +#define RGB565_APPLEGREEN 0xCF25 +#define RGB565_LEAFGREEN 0x6566 -#define RGB565_OCEANBLUE 0x0479 -#define RGB565_AZURBLUE 0x023E -#define RGB565_DEEPBLUE 0x3813 +#define RGB565_OCEANBLUE 0x0479 +#define RGB565_AZURBLUE 0x023E +#define RGB565_DEEPBLUE 0x3813 -#define RGB565_DEEPPURPLE 0x8015 -#define RGB565_CHERRYRED 0xA0C9 -#define RGB565_BLOODYRED 0xF122 +#define RGB565_DEEPPURPLE 0x8015 +#define RGB565_CHERRYRED 0xA0C9 +#define RGB565_BLOODYRED 0xF122 #endif \ No newline at end of file diff --git a/src/vector2D.h b/src/vector2D.h index 65eb1c8..52b77ea 100644 --- a/src/vector2D.h +++ b/src/vector2D.h @@ -253,6 +253,7 @@ public: libnum::num32 y; }; + Vector2D ClosestPointOnSegment(Vector2D P, Vector2D A, Vector2D B) { Vector2D AB = B - A;