#pragma once #include #include "entities/camera.hpp" #include "entities/game_object.hpp" #include "entities/pult.hpp" #include "utils/globals.hpp" namespace Nimbin { class GlRenderer; struct Light; struct Player; struct ProjectileContactEvent; namespace Text { class Handler; } class PultSystem { DynArray _pults; Pult* _connect_program { nullptr }; Pult* _connect_editor { nullptr }; public: void init (DynArray& scenery, DynArray& buttons_out, float world_scale); void update (double dt, const Camera& camera); void draw_Labels (GlRenderer& gl, const Camera& camera, const Light& light) const; std::optional try_Activate (GameObject* obj, const DynArray& buttons); std::optional handle_ProjectileContact(const ProjectileContactEvent& ev, const DynArray& buttons); std::optional handle_PlayerContact (const Player& player, const DynArray& buttons); Vec3 get_ConnectProgramPos () const; Vec3 get_ConnectEditorPos () const; DynArray get_Labels () const; }; } // namespace Nimbin