3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/particlesystem/particle/ParticleRenderer.h"
7#include "mc/deps/core/container/dense_slot_map.h"
8#include "mc/deps/core/container/slot_map_handle.h"
9#include "mc/deps/core/math/Color.h"
10#include "mc/deps/core/math/Vec3.h"
11#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
34 using ParticleSlotMap = ::Bedrock::dense_slot_map<
35 ::std::unique_ptr<::ParticleSystem::ParticleEmitter>,
38 ::std::allocator<::std::unique_ptr<::ParticleSystem::ParticleEmitter>>>;
46 ::Bedrock::dense_slot_map<
47 ::std::unique_ptr<::ParticleSystem::ParticleEmitter>,
50 ::std::allocator<::std::unique_ptr<::ParticleSystem::ParticleEmitter>>>>
52 ::ll::TypedStorage<8, 24, ::std::vector<::gsl::not_null<::ParticleSystem::ParticleEmitter*>>> mEmitterTickQueue;
53 ::ll::TypedStorage<8, 64, ::ParticleRenderer> mParticleRenderer;
54 ::ll::TypedStorage<1, 1, bool> mLastTickTimeValid;
55 ::ll::TypedStorage<8, 8, ::std::chrono::steady_clock::time_point> mLastTickTime;
56 ::ll::TypedStorage<8, 8, ::ParticleEffectGroup&> mParticleEffectGroup;
57 ::ll::TypedStorage<8, 8, ::std::reference_wrapper<::BlockSource>> mBlockSource;
58 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::LightPropagation::LightVolumeManager>> mLightVolumeManager;
59 ::ll::TypedStorage<8, 8, ::LightTexture&> mLightTexture;
60 ::ll::TypedStorage<4, 4096, ::std::array<::std::array<::mce::Color, 16>, 16>> mLightTextureData;
61 ::ll::TypedStorage<4, 4, int> mFramesToInterpolate;
62 ::ll::TypedStorage<1, 1, bool> mBeingDestroyed;
63 ::ll::TypedStorage<8, 8, uint64> mTotalParticleCount;
64 ::ll::TypedStorage<8, 64, ::std::unordered_map<::HashedString, uint64>> mEffectEmitterCounts;
65 ::ll::TypedStorage<8, 64, ::std::unordered_map<::HashedString, uint64>> mEffectParticleCounts;
66 ::ll::TypedStorage<4, 12, ::Vec3> mLastCameraPosition;
71 ParticleSystemEngine& operator=(ParticleSystemEngine
const&);
72 ParticleSystemEngine(ParticleSystemEngine
const&);
73 ParticleSystemEngine();
78 virtual ~ParticleSystemEngine() ;
84 MCAPI ParticleSystemEngine(
85 ::ParticleEffectGroup& particleEffectGroup,
86 ::BlockSource& region,
87 ::std::weak_ptr<::LightPropagation::LightVolumeManager> lightVolumeManager,
88 ::LightTexture& lightTexture
93 MCAPI ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32>
94 createParticleEmitter(
95 ::std::shared_ptr<::ParticleEffectInfo>
const& effectInfo,
96 ::Matrix
const& transform,
97 ::MolangVariableMap molangVariableMap
100 MCAPI ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32>
101 createParticleEmitter(::HashedString
const& effectName, ::Vec3
const& pos, ::MolangVariableMap molangVariableMap);
103 MCAPI ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32>
104 createParticleEmitter(
105 ::HashedString
const& effectName,
106 ::Matrix
const& transform,
107 ::MolangVariableMap molangVariableMap
110 MCAPI ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32>
111 createParticleEmitter(
112 ::HashedString
const& effectName,
113 ::Actor
const& actor,
114 ::HashedString
const& locator,
115 ::Vec3
const& offset,
116 ::MolangVariableMap molangVariableMap
119 MCAPI
void emitParticleManually(
120 ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32> emitterHandle,
121 ::Vec3
const& particlePosition,
122 ::Vec3
const& velocityAdd,
126 MCAPI
void extractForRendering(::ParticleRenderData& particleRenderData,
float a);
128 MCAPI
void frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext);
130 MCAPI uint64 getEffectEmitterCount(::HashedString
const& effectName)
const;
132 MCAPI uint64 getEffectParticleCount(::HashedString
const& effectName)
const;
134 MCFOLD ::Bedrock::dense_slot_map<
135 ::std::unique_ptr<::ParticleSystem::ParticleEmitter>,
138 ::std::allocator<::std::unique_ptr<::ParticleSystem::ParticleEmitter>>>
const&
141 MCFOLD ::ParticleEffectGroup& getParticleEffectGroup()
const;
143 MCAPI ::ParticleSystem::ParticleEmitter* getParticleEmitter(
144 ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32> emitterHandle
147 MCAPI
void onBlockPositionChanged(::BlockPos
const& blockPosition);
149 MCAPI
void onDimensionChanged(::BlockSource& newSource);
152 ::ScreenContext& screenContext,
153 ::Vec3
const& cameraTargetPos,
154 ::Vec3
const& cameraPos,
155 ::ParticleRenderData
const& particleRenderData
158 MCAPI
void setEmitterIsManuallyEmitted(
159 ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32> emitterHandle
162 MCAPI
void tick(
float a,
bool paused);
169 ::ParticleEffectGroup& particleEffectGroup,
170 ::BlockSource& region,
171 ::std::weak_ptr<::LightPropagation::LightVolumeManager> lightVolumeManager,
172 ::LightTexture& lightTexture
Definition EnableNonOwnerReferences.h:7
Definition BlockSource.h:73
Definition ClientFrameUpdateContext.h:5
Definition HashedString.h:5
Definition LightVolumeManager.h:7
Definition LightTexture.h:5
Definition MolangVariableMap.h:18
Definition ParticleEffectGroup.h:5
Definition ParticleEffectInfo.h:5
Definition ParticleRenderData.h:5
Definition ParticleSystemEngine.h:5
static MCAPI void ** $vftable()
Definition ParticleEmitter.h:7
Definition ScreenContext.h:5