#pragma once #include #include #include namespace OpenVic { class ModelSingleton : public godot::Object { GDCLASS(ModelSingleton, godot::Object) static inline ModelSingleton* singleton = nullptr; protected: static void _bind_methods(); public: static ModelSingleton* get_singleton(); ModelSingleton(); ~ModelSingleton(); private: GFX::Actor const* get_actor(std::string_view name, bool error_on_fail = true) const; GFX::Actor const* get_cultural_actor( std::string_view culture, std::string_view name, std::string_view fallback_name ) const; godot::Dictionary make_animation_dict(GFX::Actor::Animation const& animation) const; godot::Dictionary make_model_dict(GFX::Actor const& actor) const; template T> bool add_unit_dict(ordered_set const& units, godot::TypedArray& unit_array) const; bool add_building_dict( BuildingInstance const& building, Province const& province, godot::TypedArray& building_array ) const; public: godot::TypedArray get_units() const; godot::Dictionary get_cultural_gun_model(godot::String const& culture) const; godot::Dictionary get_cultural_helmet_model(godot::String const& culture) const; godot::Dictionary get_flag_model(bool floating) const; godot::TypedArray get_buildings() const; }; }