LeviLamina
Loading...
Searching...
No Matches
ParticleEmitterActual.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/client/particlesystem/particle/ComponentAccessParticleEmitter.h"
7#include "mc/client/particlesystem/particle/EntityBindInfo.h"
8#include "mc/client/particlesystem/particle/ParticleEmitter.h"
9#include "mc/client/particlesystem/particle/ParticleRenderData.h"
10#include "mc/deps/core/container/slot_map_handle.h"
11#include "mc/deps/core/math/Matrix.h"
12#include "mc/deps/core/math/Vec3.h"
13#include "mc/deps/core/string/HashedString.h"
14#include "mc/deps/core/utility/buffer_span.h"
15#include "mc/deps/minecraft_renderer/renderer/MaterialPtr.h"
16#include "mc/deps/minecraft_renderer/resources/MERSUniformData.h"
17#include "mc/deps/minecraft_renderer/resources/PBRTexturePtrs.h"
18#include "mc/util/MolangVariableIndex.h"
19#include "mc/util/MolangVariableMap.h"
20#include "mc/world/actor/RenderParams.h"
21#include "mc/world/level/BlockPos.h"
22#include "mc/world/level/block/BlockType.h"
23#include "mc/world/phys/AABB.h"
24
25// auto generated forward declare list
26// clang-format off
27class Actor;
28class BlockSource;
30class Dimension;
31class ExpressionNode;
34class WeakEntityRef;
35struct ActorUniqueID;
36struct BrightnessPair;
37namespace LightPropagation { class LightVolumeManager; }
38namespace ParticleSystem { class ParticleEffect; }
39namespace ParticleSystem { class ParticleEventNode; }
40namespace ParticleSystem { struct CommonParticle; }
41namespace mce { class Color; }
42// clang-format on
43
44namespace ParticleSystem {
45
46class ParticleEmitterActual : public ::ParticleSystem::ComponentAccessParticleEmitter {
47public:
48 // ParticleEmitterActual inner types declare
49 // clang-format off
50 struct AABBCacheElement;
51 // clang-format on
52
53 // ParticleEmitterActual inner types define
54 struct AABBCacheElement {
55 public:
56 // member variables
57 // NOLINTBEGIN
58 ::ll::TypedStorage<8, 24, ::std::vector<::AABB>> mAABBList;
59 ::ll::TypedStorage<4, 4, uint> mLastAccessedFrame;
60 // NOLINTEND
61 };
62
63public:
64 // member variables
65 // NOLINTBEGIN
66 ::ll::TypedStorage<8, 48, ::HashedString> mEffectName;
67 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::ParticleSystem::ParticleEffect>> mEffectDataWeakPtr;
68 ::ll::TypedStorage<8, 24, ::std::vector<::ParticleSystem::CommonParticle>> mParticles;
69 ::ll::TypedStorage<8, 8, ::std::chrono::nanoseconds> mEmitterCurrentLoopAge;
70 ::ll::TypedStorage<8, 8, ::std::chrono::nanoseconds> mSleepDuration;
71 ::ll::TypedStorage<8, 8, ::std::chrono::nanoseconds> mEmissionDuration;
72 ::ll::TypedStorage<8, 8, ::std::chrono::nanoseconds> mTickDeltaTimeAccumulator;
73 ::ll::TypedStorage<4, 4, float> mEmitterCurrentTravelDistance;
74 ::ll::TypedStorage<4, 12, ::Vec3> mEmitterPosition;
75 ::ll::TypedStorage<4, 12, ::Vec3> mEmitterWorldPosition;
76 ::ll::TypedStorage<4, 12, ::Vec3> mEmitterLastWorldPosition;
77 ::ll::TypedStorage<4, 12, ::Vec3> mEmitterWorldVelocity;
78 uint mEnableRender : 1;
79 uint mEnableUpdate : 1;
80 uint mManualParticleEmission : 1;
81 uint mIsValid : 1;
82 uint mEmitterExpired : 1;
83 uint mFirstUpdate : 1;
84 uint mUseActorPosition : 1;
85 uint mUseActorRotation : 1;
86 uint mUseEmitterVelocity : 1;
87 uint mBlockListInitialized : 1;
88 uint mAreParticlesFromActorButWorldRelative : 1;
89 ::ll::TypedStorage<4, 4, int> mEmitterDynamicsFrameCounter;
90 ::ll::TypedStorage<4, 4, int> mParticlesDynamicsFrameCounter;
91 ::ll::TypedStorage<4, 4, int> mEmitterRenderingFrameCounter;
92 ::ll::TypedStorage<4, 4, int> mParticlesRenderingFrameCounter;
93 ::ll::TypedStorage<4, 4, int> mNumberOfFramesToInterpolate;
94 ::ll::TypedStorage<8, 520, ::RenderParams> mRenderParams;
95 ::ll::TypedStorage<8, 56, ::MolangVariableMap> mMolangVariableMap;
96 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mEmitterLifetimeVariableIndex;
97 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mEmitterAgeVariableIndex;
98 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mEmitterEntityScaleVariableIndex;
99 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mParticleLifetimeMolangVariableIndex;
100 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mParticleAgeMolangVariableIndex;
101 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mParticleRandom1VariableIndex;
102 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mParticleRandom2VariableIndex;
103 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mParticleRandom3VariableIndex;
104 ::ll::TypedStorage<2, 2, ::MolangVariableIndex> mParticleRandom4VariableIndex;
105 ::ll::TypedStorage<4, 64, ::Matrix> mEmitterTransform;
106 ::ll::TypedStorage<8, 88, ::ParticleSystem::EntityBindInfo> mEntityBindInfo;
107 ::ll::TypedStorage<4, 24, ::AABB> mAABB;
108 ::ll::TypedStorage<4, 4, float> mCullingBufferDistance;
109 ::ll::TypedStorage<8, 8, uint64> mMaxNumParticles;
110 ::ll::TypedStorage<8, 8, uint64> mNumParticlesEmitted;
111 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> mMaterial;
112 ::ll::TypedStorage<8, 112, ::PBRTexturePtrs> mTexture;
113 ::ll::TypedStorage<4, 20, ::std::optional<::MERSUniformData>> mMERSUniforms;
114 ::ll::TypedStorage<8, 8, ::std::array<::std::array<::mce::Color, 16>, 16> const&> mLightTextureData;
115 ::ll::TypedStorage<4, 4, ::ParticleRenderData::FaceCameraMode> mFaceCameraMode;
116 ::ll::TypedStorage<8, 8, ::BlockSource&> mBlockSource;
117 ::ll::TypedStorage<8, 64, ::std::unordered_set<::BlockType const*>> mBlocksToCheckAgainst;
118 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::LightPropagation::LightVolumeManager>> mLightVolumeManager;
119 ::ll::
120 TypedStorage<8, 64, ::std::unordered_map<::BlockPos, ::ParticleSystem::ParticleEmitterActual::AABBCacheElement>>
121 mAABBCache;
122 ::ll::TypedStorage<4, 4, uint> mCurrentCacheFrame;
123 ::ll::TypedStorage<8, 24, ::std::vector<::AABB>> mCollisionAabbList;
124 ::ll::TypedStorage<8, 24, ::std::vector<::ParticleSystem::ComponentAccessParticleEmitter::CollisionHelper>>
125 mCollisionSweepList;
126 ::ll::TypedStorage<8, 8, ::ParticleSystemEngine&> mParticleSystemEngine;
127 ::ll::TypedStorage<
128 8,
129 64,
130 ::std::unordered_map<
131 ::HashedString,
132 ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32>>>
133 mSpawnedParticleEmitterList;
134 // NOLINTEND
135
136public:
137 // prevent constructor by default
138 ParticleEmitterActual& operator=(ParticleEmitterActual const&);
139 ParticleEmitterActual(ParticleEmitterActual const&);
140 ParticleEmitterActual();
141
142public:
143 // virtual functions
144 // NOLINTBEGIN
145 virtual ~ParticleEmitterActual() /*override*/ = default;
146
147 virtual void setEntityBindInfo(
148 ::Dimension* dimension,
149 ::ActorUniqueID actorId,
150 ::HashedString const& locator,
151 ::Vec3 const& offset
152 ) /*override*/;
153
154 virtual void
155 setEntityBindInfo(::WeakEntityRef entityRef, ::HashedString const& locator, ::Vec3 const& offset) /*override*/;
156
157 virtual void setEntityBindInfo(::Actor* actor, ::HashedString const& locator, ::Vec3 const& offset) /*override*/;
158
159 virtual void setEnableUpdate(bool enable) /*override*/;
160
161 virtual void setEnableRender(bool enable) /*override*/;
162
163 virtual void runInitializationScript(::ExpressionNode const& initializationScript) /*override*/;
164
165 virtual void onBlockChanged(::BlockPos const& blockPosition) /*override*/;
166
167 virtual void expire() /*override*/;
168
169 virtual bool isValid() const /*override*/;
170
171 virtual bool isManualEmitter() const /*override*/;
172
173 virtual bool expirationRequested() const /*override*/;
174
175 virtual bool hasExpired() const /*override*/;
176
177 virtual ::AABB const& getAABB() const /*override*/;
178
179 virtual ::HashedString const& getEffectName() const /*override*/;
180
181 virtual uint64 getParticleCount() const /*override*/;
182
183 virtual uint64 getEffectEmitterCount() const /*override*/;
184
185 virtual uint64 getEffectParticleCount() const /*override*/;
186
187 virtual uint64 getTotalEmitterCount() const /*override*/;
188
189 virtual uint64 getTotalParticleCount() const /*override*/;
190
191 virtual ::Vec3 const& getLastCameraPosition() const /*override*/;
192
193 virtual bool getAreParticlesFromActorButWorldRelative() const /*override*/;
194
195 virtual void tick(::std::chrono::nanoseconds const& dtIn, float const a) /*override*/;
196
197 virtual void frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext) /*override*/;
198
199 virtual void extractForRendering(::ParticleRenderData& particleRenderData, float a) /*override*/;
200
201 virtual void setManualParticleEmission(bool manualParticleEmission) /*override*/;
202
203 virtual void
204 emitParticleManually(::Vec3 const& particlePosition, ::Vec3 const& velocityAdd, float const scaleMult) /*override*/;
205
206 virtual ::ParticleSystem::EntityBindInfo getEntityBindInfo() const /*override*/;
207
208 virtual ::Vec3 const& getPosition() const /*override*/;
209
210 virtual ::Matrix const& getTransform() const /*override*/;
211
212 virtual ::Vec3 const& getWorldPosition() const /*override*/;
213
214 virtual ::Vec3 const& getWorldVelocity() const /*override*/;
215
216 virtual void setMaxNumParticles(uint64 num) /*override*/;
217
218 virtual uint64 getMaxNumParticles() const /*override*/;
219
220 virtual uint64 getNumParticles() const /*override*/;
221
222 virtual uint64 getNumParticlesEmitted() const /*override*/;
223
224 virtual void
225 setActorFrameOfReference(bool useActorPosition, bool useActorRotation, bool useEmitterVelocity) /*override*/;
226
227 virtual void setEmissionDuration(float activeTime) /*override*/;
228
229 virtual void setSleepDuration(float sleepTime) /*override*/;
230
231 virtual void setFacing(::HashedString const& facing) /*override*/;
232
233 virtual bool blockListInitialized() /*override*/;
234
235 virtual void initializeBlockList(::buffer_span<::std::string> blockList) /*override*/;
236
237 virtual bool blockAtPositionIsInList(::BlockPos const& blockPos) /*override*/;
238
239 virtual ::BrightnessPair getBrightnessPairAtBlock(::BlockPos const& blockPosition) const /*override*/;
240
241 virtual ::std::pair<::BrightnessPair, ::BlockPos>
242 getBrightestNeighbor(::BlockPos const& blockPosition, ::ParticleSystem::CommonParticle const& particle) const
243 /*override*/;
244
245 virtual bool getVisibilityAtBlock(::BlockPos const& blockPosition) const /*override*/;
246
247 virtual ::mce::Color getGameplayLightForParticle(::ParticleSystem::CommonParticle const& particle) const
248 /*override*/;
249
250 virtual ::BrightnessPair getBrightnessPairForParticle(::ParticleSystem::CommonParticle const& particle) const
251 /*override*/;
252
253 virtual ::std::vector<::AABB> const&
254 getCollisionShapesForBlockPosition(::BlockPos const& blockPosition) /*override*/;
255
256 virtual ::std::vector<::AABB>& getCollisionAabbList() /*override*/;
257
258 virtual ::std::vector<::ParticleSystem::ComponentAccessParticleEmitter::CollisionHelper>&
259 getCollisionSweepList() /*override*/;
260
261 virtual void
262 fireEvent(::HashedString const& eventName, ::Vec3 const& position, ::Vec3 const& velocity) /*override*/;
263
264 virtual void
265 fireEvent(::HashedString const& eventName, ::Matrix const& transform, ::Vec3 const& velocity) /*override*/;
266
267 virtual bool getUseActorPosition() const /*override*/;
268
269 virtual bool getUseActorRotation() const /*override*/;
270
271 virtual void getParticleWorldPositionAndVelocity(
272 ::ParticleSystem::CommonParticle& particle,
273 ::Vec3& particleWorldPosition,
274 ::Vec3& particleWorldVelocity
275 ) /*override*/;
276
277 virtual ::AABB getEntityAABB() const /*override*/;
278 // NOLINTEND
279
280public:
281 // member functions
282 // NOLINTBEGIN
283 MCAPI bool _computeEntityTransformAndReturnIfAttachedToLocator(
284 float a,
285 ::Matrix& actorTransform,
286 bool useActorPosition,
287 bool useActorRotation
288 ) const;
289
290 MCAPI void _emitNewParticle(
291 ::ParticleSystem::ParticleEffect const& effect,
292 ::Vec3 const& particleOriginOffset,
293 ::Vec3 const& velocityAdd,
294 float const scale,
295 float const a
296 );
297
298 MCAPI void _executeEventNode(
299 ::ParticleSystem::ParticleEventNode const& eventNode,
300 ::HashedString const& eventName,
301 ::Matrix const& transform,
302 ::Vec3 const& velocity
303 );
304
305 MCAPI ::mce::Color _getLightColorForParticle(
306 ::ParticleSystem::CommonParticle const& particle,
307 ::std::shared_ptr<::LightPropagation::LightVolumeManager const> lightVolumeManager
308 ) const;
309
310 MCAPI ::std::shared_ptr<::ParticleSystem::ParticleEffect> _lockEffect();
311
312 MCAPI bool _prepareEmitterRenderParams();
313
314 MCAPI void _prepareParticleForRendering(
315 ::ParticleSystem::ParticleEffect const& effect,
316 ::ParticleSystem::CommonParticle& particle
317 );
318
319 MCAPI void _prepareParticlesForRendering(bool particlesRenderFrame);
320
321 MCAPI void _resetParticleEffectProperties(bool firstTime);
322
323 MCAPI void _setGracefullyExpire();
324
325 MCAPI void _updateRenderParamsForParticle(
326 ::ParticleSystem::ParticleEffect const& effect,
327 ::ParticleSystem::CommonParticle const& particle
328 );
329 // NOLINTEND
330
331public:
332 // static variables
333 // NOLINTBEGIN
334 MCAPI static ::mce::Color& mParticleInitialColor();
335 // NOLINTEND
336
337public:
338 // virtual function thunks
339 // NOLINTBEGIN
340 MCAPI void $setEntityBindInfo(
341 ::Dimension* dimension,
342 ::ActorUniqueID actorId,
343 ::HashedString const& locator,
344 ::Vec3 const& offset
345 );
346
347 MCAPI void $setEntityBindInfo(::WeakEntityRef entityRef, ::HashedString const& locator, ::Vec3 const& offset);
348
349 MCAPI void $setEntityBindInfo(::Actor* actor, ::HashedString const& locator, ::Vec3 const& offset);
350
351 MCAPI void $setEnableUpdate(bool enable);
352
353 MCAPI void $setEnableRender(bool enable);
354
355 MCAPI void $runInitializationScript(::ExpressionNode const& initializationScript);
356
357 MCAPI void $onBlockChanged(::BlockPos const& blockPosition);
358
359 MCAPI void $expire();
360
361 MCAPI bool $isValid() const;
362
363 MCAPI bool $isManualEmitter() const;
364
365 MCAPI bool $expirationRequested() const;
366
367 MCAPI bool $hasExpired() const;
368
369 MCAPI ::AABB const& $getAABB() const;
370
371 MCFOLD ::HashedString const& $getEffectName() const;
372
373 MCAPI uint64 $getParticleCount() const;
374
375 MCAPI uint64 $getEffectEmitterCount() const;
376
377 MCAPI uint64 $getEffectParticleCount() const;
378
379 MCAPI uint64 $getTotalEmitterCount() const;
380
381 MCAPI uint64 $getTotalParticleCount() const;
382
383 MCAPI ::Vec3 const& $getLastCameraPosition() const;
384
385 MCAPI bool $getAreParticlesFromActorButWorldRelative() const;
386
387 MCAPI void $tick(::std::chrono::nanoseconds const& dtIn, float const a);
388
389 MCAPI void $frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext);
390
391 MCAPI void $extractForRendering(::ParticleRenderData& particleRenderData, float a);
392
393 MCAPI void $setManualParticleEmission(bool manualParticleEmission);
394
395 MCAPI void $emitParticleManually(::Vec3 const& particlePosition, ::Vec3 const& velocityAdd, float const scaleMult);
396
397 MCAPI ::ParticleSystem::EntityBindInfo $getEntityBindInfo() const;
398
399 MCAPI ::Vec3 const& $getPosition() const;
400
401 MCAPI ::Matrix const& $getTransform() const;
402
403 MCAPI ::Vec3 const& $getWorldPosition() const;
404
405 MCFOLD ::Vec3 const& $getWorldVelocity() const;
406
407 MCAPI void $setMaxNumParticles(uint64 num);
408
409 MCFOLD uint64 $getMaxNumParticles() const;
410
411 MCAPI uint64 $getNumParticles() const;
412
413 MCAPI uint64 $getNumParticlesEmitted() const;
414
415 MCAPI void $setActorFrameOfReference(bool useActorPosition, bool useActorRotation, bool useEmitterVelocity);
416
417 MCAPI void $setEmissionDuration(float activeTime);
418
419 MCAPI void $setSleepDuration(float sleepTime);
420
421 MCAPI void $setFacing(::HashedString const& facing);
422
423 MCAPI bool $blockListInitialized();
424
425 MCAPI void $initializeBlockList(::buffer_span<::std::string> blockList);
426
427 MCAPI bool $blockAtPositionIsInList(::BlockPos const& blockPos);
428
429 MCAPI ::BrightnessPair $getBrightnessPairAtBlock(::BlockPos const& blockPosition) const;
430
431 MCAPI ::std::pair<::BrightnessPair, ::BlockPos>
432 $getBrightestNeighbor(::BlockPos const& blockPosition, ::ParticleSystem::CommonParticle const& particle) const;
433
434 MCAPI bool $getVisibilityAtBlock(::BlockPos const& blockPosition) const;
435
436 MCAPI ::mce::Color $getGameplayLightForParticle(::ParticleSystem::CommonParticle const& particle) const;
437
438 MCAPI ::BrightnessPair $getBrightnessPairForParticle(::ParticleSystem::CommonParticle const& particle) const;
439
440 MCAPI ::std::vector<::AABB> const& $getCollisionShapesForBlockPosition(::BlockPos const& blockPosition);
441
442 MCAPI ::std::vector<::AABB>& $getCollisionAabbList();
443
444 MCAPI ::std::vector<::ParticleSystem::ComponentAccessParticleEmitter::CollisionHelper>& $getCollisionSweepList();
445
446 MCAPI void $fireEvent(::HashedString const& eventName, ::Vec3 const& position, ::Vec3 const& velocity);
447
448 MCAPI void $fireEvent(::HashedString const& eventName, ::Matrix const& transform, ::Vec3 const& velocity);
449
450 MCAPI bool $getUseActorPosition() const;
451
452 MCAPI bool $getUseActorRotation() const;
453
454 MCAPI void $getParticleWorldPositionAndVelocity(
455 ::ParticleSystem::CommonParticle& particle,
456 ::Vec3& particleWorldPosition,
457 ::Vec3& particleWorldVelocity
458 );
459
460 MCAPI ::AABB $getEntityAABB() const;
461 // NOLINTEND
462};
463
464} // namespace ParticleSystem
Definition Actor.h:113
Definition BlockSource.h:71
Definition ClientFrameUpdateContext.h:5
Definition Dimension.h:86
Definition ExpressionNode.h:35
Definition LightVolumeManager.h:7
Definition ParticleRenderData.h:5
Definition ParticleSystemEngine.h:5
Definition ParticleEffect.h:7
Definition ParticleEmitterActual.h:7
Definition ParticleEventNode.h:7
Definition WeakEntityRef.h:14
Definition Color.h:13
Definition ActorUniqueID.h:5
Definition BrightnessPair.h:8
Definition CommonParticle.h:7
Definition ComponentAccessParticleEmitter.h:15
Definition ParticleEmitterActual.h:15