space-game001/PlanetObject.h
2025-12-16 22:21:20 +03:00

55 lines
1.4 KiB
C++

#pragma once
#include "ZLMath.h"
#include "Renderer.h"
#include "TextureManager.h"
#include <vector>
#include <chrono>
#include <iostream>
#include <string>
#include <array>
#include <numeric>
#include <random>
#include <algorithm>
#include <map>
#include <set>
#include "Perlin.h"
#include "PlanetData.h"
namespace ZL {
class PlanetObject {
private:
// Агрегация: логика и данные теперь здесь
PlanetData planetData;
// Данные только для рендеринга (OpenGL specific)
VertexRenderStruct planetRenderStruct;
VertexRenderStruct planetRenderYellowStruct;
VertexRenderStruct planetAtmosphereRenderStruct;
VertexRenderStruct planetStonesRenderStruct;
std::vector<int> triangleIndicesToDraw;
std::shared_ptr<Texture> sandTexture;
std::shared_ptr<Texture> stoneTexture;
bool drawDataDirty = true;
void prepareDrawData();
public:
PlanetObject();
void init();
void update(float deltaTimeMs);
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