#ifndef _OBJECT_H #define _OBJECT_H #include "model.h" #include "effect.h" namespace Mauri { enum ObjectAlignment { CENTER = 0 }; enum BlendMode { TRANSLUCENT = 0, NORMAL }; class Object { public: Object() = default; ~Object(); u32 id; std::string name; bool visible; std::vector deps; bool fullscreen = false; bool passthrough = false; vec3 angles; vec2 size; vec3 scale; vec3 origin; vec3 color; f32 alpha; s32 color_blend_mode; vec4 color4; mat4x4 model_model; mat4x4 combine_model; RenderObject *model_object = nullptr; RenderObject *combine_object = nullptr; static auto parse(Parser &pr, const json &root) -> Object *; auto get_target_buffer() const -> const std::string &; auto get_texture_buffer() const -> const std::string &; auto swap_buffers() -> void { buffer_switch = !buffer_switch; } bool loaded = false; bool loaded_as_dep = false; Model *model = nullptr; std::vector effects; std::vector passes; auto load(Engine *engine) -> void; auto create_objects(Engine *engine, Texture *texture) -> void; auto draw(Engine *engine) -> void; private: bool buffer_switch; std::string buffer_a; std::string buffer_b; auto draw_internal(Engine *engine) -> void; }; } // namespace Mauri #endif // _OBJECT_H