#pragma once #include "ZLMath.h" #include "Renderer.h" #include "TextureManager.h" #include #include #include #include #include #include #include #include #include #include #include "Perlin.h" #include "PlanetData.h" #include "StoneObject.h" #include "FrameBuffer.h" namespace ZL { class PlanetObject { public: // Агрегация: логика и данные теперь здесь PlanetData planetData; // Данные только для рендеринга (OpenGL specific) VertexRenderStruct planetRenderStruct; VertexRenderStruct planetRenderStructCut; VertexRenderStruct planetRenderYellowStruct; VertexRenderStruct planetAtmosphereRenderStruct; VertexRenderStruct planetStonesRenderStruct; VertexRenderStruct planetStonesToBakeRenderStruct; StoneGroup planetStones; std::vector triangleIndicesToDraw; std::shared_ptr sandTexture; std::shared_ptr stoneTexture; bool drawDataDirty = true; void prepareDrawData(); std::unique_ptr stoneMapFB; public: PlanetObject(); void init(); void update(float deltaTimeMs); void bakeStoneTexture(Renderer& renderer); void draw(Renderer& renderer); void drawStones(Renderer& renderer); void drawPlanet(Renderer& renderer); void drawYellowZone(Renderer& renderer); void drawAtmosphere(Renderer& renderer); float distanceToPlanetSurface(const Vector3f& viewerPosition); }; } // namespace ZL