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 _computeEmitterWorldPositionAndVelocity(::Matrix const& actorTransform, ::std::chrono::nanoseconds& dt);
314
315 MCAPI void _createBoundEmitterFromEvent(::ParticleSystem::ParticleVisualEffectEvent const& event);
316
317 MCAPI void _createManualParticleFromEvent(
318 ::ParticleSystem::ParticleVisualEffectEvent const& event,
319 ::Vec3 const& velocity,
320 ::Vec3 const& position
321 );
322
323 MCAPI void _emitNewParticle(
324 ::ParticleSystem::ParticleEffect const& effect,
325 ::Vec3 const& particleOriginOffset,
326 ::Vec3 const& velocityAdd,
327 float scale,
328 float a
329 );
330
331 MCAPI void _executeEventNode(
332 ::ParticleSystem::ParticleEventNode const& eventNode,
333 ::HashedString const& eventName,
334 ::Matrix const& transform,
335 ::Vec3 const& velocity
336 );
337
338 MCAPI void _executeSpecificEvent(
339 ::ParticleSystem::ParticleEvent const& event,
340 ::HashedString const& eventName,
341 ::Matrix const& transform,
342 ::Vec3 const& velocity
343 );
344
345 MCAPI void _extractParticleRenderingData(::ParticleRenderData& particleRenderData, float a);
346
347 MCAPI ::mce::Color _getLightColorForParticle(
348 ::ParticleSystem::CommonParticle const& particle,
349 ::std::shared_ptr<::LightPropagation::LightVolumeManager const> lightVolumeManager
350 ) const;
351
352 MCAPI ::std::shared_ptr<::ParticleSystem::ParticleEffect> _lockEffect();
353
354 MCAPI bool _prepareEmitterRenderParams();
355
356 MCAPI void _prepareParticleForRendering(
357 ::ParticleSystem::ParticleEffect const& effect,
358 ::ParticleSystem::CommonParticle& particle
359 );
360
361 MCAPI void _prepareParticlesForRendering(bool particlesRenderFrame);
362
363 MCAPI bool _replaceParticleEffectPointer();
364
365 MCAPI void _resetParticleEffectProperties(bool firstTime);
366
367 MCAPI void _setGracefullyExpire();
368
369 MCAPI void _updateRenderParamsForParticle(
370 ::ParticleSystem::ParticleEffect const& effect,
371 ::ParticleSystem::CommonParticle const& particle
372 );
373 // NOLINTEND
374
375public:
376 // static variables
377 // NOLINTBEGIN
378 MCAPI static ::mce::Color& mParticleInitialColor();
379 // NOLINTEND
380
381public:
382 // constructor thunks
383 // NOLINTBEGIN
384 MCAPI void* $ctor(
385 ::ParticleSystemEngine& particleSystemEngine,
386 ::HashedString const& effectName,
387 ::std::array<::std::array<::mce::Color, 16>, 16> const& lightTextureData,
388 ::BlockSource& region,
389 ::std::weak_ptr<::LightPropagation::LightVolumeManager> lightVolumeManager,
390 ::Matrix const& transform,
391 ::MolangVariableMap molangVariableMap,
392 int framesToInterpolate
393 );
394 // NOLINTEND
395
396public:
397 // destructor thunk
398 // NOLINTBEGIN
399 MCAPI void $dtor();
400 // NOLINTEND
401
402public:
403 // virtual function thunks
404 // NOLINTBEGIN
405 MCAPI void $setActorBindInfo(
406 ::Dimension* dimension,
407 ::ActorUniqueID actorId,
408 ::HashedString const& locator,
409 ::Vec3 const& offset
410 );
411
412 MCAPI void $setActorBindInfo(::WeakEntityRef actorRef, ::HashedString const& locator, ::Vec3 const& offset);
413
414 MCAPI void $setActorBindInfo(::Actor* actor, ::HashedString const& locator, ::Vec3 const& offset);
415
416 MCAPI void $setEnableUpdate(bool enable);
417
418 MCAPI void $setEnableRender(bool enable);
419
420 MCAPI void $runInitializationScript(::ExpressionNode const& initializationScript);
421
422 MCAPI void $onBlockChanged(::BlockPos const& blockPosition);
423
424 MCAPI void $expire();
425
426 MCAPI bool $isValid() const;
427
428 MCAPI bool $isManualEmitter() const;
429
430 MCAPI bool $expirationRequested() const;
431
432 MCAPI bool $hasExpired() const;
433
434 MCFOLD ::AABB const& $getAABB() const;
435
436 MCFOLD ::HashedString const& $getEffectName() const;
437
438 MCFOLD uint64 $getParticleCount() const;
439
440 MCAPI uint64 $getEffectEmitterCount() const;
441
442 MCAPI uint64 $getEffectParticleCount() const;
443
444 MCAPI uint64 $getTotalEmitterCount() const;
445
446 MCAPI uint64 $getTotalParticleCount() const;
447
448 MCAPI bool $getAreParticlesFromActorButWorldRelative() const;
449
450 MCAPI void $tick(::std::chrono::nanoseconds const& dtIn, float const a);
451
452 MCAPI void $frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext);
453
454 MCAPI void $extractForRendering(::ParticleRenderData& particleRenderData, float a);
455
456 MCAPI void $setManualParticleEmission(bool manualParticleEmission);
457
458 MCAPI void $emitParticleManually(::Vec3 const& particlePosition, ::Vec3 const& velocityAdd, float const scaleMult);
459
460 MCAPI ::ParticleSystem::ActorBindInfo $getActorBindInfo() const;
461
462 MCFOLD ::Vec3 const& $getPosition() const;
463
464 MCAPI ::Matrix const& $getTransform() const;
465
466 MCFOLD ::Vec3 const& $getWorldPosition() const;
467
468 MCFOLD ::Vec3 const& $getWorldVelocity() const;
469
470 MCAPI void $setMaxNumParticles(uint64 num);
471
472 MCFOLD uint64 $getMaxNumParticles() const;
473
474 MCFOLD uint64 $getNumParticles() const;
475
476 MCFOLD uint64 $getNumParticlesEmitted() const;
477
478 MCAPI void $setActorFrameOfReference(bool useActorPosition, bool useActorRotation, bool useEmitterVelocity);
479
480 MCAPI void $setEmissionDuration(float activeTime);
481
482 MCAPI void $setSleepDuration(float sleepTime);
483
484 MCAPI void $setFacing(::HashedString const& facing);
485
486 MCAPI bool $blockListInitialized();
487
488 MCAPI void $initializeBlockList(::buffer_span<::std::string> blockList);
489
490 MCAPI bool $blockAtPositionIsInList(::BlockPos const& blockPos);
491
492 MCAPI ::BrightnessPair $getBrightnessPairAtBlock(::BlockPos const& blockPosition) const;
493
494 MCAPI ::std::pair<::BrightnessPair, ::BlockPos>
495 $getBrightestNeighbor(::BlockPos const& blockPosition, ::ParticleSystem::CommonParticle const& particle) const;
496
497 MCAPI bool $getVisibilityAtBlock(::BlockPos const& blockPosition) const;
498
499 MCAPI ::mce::Color $getGameplayLightForParticle(::ParticleSystem::CommonParticle const& particle) const;
500
501 MCAPI ::BrightnessPair $getBrightnessPairForParticle(::ParticleSystem::CommonParticle const& particle) const;
502
503 MCAPI ::std::vector<::AABB> const& $getCollisionShapesForBlockPosition(::BlockPos const& blockPosition);
504
505 MCFOLD ::std::vector<::AABB>& $getCollisionAabbList();
506
507 MCAPI ::std::vector<::ParticleSystem::ComponentAccessParticleEmitter::CollisionHelper>& $getCollisionSweepList();
508
509 MCAPI void $fireEvent(::HashedString const& eventName, ::Vec3 const& position, ::Vec3 const& velocity);
510
511 MCAPI void $fireEvent(::HashedString const& eventName, ::Matrix const& transform, ::Vec3 const& velocity);
512
513 MCAPI bool $getUseActorPosition() const;
514
515 MCAPI bool $getUseActorRotation() const;
516
517 MCAPI void $getParticleWorldPositionAndVelocity(
518 ::ParticleSystem::CommonParticle& particle,
519 ::Vec3& particleWorldPosition,
520 ::Vec3& particleWorldVelocity
521 );
522 // NOLINTEND
523
524public:
525 // vftables
526 // NOLINTBEGIN
527 MCNAPI static void** $vftable();
528 // NOLINTEND
529};
530
531} // namespace ParticleSystem
Definition Actor.h:125
Definition BlockSource.h:73
Definition ClientFrameUpdateContext.h:5
Definition Dimension.h:89
Definition ExpressionNode.h:36
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:10
Definition BrightnessPair.h:8
Definition CommonParticle.h:7
Definition ComponentAccessParticleEmitter.h:15
Definition ParticleEmitterActual.h:15