#pragma once #include "render/Renderer.h" #include "render/TextureManager.h" #include #include #include #include #include #include #include #include #include #include #include "utils/Perlin.h" #include "PlanetData.h" #include "StoneObject.h" #include "render/FrameBuffer.h" #include #include namespace ZL { class TaskManager; class MainThreadHandler; class PlanetObject { public: PlanetData planetData; // Данные только для рендеринга (OpenGL specific) VertexRenderStruct planetRenderStruct; VertexRenderStruct planetAtmosphereRenderStruct; StoneGroup planetStones; std::vector stonesToRender; VertexRenderStruct stoneToBake; std::vector triangleIndicesToDraw; std::shared_ptr sandTexture; std::shared_ptr stoneTexture; std::unique_ptr stoneMapFB; VertexRenderStruct campPlatform; std::shared_ptr campPlatformTexture; Vector3f lastUpdatePos; // External items, set outside Renderer& renderer; TaskManager& taskManager; MainThreadHandler& mainThreadHandler; public: PlanetObject(Renderer& iRenderer, TaskManager& iTaskManager, MainThreadHandler& iMainThreadHandler); void init(); void update(float deltaTimeMs); void bakeStoneTexture(Renderer& renderer); void draw(Renderer& renderer); void drawStones(Renderer& renderer); void drawPlanet(Renderer& renderer); void drawAtmosphere(Renderer& renderer); void drawCamp(Renderer& renderer); float distanceToPlanetSurface(const Vector3f& viewerPosition); }; } // namespace ZL