#pragma once #include #include #include #include #include class EngineContext; class SceneManager; struct DrawContext; class MeshAsset; struct GLTFMaterial; class PlanetSystem { public: enum class BodyID : uint8_t { Earth = 0, Moon = 1, }; struct PlanetBody { std::string name; WorldVec3 center_world{0.0, 0.0, 0.0}; double radius_m = 1.0; bool visible = true; std::shared_ptr mesh; std::shared_ptr material; }; void init(EngineContext *context); void update_and_emit(const SceneManager &scene, DrawContext &draw_context); bool enabled() const { return _enabled; } void set_enabled(bool enabled) { _enabled = enabled; } const PlanetBody *get_body(BodyID id) const; PlanetBody *get_body(BodyID id); const std::vector &bodies() const { return _bodies; } private: void ensure_bodies_created(); EngineContext *_context = nullptr; bool _enabled = true; std::vector _bodies; };