#include #include #include #include #include "renderer.hpp" #include "sim/world.hpp" #include "sim/aircraft.hpp" #include "sim/airfield.hpp" #include "sim/af_spawner.hpp" static SDL_Window *window; static SDL_Renderer *sdl_renderer; static int width, height; int main(int argc, char *argv[]) { if (argc > 2) { printf("Usage: %s [WID]\n", argv[0]); exit(1); } SDL_Init(SDL_INIT_VIDEO); if (argc == 2) { int wid = 0; sscanf(argv[1], "%d", &wid); SDL_PropertiesID props = SDL_CreateProperties(); SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_X11_WINDOW_NUMBER, wid); window = SDL_CreateWindowWithProperties(props); } else { window = SDL_CreateWindow("dxdesktop", 1024, 1024, SDL_WINDOW_OPENGL); } sdl_renderer = SDL_CreateRenderer(window, NULL); SDL_GetWindowSize(window, &width, &height); dxd::Renderer renderer = dxd::Renderer(sdl_renderer, width, height); // World init dxd::sim::World world = dxd::sim::World(); world.add_obj(new dxd::sim::AFSpawner()); SDL_Event event; bool running = true; while (running) { while (SDL_PollEvent(&event)) { if (event.type == SDL_EVENT_QUIT) running = false; if (event.type == SDL_EVENT_KEY_DOWN) { if (event.key.key == SDLK_ESCAPE) running = false; } } const bool *key_states = SDL_GetKeyboardState(NULL); const float move_spd = 1.0f * renderer.get_zoom(); const float zoom_spd = 0.5f; if (key_states[SDL_SCANCODE_W]) renderer.move_camera(+vec2_unity * move_spd * (1.0f / 60.0f)); if (key_states[SDL_SCANCODE_S]) renderer.move_camera(-vec2_unity * move_spd * (1.0f / 60.0f)); if (key_states[SDL_SCANCODE_A]) renderer.move_camera(-vec2_unitx * move_spd * (1.0f / 60.0f)); if (key_states[SDL_SCANCODE_D]) renderer.move_camera(+vec2_unitx * move_spd * (1.0f / 60.0f)); if (key_states[SDL_SCANCODE_Q]) renderer.zoom_camera(+zoom_spd * (1.0f / 60.0f)); if (key_states[SDL_SCANCODE_E]) renderer.zoom_camera(-zoom_spd * (1.0f / 60.0f)); // Clear renderer.color(0, 0, 0); SDL_RenderClear(sdl_renderer); // World draw world.draw(&renderer); world.tick(1.0f / 60.0f); // World axis renderer.color(32, 32, 32); renderer.line(-vec2_unity * 2000, vec2_unity * 2000); renderer.line(-vec2_unitx * 2000, vec2_unitx * 2000); // Scale and position vec2 center = renderer.get_camera_pos(); float zoom = 100.0f/renderer.get_zoom(); renderer.color(128, 128, 255); renderer.dbg_txt(0, 0, "(%0.1f, %0.1f) @%0.2f", center.x, center.y, zoom); SDL_RenderPresent(sdl_renderer); SDL_Delay(1000 / 60); } }