Nimbin[12]?SDL & Graphics / sdl_runtime_compiler / src/states/menu_state.hpp

sdl_runtime_compiler git · main

SDL3 game for running and compiling code at runtime

sdl3 c++ compiler dlopen cmake · first commit 2026-04-19 · last commit 2026-07-03 (3 months ago) · synced 3 days ago · upstream: git.ide3.de/hsnr/sdl-runtime-compiler

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.gz
src/states/menu_state.hpp 1.4 KB · 63 lines 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