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