Files
dxdesktop/src/main.cpp

97 lines
2.5 KiB
C++

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <SDL3/SDL.h>
#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);
}
}