LeviLamina
Loading...
Searching...
No Matches
ChunkSource.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
7#include "mc/deps/core/utility/pub_sub/Subscription.h"
8#include "mc/platform/brstd/move_only_function.h"
9#include "mc/util/GridArea.h"
10#include "mc/world/level/chunk/ChunkSourceViewGenerateMode.h"
11#include "mc/world/level/chunk/ChunkState.h"
12#include "mc/world/level/chunk/LevelChunkGridAreaElement.h"
13
14// auto generated forward declare list
15// clang-format off
17class BlockPos;
18class BlockSource;
19class BoundingBox;
20class ChunkKey;
21class ChunkPos;
22class ChunkViewSource;
23class Dimension;
25class Level;
26class LevelChunk;
29class LevelStorage;
30class Random;
31class TaskResult;
35// clang-format on
36
37class ChunkSource : public ::Bedrock::EnableNonOwnerReferences {
38public:
39 // ChunkSource inner types define
40 enum class LoadMode : int {
41 None = 0,
42 Deferred = 1,
43 };
44
45public:
46 // member variables
47 // NOLINTBEGIN
48 ::ll::TypedStorage<4, 4, int> mChunkSide;
49 ::ll::TypedStorage<8, 8, ::Level*> mLevel;
50 ::ll::TypedStorage<8, 8, ::Dimension*> mDimension;
51 ::ll::TypedStorage<8, 8, ::ChunkSource*> mParent;
52 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ChunkSource>> mOwnedParent;
53 ::ll::TypedStorage<8, 8, ::LevelChunkBuilderData*> mLevelChunkBuilderData;
54 ::ll::TypedStorage<1, 1, ::std::atomic<bool>> mShuttingDown;
55 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnSaveSubscription;
56 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelStorageAppSuspendSubscription;
57 // NOLINTEND
58
59public:
60 // prevent constructor by default
61 ChunkSource();
62
63public:
64 // virtual functions
65 // NOLINTBEGIN
66 virtual ~ChunkSource() /*override*/;
67
68 virtual void shutdown();
69
70 virtual bool isShutdownDone();
71
72 virtual ::std::shared_ptr<::LevelChunk> getExistingChunk(::ChunkPos const& pos);
73
74 virtual ::std::shared_ptr<::LevelChunk> getRandomChunk(::Random& random);
75
76 virtual bool isChunkKnown(::ChunkPos const& chunkPos);
77
78 virtual bool isChunkSaved(::ChunkPos const& chunkPos);
79
80 virtual ::std::shared_ptr<::LevelChunk>
81 createNewChunk(::ChunkPos const& cp, ::ChunkSource::LoadMode lm, bool readOnly);
82
83 virtual ::std::shared_ptr<::LevelChunk>
84 getOrLoadChunk(::ChunkPos const& cp, ::ChunkSource::LoadMode lm, bool readOnly);
85
86 virtual bool structurePostProcessChunk(::ChunkViewSource& neighborhood);
87
88 virtual bool decorationPostProcessChunk(::ChunkViewSource& neighborhood);
89
90 virtual void checkAndReplaceChunk(::ChunkViewSource& neighborhood, ::LevelChunk& lc);
91
92 virtual bool verifyChunkNeedsNeighborAwareUpgrade(::LevelChunk& lc);
93
94 virtual void neighborAwareChunkUpgrade(::LevelChunk& levelChunk, ::ChunkViewSource& neighborhood);
95
96 virtual void loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad);
97
98 virtual void postProcessMobsAt(::BlockSource& region, int chunkWestBlock, int chunkNorthBlock, ::Random& random);
99
100 virtual void postProcessMobsAt(::BlockSource& region, ::BoundingBox const& chunkBB) const;
101
102 virtual void deleteAllChunkData(
103 ::std::unordered_set<::ChunkPos> chunksToDelete,
104 ::std::function<void()> completionCallback,
105 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
106 );
107
108 virtual void deleteStoredChunkData(
109 ::std::unordered_set<::ChunkPos> chunksToDelete,
110 ::std::function<void()> completionCallback,
111 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
112 );
113
114 virtual bool saveLiveChunk(::LevelChunk& lc);
115
116 virtual void writeEntityChunkTransfer(::LevelChunk& levelChunk);
117
118 virtual void writeEntityChunkTransfersToUnloadedChunk(
119 ::ChunkKey const& chunkKey,
120 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
121 );
122
123 virtual void deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk);
124
125 virtual void hintDiscardBatchBegin();
126
127 virtual void hintDiscardBatchEnd();
128
129 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
130
131 virtual void compact();
132
133 virtual void flushPendingDiscardedChunkWrites();
134
135 virtual void flushThreadBatch();
136
137 virtual bool isWithinWorldLimit(::ChunkPos const& cp) const;
138
139 virtual ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>> const* getChunkMap();
140
141 virtual ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>> const& getStorage() const;
142
143 virtual void clearDeletedEntities();
144
145 virtual bool canCreateViews() const;
146
147 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider();
148
149 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary();
150
151 virtual void setLevelChunk(::std::shared_ptr<::LevelChunk> lc);
152
153 virtual bool canLaunchTasks() const;
154
155 virtual bool chunkPosNeedsBlending(::ChunkPos const& cp);
156
157 virtual void _clearBlendingCache();
158 // NOLINTEND
159
160public:
161 // member functions
162 // NOLINTBEGIN
163 MCAPI explicit ChunkSource(::std::unique_ptr<::ChunkSource> parent);
164
165 MCAPI ChunkSource(::Dimension* dimension, int side);
166
167 MCAPI bool _checkAndDispatchTaskForLevelChunk(
168 ::std::pair<::ChunkPos, ::ChunkState> const& chunkPosAndExpectedState,
169 bool areInTask
170 );
171
172 MCAPI void _checkForReplacementDataTask(::LevelChunk& lc, ::ChunkViewSource& chunks);
173
174 MCAPI void _checkForUnblockingChunks(::LevelChunk const& lc);
175
176 MCAPI void _checkLevelChunkForNextStage(
177 ::LevelChunk const& lc,
178 ::LevelChunkGridAreaElement<::std::weak_ptr<::LevelChunk>>& grid,
179 ::ChunkState stateToCheck
180 );
181
182 MCAPI void _checkLevelChunkForPostProcessing(
183 ::LevelChunk const& lc,
184 ::LevelChunkGridAreaElement<::std::weak_ptr<::LevelChunk>>& grid
185 );
186
187 MCAPI bool _chunkAtStage(::std::weak_ptr<::LevelChunk> lcwp, ::ChunkState stateToCheck);
188
189 MCAPI void _createOrReplaceGridAreaMap(::std::shared_ptr<::LevelChunk> lc, bool createNeighbourGridsIfMissing);
190
191 MCAPI void _decorationPostProcessingTask(::LevelChunk& lc, ::ChunkViewSource& chunks);
192
193 MCAPI void _dispatchTaskForLevelChunk(
194 ::std::shared_ptr<::LevelChunk> const& lc,
195 ::std::shared_ptr<::ChunkViewSource> const& chunks,
196 bool areInTask
197 );
198
199 MCAPI void _freeChunkGenerationGridMap(::ChunkPos const& cp, bool isLevelChunkDeletion);
200
201 MCAPI void _handleTaskFailure(::LevelChunk& levelChunk, ::ChunkState currentState, ::ChunkState previousState);
202
203 MCAPI void _launchChunkTask(
204 ::std::string_view areInTask,
205 ::ChunkPos const& taskFunc,
206 bool,
208 );
209
210 MCAPI void _launchDecorationPostProcessingTask(
211 ::std::shared_ptr<::LevelChunk> const& lc,
212 ::std::shared_ptr<::ChunkViewSource> const& chunks,
213 bool areInTask
214 );
215
216 MCAPI void _launchGenerationTask(::std::shared_ptr<::LevelChunk> const& lc, bool areInTask);
217
218 MCAPI void _launchLightingTask(
219 ::std::shared_ptr<::LevelChunk> const& lc,
220 ::std::shared_ptr<::ChunkViewSource> const& chunks,
221 bool areInTask
222 );
223
224 MCAPI void _launchNeighborAwareUpgradeTask(
225 ::std::shared_ptr<::LevelChunk> const& lc,
226 ::std::shared_ptr<::ChunkViewSource> const& chunks,
227 bool areInTask
228 );
229
230 MCAPI void _launchReplacementDataTask(
231 ::std::shared_ptr<::LevelChunk> const& lc,
232 ::std::shared_ptr<::ChunkViewSource> const& chunks,
233 bool areInTask
234 );
235
236 MCAPI void _launchStructurePostProcessingTask(
237 ::std::shared_ptr<::LevelChunk> const& lc,
238 ::std::shared_ptr<::ChunkViewSource> const& chunks,
239 bool areInTask
240 );
241
242 MCAPI void _lightingTask(::std::shared_ptr<::LevelChunk> const& lc, ::ChunkViewSource& chunks);
243
244 MCAPI void _loadChunkTask(::LevelChunk& lc);
245
246 MCAPI void _neighborAwareUpgradeTask(::LevelChunk& lc, ::ChunkViewSource& chunks);
247
248 MCAPI void _saveDirtyChunks(::LevelStorage&);
249
250 MCAPI void _spawnChunkGenerationTasks(int numTasks, bool calledFromTask);
251
252 MCAPI void _structurePostProcessingTask(::LevelChunk& lc, ::ChunkViewSource& chunks);
253
254#ifdef LL_PLAT_C
255 MCAPI void addEmptyChunkPosForProcessingNeighbours(::std::shared_ptr<::LevelChunk> lc);
256#endif
257
258 MCAPI void checkAndLaunchChunkGenerationTasks(bool calledFromTask);
259
260 MCAPI ::GridArea<::std::shared_ptr<::LevelChunk>> createEmptyView(
261 ::ChunkSource::LoadMode lm,
262 bool circle,
263 ::std::function<void(::gsl::span<::std::shared_ptr<::LevelChunk>>)> add,
264 ::ChunkSourceViewGenerateMode chunkViewGenerateMode,
265 float const* serverBuildRatio
266 );
267
268 MCAPI ::std::shared_ptr<::LevelChunk> getAvailableChunk(::ChunkPos const& cp);
269
270 MCAPI ::std::shared_ptr<::LevelChunk> getAvailableChunkAt(::BlockPos const& pos);
271
272 MCFOLD int getChunkSide() const;
273
274 MCFOLD ::Dimension& getDimension() const;
275
276 MCAPI ::std::shared_ptr<::LevelChunk> getGeneratedChunk(::ChunkPos const& cp);
277
278 MCFOLD ::Level& getLevel() const;
279
280 MCAPI void
281 initializeWithLevelStorageManagerConnector(::ILevelStorageManagerConnector& levelStorageManagerConnector);
282
283 MCAPI void setShuttingDown(bool value);
284
285 MCAPI bool shouldServerGeneratePos(::ChunkPos const& chunkPos, float serverBuildRatio, int viewRadius);
286 // NOLINTEND
287
288public:
289 // static variables
290 // NOLINTBEGIN
291 MCAPI static bool& gPerfIsClientSide();
292 // NOLINTEND
293
294public:
295 // constructor thunks
296 // NOLINTBEGIN
297 MCAPI void* $ctor(::std::unique_ptr<::ChunkSource> parent);
298
299 MCAPI void* $ctor(::Dimension* dimension, int side);
300 // NOLINTEND
301
302public:
303 // destructor thunk
304 // NOLINTBEGIN
305 MCAPI void $dtor();
306 // NOLINTEND
307
308public:
309 // virtual function thunks
310 // NOLINTBEGIN
311 MCAPI void $shutdown();
312
313 MCAPI bool $isShutdownDone();
314
315 MCFOLD ::std::shared_ptr<::LevelChunk> $getExistingChunk(::ChunkPos const& pos);
316
317 MCFOLD ::std::shared_ptr<::LevelChunk> $getRandomChunk(::Random& random);
318
319 MCAPI bool $isChunkKnown(::ChunkPos const& chunkPos);
320
321 MCAPI bool $isChunkSaved(::ChunkPos const& chunkPos);
322
323 MCAPI ::std::shared_ptr<::LevelChunk>
324 $createNewChunk(::ChunkPos const& cp, ::ChunkSource::LoadMode lm, bool readOnly);
325
326 MCAPI ::std::shared_ptr<::LevelChunk>
327 $getOrLoadChunk(::ChunkPos const& cp, ::ChunkSource::LoadMode lm, bool readOnly);
328
329 MCFOLD bool $structurePostProcessChunk(::ChunkViewSource& neighborhood);
330
331 MCFOLD bool $decorationPostProcessChunk(::ChunkViewSource& neighborhood);
332
333 MCFOLD void $checkAndReplaceChunk(::ChunkViewSource& neighborhood, ::LevelChunk& lc);
334
335 MCFOLD bool $verifyChunkNeedsNeighborAwareUpgrade(::LevelChunk& lc);
336
337 MCFOLD void $neighborAwareChunkUpgrade(::LevelChunk& levelChunk, ::ChunkViewSource& neighborhood);
338
339 MCAPI void $loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad);
340
341 MCAPI void $postProcessMobsAt(::BlockSource& region, int chunkWestBlock, int chunkNorthBlock, ::Random& random);
342
343 MCAPI void $postProcessMobsAt(::BlockSource& region, ::BoundingBox const& chunkBB) const;
344
345 MCAPI void $deleteAllChunkData(
346 ::std::unordered_set<::ChunkPos> chunksToDelete,
347 ::std::function<void()> completionCallback,
348 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
349 );
350
351 MCAPI void $deleteStoredChunkData(
352 ::std::unordered_set<::ChunkPos> chunksToDelete,
353 ::std::function<void()> completionCallback,
354 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
355 );
356
357 MCAPI bool $saveLiveChunk(::LevelChunk& lc);
358
359 MCAPI void $writeEntityChunkTransfer(::LevelChunk& levelChunk);
360
361 MCAPI void $writeEntityChunkTransfersToUnloadedChunk(
362 ::ChunkKey const& chunkKey,
363 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
364 );
365
366 MCAPI void $deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk);
367
368 MCAPI void $hintDiscardBatchBegin();
369
370 MCAPI void $hintDiscardBatchEnd();
371
372 MCAPI void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
373
374 MCAPI void $compact();
375
376 MCAPI void $flushPendingDiscardedChunkWrites();
377
378 MCAPI void $flushThreadBatch();
379
380 MCFOLD bool $isWithinWorldLimit(::ChunkPos const& cp) const;
381
382 MCFOLD ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>> const* $getChunkMap();
383
384 MCAPI ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>> const& $getStorage() const;
385
386 MCFOLD void $clearDeletedEntities();
387
388 MCFOLD bool $canCreateViews() const;
389
390 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
391
392 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
393
394 MCFOLD void $setLevelChunk(::std::shared_ptr<::LevelChunk> lc);
395
396 MCAPI bool $canLaunchTasks() const;
397
398 MCAPI bool $chunkPosNeedsBlending(::ChunkPos const& cp);
399
400 MCAPI void $_clearBlendingCache();
401
402
403 // NOLINTEND
404
405public:
406 // vftables
407 // NOLINTBEGIN
408 MCAPI static void** $vftable();
409 // NOLINTEND
410};
Definition EnableNonOwnerReferences.h:7
static MCAPI void ** $vftable()
Definition BlendingDataProvider.h:5
Definition BlockPos.h:21
Definition BlockSource.h:72
Definition BoundingBox.h:13
Definition ChunkKey.h:13
Definition ChunkPos.h:11
Definition ChunkViewSource.h:22
Definition Dimension.h:88
Definition ILevelStorageManagerConnector.h:13
Definition LevelChunkBuilderData.h:16
Definition LevelChunkGridAreaElement.h:6
Definition LevelChunkMetaDataDictionary.h:11
Definition LevelChunk.h:87
Definition LevelStorage.h:26
Definition Level.h:254
Definition Random.h:10
Definition TaskResult.h:5
Definition move_only_function.h:9
Definition ActorUnloadedChunkTransferEntry.h:13
Definition ChunkDeletionMetadata.h:5
Definition LevelChunkFinalDeleter.h:10