3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/renderer/game/DirectionalLightRenderData.h"
7#include "mc/client/renderer/game/LevelRendererCameraListeners.h"
8#include "mc/client/renderer/game/PlayerRenderingParameters.h"
9#include "mc/client/renderer/scripting/ServerGraphicsOverrideManager.h"
10#include "mc/client/renderer/texture/TextureAtlasItem.h"
11#include "mc/client/sound/ListenerState.h"
12#include "mc/common/SubClientId.h"
13#include "mc/comprehensive/ParticleType.h"
14#include "mc/deps/core/container/slot_map_handle.h"
15#include "mc/deps/core/math/Color.h"
16#include "mc/deps/core/math/Vec3.h"
17#include "mc/deps/core/string/HashedString.h"
18#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
19#include "mc/deps/core/utility/NonOwnerPointer.h"
20#include "mc/deps/core/utility/pub_sub/Publisher.h"
21#include "mc/deps/core/utility/pub_sub/Subscription.h"
22#include "mc/deps/core_graphics/ImageBuffer.h"
23#include "mc/deps/ecs/WeakEntityRef.h"
24#include "mc/deps/minecraft_renderer/renderer/MaterialPtr.h"
25#include "mc/deps/shared_types/legacy/LevelEvent.h"
26#include "mc/deps/shared_types/legacy/LevelSoundEvent.h"
27#include "mc/world/level/BlockPos.h"
28#include "mc/world/level/FogDefinition.h"
75namespace Bedrock::PubSub::ThreadModel {
struct MultiThreaded; }
77namespace mce {
class Camera; }
78namespace mce {
class Mesh; }
96 ::ll::TypedStorage<8, 48, ::HashedString> mEffect;
97 ::ll::TypedStorage<4, 16, ::mce::Color> mColor;
103 MCAPI ~BiomeParticleKey();
119 ::ll::TypedStorage<4, 16, ::mce::Color> mStartColor;
120 ::ll::TypedStorage<4, 16, ::mce::Color> mTargetColor;
121 ::ll::TypedStorage<4, 16, ::mce::Color> mCurrentColor;
122 ::ll::TypedStorage<4, 4, float> mTime;
126 using DeferredSoundList = ::std::vector<::DeferredSound>;
131 ::ll::TypedStorage<4, 4, float const> WATER_VISION_QUICK_TIME;
132 ::ll::TypedStorage<4, 4, float const> WATER_VISION_MAX_TIME;
133 ::ll::TypedStorage<4, 4, float const> WATER_VISION_QUICK_PERCENT;
134 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::cg::ImageBuffer>> mCloudsImage;
135 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::std::vector<::mce::Mesh>>> mCloudMeshes;
136 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::std::vector<::mce::Mesh>>> mCloudMeshesCurrentlyTessellating;
137 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::Tessellator>> mCloudTessellator;
138 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TextureTessellator>> mCloudTextureTessellator;
139 ::ll::TypedStorage<1, 1, bool> mUpdatingClouds;
140 ::ll::TypedStorage<4, 12, ::Vec3> mLastCloudUpdatePosition;
141 ::ll::TypedStorage<1, 1, uchar> mLastCloudSide;
142 ::ll::TypedStorage<4, 4, int> mLastCloudMeshSize;
143 ::ll::TypedStorage<4, 4, int> mLastCloudGridSize;
144 ::ll::TypedStorage<4, 336, ::std::array<::DirectionalLightRenderData, 3>> mDirectionalLightRenderData;
145 ::ll::TypedStorage<8, 64, ::std::unordered_map<::BlockPos, uint64>> mRecordSoundMap;
146 ::ll::TypedStorage<8, 64, ::std::unordered_map<::BlockPos, ::BlockDestructInfo>> mDestroyingBlockList;
147 ::ll::TypedStorage<8, 8, double> mLastDestroyRenderTime;
148 ::ll::TypedStorage<4, 4, float> mFov;
149 ::ll::TypedStorage<4, 4, float> mOFov;
150 ::ll::TypedStorage<4, 280, ::PlayerRenderingParameters> mRenderingParameters;
151 ::ll::TypedStorage<4, 4, float> thirdDistance;
152 ::ll::TypedStorage<4, 4, float> thirdDistanceO;
153 ::ll::TypedStorage<4, 4, float> thirdRotation;
154 ::ll::TypedStorage<4, 4, float> thirdRotationO;
155 ::ll::TypedStorage<4, 4, float> thirdTilt;
156 ::ll::TypedStorage<4, 4, float> thirdTiltO;
157 ::ll::TypedStorage<4, 4, float> cameraRoll;
158 ::ll::TypedStorage<4, 4, float> cameraRollO;
159 ::ll::TypedStorage<4, 4, float> currentCameraDist;
160 ::ll::TypedStorage<4, 4, float> prevHeightOffset;
161 ::ll::TypedStorage<4, 4, float> mHeightOffsetAdjustment;
162 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionTime;
163 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionTimePrevious;
164 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionClarity;
165 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionScale;
166 ::ll::TypedStorage<4, 4, float> mUnderwaterLightLevel;
167 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionBlockEntityOverlayMaterial;
168 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionBlockEntityOverlayColorMaterial;
169 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionOverlayMaterial;
170 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionOpaqueMaterial;
171 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionTwoSidedMaterial;
172 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> cracksOverlayMaterial;
173 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> cracksOverlayAlphaTestMaterial;
174 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> cracksOverlayBlockEntityMaterial;
175 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> mOutlineSelectionMaterial;
176 ::ll::TypedStorage<8, 8, ::SoundMapping const&> mSounds;
177 ::ll::TypedStorage<8, 24, ::std::vector<::DeferredSound>> mDeferredSounds;
178 ::ll::TypedStorage<8, 64, ::TextureAtlasItem> uvBreakBlockItem;
179 ::ll::TypedStorage<8, 8, ::IClientInstance&> mClientInstance;
180 ::ll::TypedStorage<8, 24, ::WeakEntityRef> mLocalUser;
181 ::ll::TypedStorage<8, 8, ::LevelRenderer&> mLevelRenderer;
182 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::SoundPlayerInterface>> mSoundPlayer;
183 ::ll::TypedStorage<8, 8, ::Level&> mLevel;
184 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::AmbientSoundController>> mAmbientSoundController;
185 ::ll::TypedStorage<4, 48, ::ListenerState> mListenerState;
186 ::ll::TypedStorage<4, 12, ::Vec3> mCameraForward;
187 ::ll::TypedStorage<4, 12, ::Vec3> mCameraUp;
188 ::ll::TypedStorage<4, 12, ::Vec3> mLastListenerPos;
189 ::ll::TypedStorage<8, 8, double> mLastListenerUpdateTime;
193 ::std::unordered_map<
194 ::LevelRendererPlayer::BiomeParticleKey,
195 ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32>,
196 ::LevelRendererPlayer::BiomeParticleKeyHash,
197 ::std::equal_to<::LevelRendererPlayer::BiomeParticleKey>>>
198 mBiomeTintedParticleEffects;
199 ::ll::TypedStorage<4, 56, ::std::optional<::LevelRendererPlayer::SkyColorLerp>> mSkyColorLerp;
200 ::ll::TypedStorage<4, 4, int> mRainSoundTime;
201 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelSoundEvent;
202 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelSoundEventWithVolumeAndPitch;
203 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnStopLevelSoundEvent;
204 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnStopAllLevelSoundsEvent;
205 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnStopMusicEvent;
206 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mSubtitlesOptionSubscription;
207 ::ll::TypedStorage<1, 1, bool> mSubtitlesEnabled;
208 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::LevelAnimateTickHelper>> mLevelAnimateTickHelper;
212 ::Bedrock::PubSub::Publisher<
214 ::std::string
const&,
215 ::std::optional<::std::string>,
221 ::Bedrock::PubSub::ThreadModel::MultiThreaded,
224 ::ll::TypedStorage<8, 3136, ::ServerGraphicsOverrideManager> mScriptGraphicsOverrideManager;
229 LevelRendererPlayer& operator=(LevelRendererPlayer
const&);
230 LevelRendererPlayer(LevelRendererPlayer
const&);
231 LevelRendererPlayer();
236 virtual ~LevelRendererPlayer() ;
238 virtual void initResources() ;
240 virtual void frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext) ;
242 virtual void tickLevelRendererCamera() ;
244 virtual void tickRain() ;
246 virtual void onWillChangeDimension(::Player& player) ;
248 virtual void onDimensionChanged(::Player& player) ;
250 virtual void recalculateRenderDistance(
float const renderDistanceScalar) ;
252 virtual void preRenderUpdate(
253 ::ScreenContext& screenContext,
254 ::LevelRenderPreRenderUpdateParameters& levelRenderPreRenderUpdateParameters
257 virtual void renderBlockEntities(::BaseActorRenderContext& renderContext,
bool renderAlphaLayer) ;
260 updateViewArea(::LevelRenderPreRenderUpdateParameters
const& levelRenderPreRenderUpdateParameters) ;
262 virtual ::NameTagRenderObjectCollection extractNameTags(::ScreenContext& screenContext)
const ;
265 callRenderNameTags(::ScreenContext& screenContext, ::ViewRenderObject
const& renderObj, ::Font& font) ;
267 virtual ::CrackRenderObjectCollection extractCracks(::ScreenContext& screenContext)
const ;
270 callRenderCracks(::BaseActorRenderContext& renderContext, ::ViewRenderObject
const& renderObj) ;
272 virtual bool getForceFog(::Actor
const& cameraActor)
const ;
274 virtual void setupFog(::ScreenContext& screenContext,
float const skyIntensityOverride) ;
276 virtual void levelEvent(::SharedTypes::Legacy::LevelEvent type, ::Vec3
const& pos,
int data) ;
278 virtual void levelEvent(::SharedTypes::Legacy::LevelEvent type, ::CompoundTag
const& data) ;
280 virtual void addCameraListenerToRenderChunkCoordinator() ;
283 notifyGeoChangedForAffectedEntities(::RenderChunkShared& renderChunkShared, uchar version) ;
285 virtual void addTerrainParticleEffect(
286 ::BlockPos
const& pos,
287 ::Block
const& block,
288 ::Vec3
const& emitterPosition,
290 float velocityScalar,
294 virtual void addTerrainSlideEffect(
295 ::BlockPos
const& pos,
296 ::Block
const& block,
297 ::Vec3
const& emitterPosition,
299 float velocityScalar,
303 virtual void addBreakingItemParticleEffect(
305 ::BreakingItemParticleData
const& data,
306 ::ResolvedItemIconInfo
const& textureInfo
309 virtual void addBiomeTintedParticleEffect(
310 ::HashedString
const& effect,
311 ::BlockPos
const& pos,
312 ::Block
const& block,
313 ::std::optional<::mce::Color> overrideColor
316 virtual float getUnderwaterVisionClarity();
318 virtual ::FogDefinition::DistanceSettingType _getFogDistanceSettingType() const ;
320 virtual ::FogDefinition::DensitySettingType _getFogDensitySettingType() const ;
322 virtual
void _releaseRespectiveResources() ;
324 virtual
void queueRenderEntities(
325 ::LevelRenderPreRenderUpdateParameters const& levelRenderPreRenderUpdateParameters
328 virtual
void renderEntityEffects(::BaseActorRenderContext& renderContext) ;
334 MCAPI LevelRendererPlayer(
335 ::IClientInstance& clientInstance,
336 ::std::shared_ptr<::Options> options,
338 ::LevelRenderer& levelRenderer,
339 ::WeakEntityRef localUser,
340 ::Bedrock::NotNullNonOwnerPtr<::SoundPlayerInterface> const& soundPlayer,
341 ::Bedrock::NotNullNonOwnerPtr<::TextureAtlas const> const& terrainTexture,
342 ::SoundMapping const& sounds
345 MCAPI
void _addTerrainEffect(
346 ::HashedString const& effectName,
347 ::BlockPos const& pos,
348 ::Block const& block,
349 ::Vec3 const& emitterPosition,
351 float velocityScalar,
355 MCAPI
void _crack(::BlockSource& region, ::Block const& block, ::BlockPos const& inPos, uchar face);
357 MCAPI ::CloudRenderObject _extractClouds(
358 ::ScreenContext& screenContext,
359 ::mce::framebuilder::SkyWeatherParameters const& skyWeatherParams,
363 MCAPI ::ActorShadowRenderObjectCollection _extractEntityShadows(::ScreenContext& screenContext) const;
365 MCAPI ::SkyRenderObject _extractSky(::ScreenContext& screenContext) const;
367 MCAPI ::TextureUVCoordinateSet _getDestructionParticlesTexture(::Block const& block);
369 MCAPI ::mce::MaterialPtr const& _getForcedMaterial(::BlockActor const& actor) const;
371 MCAPI
void _onLevelSoundEvent(
372 ::SharedTypes::Legacy::LevelSoundEvent eventType,
375 ::ActorSoundIdentifier const& actorSoundIdentifier,
379 MCAPI
void _playBabySoundEvent(::Sound const& sound, ::Vec3 const& pos, ::Random& rand) const;
381 MCAPI
void _renderHighlightSelection(
382 ::BaseActorRenderContext& renderContext,
383 ::BlockSource& region,
384 ::Block const& block,
385 ::BlockPos const& pos,
386 bool renderSecondPart,
390 MCAPI
void _renderOutlineSelection(
391 ::BaseActorRenderContext& renderContext,
392 ::Block const& block,
393 ::BlockSource& region,
394 ::BlockPos const& pos
397 MCAPI ::Sound const& _retrieveActorSoundWithFallback(
398 ::SharedTypes::Legacy::LevelSoundEvent eventType,
399 ::SharedTypes::Legacy::LevelSoundEvent backupEventType,
400 ::ActorSoundIdentifier const& actorSoundIdentifier
403 MCAPI
void _spawnSmokeParticles(::ParticleType particleType, ::Vec3 const& pos,
int data);
405 MCAPI
void addDestroyBlock(::BlockPos const& tp,
float destroyRate);
407 MCAPI
bool blockCanHaveCracksOverlay(::Block const& block) const;
409 MCAPI
bool blockCanHaveSelectionOverlay(::Block const& block) const;
411 MCAPI
void bobHurt(::Matrix& mv,
float a);
413 MCAPI
void bobView(::Matrix& mv,
float a);
415 MCAPI
void calculateDirectionalLightRenderData(
416 ::ScreenContext const& screenContext,
417 ::ViewRenderData const& renderData,
418 ::SkyRenderObject const& skyData
421 MCAPI ::CrackRenderObject createCrackRenderObject(
422 ::ScreenContext& screenContext,
423 ::BlockSource& region,
424 ::Block const& block,
426 float destroyProgress
429 MCAPI ::ViewRenderObject createViewRenderObject(::ScreenContext& screenContext, ::SubClientId clientSubId);
431 MCAPI
void emitGrowthParticles(::Vec3 const& pos);
433 MCAPI
void ensureItemInHandRenderingParametersInitialized(::mce::Camera& camera);
435 MCAPI ::DirectionalLightRenderData getActiveDirectionalLight() const;
437 MCAPI
float getFov(
float a,
bool enableVariableFOV) const;
439 MCAPI
float getFovWithoutGameplay() const;
441 MCAPI ::DirectionalLightRenderData getSunState() const;
443 MCAPI
void playSound(::std::
string const& name, ::Vec3 const& pos,
float volume,
float pitch) const;
445 MCAPI
void reinit(::Bedrock::NotNullNonOwnerPtr<::TextureAtlas const> const& terrainTexture);
447 MCAPI
void setItemInHandRenderingParameters(::mce::Camera& camera);
449 MCAPI
void setupCamera(::mce::Camera& camera,
float);
451 MCAPI
void stopMusic();
453 MCAPI
void stopSound(::std::
string const& name);
455 MCAPI
void stopSounds();
457 MCAPI
void tickClouds(
bool tessellateBothSides,
float a);
459 MCAPI
void tickSkyColor();
461 MCAPI
void tryReassignSoundToFallback(
462 ::SharedTypes::Legacy::LevelSoundEvent& eventType,
464 ::ActorSoundIdentifier const& actorSoundIdentifier,
465 ::std::
string const& blockType,
469 MCAPI
void updateDestroyBlock(::BlockPos const& tp,
float destroyRate);
471 MCAPI
void updateDestroyProgress();
473 MCAPI
void updateListenerState(
float alpha);
475 MCAPI
void updateUnderWaterVisionScale();
481 MCAPI static
float getActorShadowOffset(::EntityContext const& entity);
483 MCAPI static ::TextureUVCoordinateSet getDestructionParticlesTexture(::IRandom& random, ::Block const& block);
485 MCAPI static
float getNightVisionScale(::Mob const& camera,
float a);
487 MCAPI static
void renderCracks(
488 ::ScreenContext& screenContext,
489 ::ViewRenderData const& renderData,
490 ::CrackRenderObjectCollection const& tagCollection
498 ::IClientInstance& clientInstance,
499 ::std::shared_ptr<::Options> options,
501 ::LevelRenderer& levelRenderer,
502 ::WeakEntityRef localUser,
503 ::Bedrock::NotNullNonOwnerPtr<::SoundPlayerInterface> const& soundPlayer,
504 ::Bedrock::NotNullNonOwnerPtr<::TextureAtlas const> const& terrainTexture,
505 ::SoundMapping const& sounds
518 MCAPI
void $initResources();
520 MCAPI
void $frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext);
522 MCAPI
void $tickLevelRendererCamera();
524 MCAPI
void $tickRain();
526 MCAPI
void $onWillChangeDimension(::Player& player);
528 MCAPI
void $onDimensionChanged(::Player& player);
530 MCAPI
void $recalculateRenderDistance(
float const renderDistanceScalar);
532 MCAPI
void $preRenderUpdate(
533 ::ScreenContext& screenContext,
534 ::LevelRenderPreRenderUpdateParameters& levelRenderPreRenderUpdateParameters
537 MCFOLD
void $renderBlockEntities(::BaseActorRenderContext& renderContext,
bool renderAlphaLayer);
539 MCAPI
void $updateViewArea(::LevelRenderPreRenderUpdateParameters const& levelRenderPreRenderUpdateParameters);
541 MCAPI ::NameTagRenderObjectCollection $extractNameTags(::ScreenContext& screenContext) const;
543 MCAPI
void $callRenderNameTags(::ScreenContext& screenContext, ::ViewRenderObject const& renderObj, ::Font& font);
545 MCAPI ::CrackRenderObjectCollection $extractCracks(::ScreenContext& screenContext) const;
547 MCAPI
void $callRenderCracks(::BaseActorRenderContext& renderContext, ::ViewRenderObject const& renderObj);
549 MCAPI
bool $getForceFog(::Actor const& cameraActor) const;
551 MCAPI
void $setupFog(::ScreenContext& screenContext,
float const skyIntensityOverride);
553 MCAPI
void $levelEvent(::SharedTypes::Legacy::LevelEvent type, ::Vec3 const& pos,
int data);
555 MCAPI
void $levelEvent(::SharedTypes::Legacy::LevelEvent type, ::CompoundTag const& data);
557 MCFOLD
void $addCameraListenerToRenderChunkCoordinator();
559 MCAPI
void $notifyGeoChangedForAffectedEntities(::RenderChunkShared& renderChunkShared, uchar version);
561 MCAPI
void $addTerrainParticleEffect(
562 ::BlockPos const& pos,
563 ::Block const& block,
564 ::Vec3 const& emitterPosition,
566 float velocityScalar,
570 MCAPI
void $addTerrainSlideEffect(
571 ::BlockPos const& pos,
572 ::Block const& block,
573 ::Vec3 const& emitterPosition,
575 float velocityScalar,
579 MCAPI
void $addBreakingItemParticleEffect(
581 ::BreakingItemParticleData const& data,
582 ::ResolvedItemIconInfo const& textureInfo
585 MCAPI
void $addBiomeTintedParticleEffect(
586 ::HashedString const& effect,
587 ::BlockPos const& pos,
588 ::Block const& block,
589 ::std::optional<::mce::Color> overrideColor
592 MCAPI
float $getUnderwaterVisionClarity();
594 MCAPI ::FogDefinition::DistanceSettingType $_getFogDistanceSettingType() const;
596 MCAPI ::FogDefinition::DensitySettingType $_getFogDensitySettingType() const;
598 MCAPI
void $_releaseRespectiveResources();
600 MCAPI
void $queueRenderEntities(::LevelRenderPreRenderUpdateParameters const& levelRenderPreRenderUpdateParameters);
602 MCAPI
void $renderEntityEffects(::BaseActorRenderContext& renderContext);
Definition ActorSoundIdentifier.h:17
Definition AmbientSoundController.h:5
Definition BaseActorRenderContext.h:5
Definition EnableNonOwnerReferences.h:7
Definition BlockActor.h:30
Definition BlockSource.h:71
Definition ClientFrameUpdateContext.h:5
Definition CompoundTag.h:23
Definition EntityContext.h:16
Definition IClientInstance.h:5
Definition LevelAnimateTickHelper.h:13
Definition LevelRendererCameraListeners.h:5
Definition LevelRendererPlayer.h:5
static MCAPI void ** $vftable()
static MCAPI void ** $vftableForLevelListener()
static MCAPI void ** $vftableForPlayerListener()
static MCAPI void ** $vftableForLevelRendererCamera()
Definition LevelRenderer.h:5
Definition ParticleEmitter.h:7
Definition RenderChunkShared.h:5
Definition ScreenContext.h:5
Definition SoundMapping.h:5
Definition SoundPlayerInterface.h:21
Definition Tessellator.h:5
Definition TextureAtlas.h:5
Definition TextureTessellator.h:5
Definition ActorShadowRenderObjectCollection.h:5
Definition MultiThreaded.h:12
Definition BlockDestructInfo.h:5
Definition BreakingItemParticleData.h:8
Definition CloudRenderObject.h:5
Definition CrackRenderObjectCollection.h:5
Definition CrackRenderObject.h:5
Definition DeferredSound.h:5
Definition LevelRenderPreRenderUpdateParameters.h:5
Definition LevelRendererPlayer.h:17
Definition LevelRendererPlayer.h:15
Definition LevelRendererPlayer.h:19
Definition ResolvedItemIconInfo.h:8
Definition SkyRenderObject.h:5
Definition TextureUVCoordinateSet.h:5
Definition ViewRenderData.h:5
Definition ViewRenderObject.h:5
Definition SkyWeatherParameters.h:7