// // Lol Engine // // Copyright © 2017—2019 Sam Hocevar <sam@hocevar.net> // © 2009—2015 Benjamin “Touky” Huet <huet.benjamin@gmail.com> // // Lol Engine is free software. It comes without any warranty, to // the extent permitted by applicable law. You can redistribute it // and/or modify it under the terms of the Do What the Fuck You Want // to Public License, Version 2, as published by the WTFPL Task Force. // See http://www.wtfpl.net/ for more details. // #pragma once #include <string> #include <map> #include <memory> // // The Imgui integration // #define IM_VEC2_CLASS_EXTRA \ ImVec2(const lol::vec2 &v) { x = v.x; y = v.y; } \ ImVec2(const lol::ivec2 &v) : ImVec2(lol::vec2(v)) { } \ operator lol::vec2() const { return lol::vec2(x, y); } \ operator lol::ivec2() const { return lol::ivec2(lol::vec2(x, y)); } #define IM_VEC4_CLASS_EXTRA \ ImVec4(const lol::vec4 &v) { x = v.x; y = v.y; z = v.z; w = v.w; } \ ImVec4(const lol::ivec4 &v) : ImVec4(lol::vec4(v)) { } \ operator lol::vec4() const { return lol::vec4(x, y, z, w); } \ operator lol::ivec4() const { return lol::ivec4(lol::vec4(x, y, z, w)); } #include "imgui.h" #undef IM_VEC2_CLASS_EXTRA #undef IM_VEC4_CLASS_EXTRA namespace lol { class gui : public entity { public: gui(ImFontAtlas *shared_font_atlas); ~gui(); std::string GetName() const override { return "<gui>"; } static void init(ImFontAtlas *shared_font_atlas = nullptr); static void shutdown(); static std::string clipboard(); static void refresh_fonts(); private: typedef entity super; protected: virtual bool init_game() override; virtual bool init_draw() override; virtual void tick_game(float seconds) override; virtual void tick_draw(float seconds, Scene &scene) override; virtual bool release_game() override; virtual bool release_draw() override; static void static_set_clipboard(void *data, const char* text); static const char* static_get_clipboard(void *data); static void static_render_draw_lists(ImDrawData* draw_data); void render_draw_lists(ImDrawData* draw_data); struct Uniform { Uniform() { } Uniform(ShaderVar var) { m_var = var; } std::string tostring() const { return m_var.tostring(); } operator ShaderVar() const { return m_var; } operator ShaderUniform() const { return m_uniform; } //-- ShaderVar m_var; ShaderUniform m_uniform; }; //------------------------------------------------------------------------- TextureImage* m_font = nullptr; ShaderBuilder m_builder = ShaderBuilder("imgui_shader", "120"); std::shared_ptr<Shader> m_shader = nullptr; Uniform m_ortho; Uniform m_texture; array<ShaderAttrib> m_attribs; std::shared_ptr<VertexDeclaration> m_vdecl; std::string m_clipboard; class primitive : public PrimitiveRenderer { public: primitive() { } virtual void Render(Scene& scene, std::shared_ptr<PrimitiveSource> primitive); }; }; } /* namespace lol */