/** * @file main.c * @brief The main loop and controls * @date 2026-04-27 */ #include #include #include #include #include #include "graphics.h" #include "physics.h" #include "common.h" int main(void) { // physics related object_t world[MAX_OBJECTS]; uint32_t objs_count = 0; float force_gravity = FORCE_GRAVITY_DEFAULT; object_t* grabbed_obj = NULL; bool anti_gravity_toggle = false; objs_count = 1; init_physics(world, MAX_OBJECTS); init_graphics(WINDOW_X, WINDOW_Y, SCREEN_TITLE); while(!WindowShouldClose()) { Vector2 pos_cursor = GetMousePosition(); /* if(IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) { */ /* if(objs_count == 0) { */ /* grabbed_obj = NULL; */ /* } else { */ /* for(uint32_t iter = objs_count; iter > 0; iter--) { */ /* object_t* obj = &world[iter - 1]; */ /* float dx = pos_cursor.x - obj->pos.x; */ /* float dy = pos_cursor.y - obj->pos.y; */ /* if(hypot(dx, dy) <= (obj->size_x && obj->size_y)) { */ /* obj->grabbed = true; */ /* grabbed_obj = obj; */ /* break; */ /* } */ /* } */ /* } */ /* } */ if (IsMouseButtonReleased(MOUSE_BUTTON_RIGHT)) { if(grabbed_obj != NULL) { grabbed_obj->grabbed = false; grabbed_obj = NULL; } } if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) { if(objs_count < MAX_OBJECTS) { world[objs_count++] = (object_t){ .color = RANDOM_COLOR(), .elast = 0.9f, .frict = 0.99f, .pos = pos_cursor, .pos_prev = pos_cursor, .vel = { (float)GetRandomValue(-300, 300), (float)GetRandomValue(-300, 300) }, .grabbed = false, .registered = true, .mass = GetRandomValue(3, 100), // will be done later }; } } if(IsKeyPressed(KEY_G)) { if(anti_gravity_toggle) { force_gravity = -75.0f; anti_gravity_toggle = false; } else if(!anti_gravity_toggle) { force_gravity = FORCE_GRAVITY_DEFAULT; anti_gravity_toggle = true; } } // to-do /* if(IsKeyPressed(KEY_C)) { */ /* clear_world(world); */ /* } */ float dt = GetFrameTime(); update_physics(world, objs_count, force_gravity, dt); begin_graphics_drawing(); clear_graphics(RAYWHITE); draw_graphics_objects(world, objs_count); draw_graphics_info(objs_count); end_graphics_drawing(); } close_graphics(); return EXIT_SUCCESS; }