Files
noggit-red/src/noggit/TileWater.hpp
2024-08-31 00:05:48 +02:00

96 lines
2.3 KiB
C++
Executable File

// This file is part of Noggit3, licensed under GNU General Public License (version 3).
#pragma once
#include <noggit/ChunkWater.hpp>
#include <noggit/MapHeaders.h>
#include <noggit/tool_enums.hpp>
#include <opengl/context.hpp>
#include <opengl/types.hpp>
#include <noggit/rendering/LiquidTextureManager.hpp>
#include <noggit/rendering/LiquidRender.hpp>
#include <memory>
#include <vector>
#include <array>
#include <set>
class MapTile;
class liquid_layer;
class sExtendableArray;
enum LiquidLayerUpdateFlags;
namespace BlizzardArchive
{
class ClientFile;
}
namespace Noggit::Rendering
{
class LiquidRender;
}
class TileWater
{
friend class Noggit::Rendering::LiquidRender;
public:
TileWater(MapTile *pTile, float pXbase, float pZbase, bool use_mclq_green_lava);
ChunkWater* getChunk(int x, int z);
void readFromFile(BlizzardArchive::ClientFile& theFile, size_t basePos);
void saveToFile(sExtendableArray& lADTFile, int& lMHDR_Position, int& lCurrentPosition);
void draw ( math::frustum const& frustum
, const glm::vec3& camera
, bool camera_moved
, OpenGL::Scoped::use_program& water_shader
, int animtime
, int layer
, display_mode display
, Noggit::Rendering::LiquidTextureManager* tex_manager
);
bool hasData(size_t layer);
bool hasData() { return _has_data; };
void CropMiniChunk(int x, int z, MapChunk* chunkTerrain);
void autoGen(float factor);
void update_underground_vertices_depth();
void setType(int type, size_t layer);
int getType(size_t layer);
std::array<glm::vec3, 2>& getExtents() { return _extents; };
[[nodiscard]]
bool isVisible(const math::frustum& frustum) const;
void setWatermapImage(QImage const& baseimage, float min_height, float max_height, int mode, bool tiledEdges);
void tagExtents(bool state) { _extents_changed = state; };
void tagUpdate() { _renderer.tagUpdate(); };
Noggit::Rendering::LiquidRender* renderer() { return &_renderer; };
[[nodiscard]]
bool needsUpdate() { return _renderer.needsUpdate() || _extents_changed; };
void recalcExtents();
private:
MapTile *tile;
Noggit::Rendering::LiquidRender _renderer;
std::unique_ptr<ChunkWater> chunks[16][16];
std::array<glm::vec3, 2> _extents;
bool _has_data = true;
bool _extents_changed = true;
float xbase;
float zbase;
};