90 lines
2.2 KiB
C++
90 lines
2.2 KiB
C++
|
|
#include "editor.hpp"
|
|
|
|
#include "game.h"
|
|
|
|
static bool show_demo_window = true;
|
|
static yeti_t yeti;
|
|
static u16 backbuffer[YETI_FRAMEBUFFER_WIDTH * YETI_FRAMEBUFFER_HEIGHT];
|
|
static SDL_Texture *texture = nullptr;
|
|
|
|
static void editor_yeti_tick(void)
|
|
{
|
|
void *pixels;
|
|
int pitch;
|
|
const bool *keys = SDL_GetKeyboardState(nullptr);
|
|
|
|
yeti.keyboard.state.up = keys[SDL_SCANCODE_UP] || keys[SDL_SCANCODE_W];
|
|
yeti.keyboard.state.down = keys[SDL_SCANCODE_DOWN] || keys[SDL_SCANCODE_S];
|
|
yeti.keyboard.state.left = keys[SDL_SCANCODE_LEFT];
|
|
yeti.keyboard.state.right = keys[SDL_SCANCODE_RIGHT];
|
|
yeti.keyboard.state.a = keys[SDL_SCANCODE_RCTRL];
|
|
yeti.keyboard.state.b = keys[SDL_SCANCODE_SPACE];
|
|
yeti.keyboard.state.l = keys[SDL_SCANCODE_A];
|
|
yeti.keyboard.state.r = keys[SDL_SCANCODE_Z];
|
|
yeti.keyboard.state.select = keys[SDL_SCANCODE_ESCAPE];
|
|
|
|
game_loop(&yeti);
|
|
|
|
if (SDL_LockTexture(texture, NULL, &pixels, &pitch))
|
|
{
|
|
SDL_memcpy(pixels, (void *)backbuffer, sizeof(backbuffer));
|
|
SDL_UnlockTexture(texture);
|
|
}
|
|
}
|
|
|
|
void editor_init(void)
|
|
{
|
|
// create yeti screens
|
|
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_XBGR1555, SDL_TEXTUREACCESS_STREAMING, YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT);
|
|
if (!texture)
|
|
die("Error: SDL_CreateTexture(): %s", SDL_GetError());
|
|
|
|
// init yeti state
|
|
yeti_init(&yeti, backbuffer, backbuffer, textures, palette);
|
|
yeti_init_lua(&yeti, YETI_GAMMA);
|
|
game_init(&yeti);
|
|
}
|
|
|
|
void editor_main(void)
|
|
{
|
|
// main menu bar
|
|
if (ImGui::BeginMainMenuBar())
|
|
{
|
|
if (ImGui::BeginMenu("File"))
|
|
{
|
|
if (ImGui::MenuItem("Quit", "Alt+F4"))
|
|
quit(0);
|
|
|
|
ImGui::EndMenu();
|
|
}
|
|
|
|
if (ImGui::BeginMenu("Misc"))
|
|
{
|
|
ImGui::MenuItem("Show ImGui Demo", "", &show_demo_window);
|
|
ImGui::EndMenu();
|
|
}
|
|
|
|
ImGui::EndMainMenuBar();
|
|
}
|
|
|
|
// demo window for testing
|
|
if (show_demo_window)
|
|
ImGui::ShowDemoWindow(&show_demo_window);
|
|
|
|
// game window
|
|
ImGui::SetNextWindowContentSize(ImVec2(YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT));
|
|
if (ImGui::Begin("Game Window", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse))
|
|
{
|
|
ImGui::Image((ImTextureID)texture, ImVec2(YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT));
|
|
ImGui::End();
|
|
}
|
|
|
|
// tick yeti state
|
|
editor_yeti_tick();
|
|
}
|
|
|
|
void editor_quit(void)
|
|
{
|
|
SDL_DestroyTexture(texture);
|
|
}
|