sdl_runtime_compiler git · main
SDL3 game for running and compiling code at runtime
C++ 72.3% C 26.2%git clone https://git.christianimmanuel.de/sdl-graphics/sdl_runtime_compiler.gitwget https://git.christianimmanuel.de/sdl-graphics/sdl_runtime_compiler/archive/sdl_runtime_compiler.tar.gzsrc/states/menu_state.hpp raw
#pragma once
#include <string>
#include "cpputils/unique_ptr.hpp"
#include "entities/camera.hpp"
#include "entities/world.hpp"
#include "istate.hpp"
#include "text/token.hpp"
#include "utils/globals.hpp"
#include "utils/light.hpp"
namespace
Nimbin
{
class MenuState : public IState
{
enum class ItemKind : uint8_t
{
OpenFile,
StartLevel,
Quit,
};
struct MenuItem
{
ItemKind kind;
size_t level_index = 0;
Text::TokenPtr text3d;
Vec3 slot_pos {};
std::string label;
};
DynArray<MenuItem> _items;
cpputils::unique_ptr<World> _world;
cpputils::unique_ptr<Camera> _camera;
cpputils::unique_ptr<Light> _light;
Text::TokenPtr _title;
double _scroll_current{0.0};
double _scroll_target {0.0};
double _time {0.0};
size_t _selected {0};
void build_Items ();
void activate (Game& game);
bool is_LevelItem (size_t idx) const;
size_t pick_FromCrosshair() const;
static uint32_t yaw_FromRadians(double rad);
static double yaw_ToRadians (uint32_t yaw);
public:
MenuState();
void handle_Event(Game&, const SDL_Event&) override;
void update (double dt, const GlRenderer*) override;
void render (SDL_Window&, GlRenderer&) override;
};
} // namespace Nimbin