66 lines
1.7 KiB
C++
66 lines
1.7 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"
|
|
#include "StoneObject.h"
|
|
#include "FrameBuffer.h"
|
|
|
|
namespace ZL {
|
|
|
|
class PlanetObject {
|
|
private:
|
|
// Агрегация: логика и данные теперь здесь
|
|
PlanetData planetData;
|
|
|
|
// Данные только для рендеринга (OpenGL specific)
|
|
VertexRenderStruct planetRenderStruct;
|
|
VertexRenderStruct planetRenderStructCut;
|
|
VertexRenderStruct planetRenderYellowStruct;
|
|
VertexRenderStruct planetAtmosphereRenderStruct;
|
|
VertexRenderStruct planetStonesRenderStruct;
|
|
VertexRenderStruct planetStonesToBakeRenderStruct;
|
|
StoneGroup planetStones;
|
|
|
|
std::vector<int> triangleIndicesToDraw;
|
|
|
|
std::shared_ptr<Texture> sandTexture;
|
|
std::shared_ptr<Texture> stoneTexture;
|
|
|
|
bool drawDataDirty = true;
|
|
void prepareDrawData();
|
|
|
|
std::unique_ptr<FrameBuffer> stoneMapFB;
|
|
|
|
public:
|
|
PlanetObject();
|
|
|
|
int x = 0;
|
|
int y = 0;
|
|
|
|
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
|