LeviLamina
Loading...
Searching...
No Matches
OverworldGenerator.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/deps/core/threading/InstancedThreadLocal.h"
7#include "mc/util/MultidimensionalArray.h"
8#include "mc/util/Random.h"
9#include "mc/world/level/levelgen/WorldGenerator.h"
10#include "mc/world/level/levelgen/feature/CanyonFeature.h"
11#include "mc/world/level/levelgen/feature/MonsterRoomFeature.h"
12#include "mc/world/level/levelgen/feature/UnderwaterCanyonFeature.h"
13
14// auto generated forward declare list
15// clang-format off
16class Aquifer;
17class Biome;
18class BiomeArea;
19class Block;
20class BlockPos;
21class BlockSource;
23class BlockVolume;
25class BoundingBox;
27class ChunkPos;
28class ChunkViewSource;
29class Dimension;
30class LevelChunk;
34// clang-format on
35
36class OverworldGenerator : public ::WorldGenerator {
37public:
38 // OverworldGenerator inner types declare
39 // clang-format off
40 struct ThreadData;
41 // clang-format on
42
43 // OverworldGenerator inner types define
44 struct ThreadData {
45 public:
46 // member variables
47 // NOLINTBEGIN
48 ::ll::TypedStorage<4, 4096, ::std::array<float, 1024>> buffer;
49 ::ll::TypedStorage<4, 1024, ::std::array<float, 256>> depthBuffer;
50 ::ll::TypedStorage<4, 1024, ::std::array<float, 256>> dataBuffer;
51 ::ll::TypedStorage<8, 655360, ::std::array<::Block const*, 81920>> blockBuffer;
52 ::ll::TypedStorage<8, 8, float*> fi;
53 ::ll::TypedStorage<8, 8, float*> fis;
54 ::ll::TypedStorage<8, 2576, ::Random> random;
55 // NOLINTEND
56 };
57
59
60public:
61 // member variables
62 // NOLINTBEGIN
63 ::ll::TypedStorage<4, 36, float[9]> mBiomeBlendKernel;
64 ::ll::TypedStorage<1, 1, bool const> mIsLegacyWorld;
65 ::ll::TypedStorage<
66 8,
67 168,
68 ::Bedrock::Threading::
69 InstancedThreadLocal<::OverworldGenerator::ThreadData, ::std::allocator<::OverworldGenerator::ThreadData>>>
70 generatorHelpersPool;
71 ::ll::TypedStorage<8, 32, ::MonsterRoomFeature> monsterRoomFeature;
72 ::ll::TypedStorage<2, 16, ::CanyonFeature> canyonFeature;
73 ::ll::TypedStorage<2, 16, ::UnderwaterCanyonFeature> underwaterCanyonFeature;
74 // NOLINTEND
75
76public:
77 // prevent constructor by default
78 OverworldGenerator();
79
80public:
81 // virtual functions
82 // NOLINTBEGIN
83 virtual ~OverworldGenerator() /*override*/;
84
85 virtual void loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad) /*override*/;
86
87 virtual bool structurePostProcessChunk(::ChunkViewSource& neighborhoodIn) /*override*/;
88
89 virtual bool decorationPostProcessChunk(::ChunkViewSource& neighborhoodIn) /*override*/;
90
91 virtual ::Util::MultidimensionalArray<float, 5, 5, 41>
92 generateDensityCellsForChunk(::ChunkPos const& chunkPos) const = 0;
93
94 virtual ::WorldGenerator::BlockVolumeDimensions getBlockVolumeDimensions() const /*override*/;
95
96 virtual void prepareHeights(
97 ::BlockVolume& box,
98 ::ChunkPos const& chunkPos,
99 ::std::vector<short>* ZXheights,
100 bool factorInBeardsAndShavers
101 ) /*override*/;
102
103 virtual ::BiomeArea getBiomeArea(::BoundingBox const& area, uint scale) const /*override*/;
104
105 virtual int getLevelGenHeight() const = 0;
106
107 virtual ::std::optional<::XoroshiroPositionalRandomFactory> getXoroshiroPositionalRandomFactory() const = 0;
108
109 virtual ::std::unique_ptr<::Aquifer>
110 tryMakeAquifer(::ChunkPos const&, ::SurfaceLevelCache const&, short, short, short) const;
111
112 virtual void decorateWorldGenLoadChunk(
113 ::Biome const& biome,
114 ::LevelChunk& lc,
115 ::BlockVolumeTarget& target,
116 ::Random& random,
117 ::ChunkPos const& pos
118 ) const /*override*/;
119
120 virtual ::ChunkLocalNoiseCache createNoiseCache(::ChunkPos) const;
121
122 virtual ::PerlinSimplexNoise const& getSurfaceNoise() = 0;
123
124 virtual ::std::unique_ptr<::PerlinSimplexNoise> const& getMaterialAdjNoise() const = 0;
125
126 virtual void _prepareHeights(
127 ::BlockVolume&,
128 ::ChunkPos const&,
129 ::ChunkLocalNoiseCache const&,
130 ::Aquifer*,
131 ::std::function<void(::BlockPos const&, ::Block const&, int)>&&,
132 bool,
133 ::std::vector<short>*
134 ) = 0;
135 // NOLINTEND
136
137public:
138 // member functions
139 // NOLINTBEGIN
140 MCAPI OverworldGenerator(::Dimension& dimension, bool isLegacyWorld);
141
142 MCAPI void buildSurfaces(
143 ::OverworldGenerator::ThreadData& thread,
144 ::BlockVolume& blocks,
145 ::LevelChunk& levelChunk,
146 ::ChunkPos const& chunkPos,
147 ::SurfaceLevelCache const& surfaceLevelCache
148 );
149
150 MCAPI ::SurfaceLevelCache createSurfaceLevelCache(::ChunkPos chunkPos) const;
151 // NOLINTEND
152
153public:
154 // static functions
155 // NOLINTBEGIN
156 MCAPI static void
157 _fixWaterAlongEdges(::LevelChunk const& lc, ::BlockSource& source, ::BlockTickingQueue& instaTickQueue);
158 // NOLINTEND
159
160public:
161 // constructor thunks
162 // NOLINTBEGIN
163 MCAPI void* $ctor(::Dimension& dimension, bool isLegacyWorld);
164 // NOLINTEND
165
166public:
167 // destructor thunk
168 // NOLINTBEGIN
169 MCAPI void $dtor();
170 // NOLINTEND
171
172public:
173 // virtual function thunks
174 // NOLINTBEGIN
175 MCAPI void $loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad);
176
177 MCAPI bool $structurePostProcessChunk(::ChunkViewSource& neighborhoodIn);
178
179 MCAPI bool $decorationPostProcessChunk(::ChunkViewSource& neighborhoodIn);
180
181 MCAPI ::WorldGenerator::BlockVolumeDimensions $getBlockVolumeDimensions() const;
182
183 MCAPI void $prepareHeights(
184 ::BlockVolume& box,
185 ::ChunkPos const& chunkPos,
186 ::std::vector<short>* ZXheights,
187 bool factorInBeardsAndShavers
188 );
189
190 MCAPI ::BiomeArea $getBiomeArea(::BoundingBox const& area, uint scale) const;
191
192 MCFOLD ::std::unique_ptr<::Aquifer>
193 $tryMakeAquifer(::ChunkPos const&, ::SurfaceLevelCache const&, short, short, short) const;
194
195 MCFOLD void $decorateWorldGenLoadChunk(
196 ::Biome const& biome,
197 ::LevelChunk& lc,
198 ::BlockVolumeTarget& target,
199 ::Random& random,
200 ::ChunkPos const& pos
201 ) const;
202
203 MCAPI ::ChunkLocalNoiseCache $createNoiseCache(::ChunkPos) const;
204
205
206 // NOLINTEND
207
208public:
209 // vftables
210 // NOLINTBEGIN
211 MCNAPI static void** $vftableForChunkSource();
212
214 // NOLINTEND
215};
Definition Aquifer.h:17
Definition BiomeArea.h:11
Definition Biome.h:23
Definition BlockPos.h:19
Definition BlockSource.h:68
Definition BlockTickingQueue.h:24
Definition BlockVolumeTarget.h:29
Definition BlockVolume.h:13
Definition Block.h:43
Definition BoundingBox.h:13
Definition ChunkLocalNoiseCache.h:8
Definition ChunkPos.h:11
Definition ChunkViewSource.h:22
Definition Dimension.h:85
Definition LevelChunk.h:79
static MCAPI void ** $vftableForIPreliminarySurfaceProvider()
static MCAPI void ** $vftableForChunkSource()
Definition PerlinSimplexNoise.h:13
Definition Random.h:10
Definition SurfaceLevelCache.h:9
Definition MultidimensionalArray.h:12
Definition XoroshiroPositionalRandomFactory.h:16
STL namespace.
Definition OverworldGenerator.h:44
Definition WorldGenerator.h:39