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/LevelRendererCameraType.h"
9#include "mc/client/renderer/game/PlayerRenderingParameters.h"
10#include "mc/client/renderer/scripting/ServerGraphicsOverrideManager.h"
11#include "mc/client/renderer/texture/TextureAtlasItem.h"
12#include "mc/client/sound/ListenerState.h"
13#include "mc/common/SubClientId.h"
14#include "mc/comprehensive/ParticleType.h"
15#include "mc/deps/core/container/slot_map_handle.h"
16#include "mc/deps/core/math/Color.h"
17#include "mc/deps/core/math/Vec3.h"
18#include "mc/deps/core/string/HashedString.h"
19#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
20#include "mc/deps/core/utility/NonOwnerPointer.h"
21#include "mc/deps/core/utility/pub_sub/Publisher.h"
22#include "mc/deps/core/utility/pub_sub/Subscription.h"
23#include "mc/deps/core_graphics/ImageBuffer.h"
24#include "mc/deps/ecs/WeakEntityRef.h"
25#include "mc/deps/minecraft_renderer/renderer/MaterialPtr.h"
26#include "mc/deps/shared_types/legacy/LevelEvent.h"
27#include "mc/deps/shared_types/legacy/LevelSoundEvent.h"
28#include "mc/world/level/BlockPos.h"
29#include "mc/world/level/FogDefinition.h"
71namespace Bedrock::PubSub::ThreadModel {
struct MultiThreaded; }
73namespace mce {
class Camera; }
74namespace mce {
class Mesh; }
91 ::ll::TypedStorage<8, 48, ::HashedString> mEffect;
92 ::ll::TypedStorage<4, 16, ::mce::Color> mColor;
102 ::ll::TypedStorage<4, 16, ::mce::Color> mStartColor;
103 ::ll::TypedStorage<4, 16, ::mce::Color> mTargetColor;
104 ::ll::TypedStorage<4, 16, ::mce::Color> mCurrentColor;
105 ::ll::TypedStorage<4, 4, float> mTime;
109 using DeferredSoundList = ::std::vector<::DeferredSound>;
114 ::ll::TypedStorage<4, 4, float const> WATER_VISION_QUICK_TIME;
115 ::ll::TypedStorage<4, 4, float const> WATER_VISION_MAX_TIME;
116 ::ll::TypedStorage<4, 4, float const> WATER_VISION_QUICK_PERCENT;
117 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::cg::ImageBuffer>> mCloudsImage;
118 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::std::vector<::mce::Mesh>>> mCloudMeshes;
119 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::std::vector<::mce::Mesh>>> mCloudMeshesCurrentlyTessellating;
120 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::Tessellator>> mCloudTessellator;
121 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TextureTessellator>> mCloudTextureTessellator;
122 ::ll::TypedStorage<1, 1, bool> mUpdatingClouds;
123 ::ll::TypedStorage<4, 12, ::Vec3> mLastCloudUpdatePosition;
124 ::ll::TypedStorage<1, 1, uchar> mLastCloudSide;
125 ::ll::TypedStorage<4, 4, int> mLastCloudMeshSize;
126 ::ll::TypedStorage<4, 4, int> mLastCloudGridSize;
127 ::ll::TypedStorage<4, 336, ::std::array<::DirectionalLightRenderData, 3>> mDirectionalLightRenderData;
128 ::ll::TypedStorage<8, 64, ::std::unordered_map<::BlockPos, uint64>> mRecordSoundMap;
129 ::ll::TypedStorage<8, 64, ::std::unordered_map<::BlockPos, ::BlockDestructInfo>> mDestroyingBlockList;
130 ::ll::TypedStorage<8, 8, double> mLastDestroyRenderTime;
131 ::ll::TypedStorage<4, 4, float> mFov;
132 ::ll::TypedStorage<4, 4, float> mOFov;
133 ::ll::TypedStorage<4, 280, ::PlayerRenderingParameters> mRenderingParameters;
134 ::ll::TypedStorage<4, 4, float> thirdDistance;
135 ::ll::TypedStorage<4, 4, float> thirdDistanceO;
136 ::ll::TypedStorage<4, 4, float> thirdRotation;
137 ::ll::TypedStorage<4, 4, float> thirdRotationO;
138 ::ll::TypedStorage<4, 4, float> thirdTilt;
139 ::ll::TypedStorage<4, 4, float> thirdTiltO;
140 ::ll::TypedStorage<4, 4, float> cameraRoll;
141 ::ll::TypedStorage<4, 4, float> cameraRollO;
142 ::ll::TypedStorage<4, 4, float> currentCameraDist;
143 ::ll::TypedStorage<4, 4, float> prevHeightOffset;
144 ::ll::TypedStorage<4, 4, float> mHeightOffsetAdjustment;
145 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionTime;
146 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionTimePrevious;
147 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionClarity;
148 ::ll::TypedStorage<4, 4, float> mUnderwaterVisionScale;
149 ::ll::TypedStorage<4, 4, float> mUnderwaterLightLevel;
150 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionBlockEntityOverlayMaterial;
151 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionBlockEntityOverlayColorMaterial;
152 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionOverlayMaterial;
153 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionOpaqueMaterial;
154 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> selectionTwoSidedMaterial;
155 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> cracksOverlayMaterial;
156 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> cracksOverlayAlphaTestMaterial;
157 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> cracksOverlayBlockEntityMaterial;
158 ::ll::TypedStorage<8, 16, ::mce::MaterialPtr> mOutlineSelectionMaterial;
159 ::ll::TypedStorage<8, 8, ::SoundMapping const&> mSounds;
160 ::ll::TypedStorage<8, 24, ::std::vector<::DeferredSound>> mDeferredSounds;
161 ::ll::TypedStorage<8, 72, ::TextureAtlasItem> uvBreakBlockItem;
162 ::ll::TypedStorage<8, 8, ::IClientInstance&> mClientInstance;
163 ::ll::TypedStorage<8, 24, ::WeakEntityRef> mLocalUser;
164 ::ll::TypedStorage<8, 8, ::LevelRenderer&> mLevelRenderer;
165 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::SoundPlayerInterface>> mSoundPlayer;
166 ::ll::TypedStorage<8, 8, ::Level&> mLevel;
167 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::AmbientSoundController>> mAmbientSoundController;
168 ::ll::TypedStorage<4, 48, ::ListenerState> mListenerState;
169 ::ll::TypedStorage<4, 12, ::Vec3> mCameraForward;
170 ::ll::TypedStorage<4, 12, ::Vec3> mCameraUp;
171 ::ll::TypedStorage<4, 12, ::Vec3> mLastListenerPos;
172 ::ll::TypedStorage<8, 8, double> mLastListenerUpdateTime;
176 ::std::unordered_map<
177 ::LevelRendererPlayer::BiomeParticleKey,
178 ::Bedrock::slot_map_handle<::std::unique_ptr<::ParticleSystem::ParticleEmitter>, 64, 32>,
179 ::LevelRendererPlayer::BiomeParticleKeyHash,
180 ::std::equal_to<::LevelRendererPlayer::BiomeParticleKey>>>
181 mBiomeTintedParticleEffects;
182 ::ll::TypedStorage<4, 56, ::std::optional<::LevelRendererPlayer::SkyColorLerp>> mSkyColorLerp;
183 ::ll::TypedStorage<4, 4, int> mRainSoundTime;
184 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelSoundEvent;
185 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelSoundEventWithVolumeAndPitch;
186 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnStopLevelSoundEvent;
187 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnStopAllLevelSoundsEvent;
188 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnStopMusicEvent;
189 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mSubtitlesOptionSubscription;
190 ::ll::TypedStorage<1, 1, bool> mSubtitlesEnabled;
191 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::LevelAnimateTickHelper>> mLevelAnimateTickHelper;
195 ::Bedrock::PubSub::Publisher<
197 ::std::string
const&,
198 ::std::optional<::std::string>,
205 ::Bedrock::PubSub::ThreadModel::MultiThreaded,
208 ::ll::TypedStorage<8, 3360, ::ServerGraphicsOverrideManager> mScriptGraphicsOverrideManager;
213 LevelRendererPlayer& operator=(LevelRendererPlayer
const&);
214 LevelRendererPlayer(LevelRendererPlayer
const&);
215 LevelRendererPlayer();
220 virtual ~LevelRendererPlayer() =
default;
222 virtual ::LevelRendererCameraType getCameraType() const ;
224 virtual
void initResources() ;
226 virtual
void frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext) ;
228 virtual
void tickLevelRendererCamera() ;
230 virtual
void tickRain() ;
232 virtual
void onWillChangeDimension(::Player& player) ;
234 virtual
void onDimensionChanged(::Player& player) ;
236 virtual
void recalculateRenderDistance(
float const renderDistanceScalar) ;
238 virtual
void preRenderUpdate(
239 ::ScreenContext& screenContext,
240 ::LevelRenderPreRenderUpdateParameters& levelRenderPreRenderUpdateParameters
243 virtual
void renderBlockEntities(::BaseActorRenderContext& renderContext,
bool renderAlphaLayer) ;
246 updateViewArea(::LevelRenderPreRenderUpdateParameters const& levelRenderPreRenderUpdateParameters) ;
248 virtual ::NameTagRenderObjectCollection extractNameTags(::ScreenContext& screenContext) const ;
251 callRenderNameTags(::ScreenContext& screenContext, ::ViewRenderObject const& renderObj, ::Font& font) ;
253 virtual ::CrackRenderObjectCollection extractCracks(::ScreenContext& screenContext) const ;
256 callRenderCracks(::BaseActorRenderContext& renderContext, ::ViewRenderObject const& renderObj) ;
258 virtual
bool getForceFog(::Actor const& cameraActor) const ;
260 virtual
void setupFog(::ScreenContext& screenContext,
float const skyIntensityOverride) ;
262 virtual
void levelEvent(::SharedTypes::Legacy::LevelEvent type, ::Vec3 const& pos,
int data) ;
264 virtual
void levelEvent(::SharedTypes::Legacy::LevelEvent type, ::CompoundTag const& data) ;
266 virtual
void addCameraListenerToRenderChunkCoordinator() ;
269 notifyGeoChangedForAffectedEntities(::RenderChunkShared& renderChunkShared, uchar version) ;
271 virtual
void addTerrainParticleEffect(
272 ::BlockPos const& pos,
273 ::Block const& block,
274 ::Vec3 const& emitterPosition,
276 float velocityScalar,
280 virtual
void addTerrainSlideEffect(
281 ::BlockPos const& pos,
282 ::Block const& block,
283 ::Vec3 const& emitterPosition,
285 float velocityScalar,
289 virtual
void addBreakingItemParticleEffect(
291 ::BreakingItemParticleData const& data,
292 ::ResolvedItemIconInfo const& textureInfo
295 virtual
void addBiomeTintedParticleEffect(
296 ::HashedString const& effect,
297 ::BlockPos const& pos,
298 ::Block const& block,
299 ::std::optional<::mce::Color> overrideColor
302 virtual
float getUnderwaterVisionClarity();
304 virtual ::FogDefinition::DistanceSettingType _getFogDistanceSettingType() const ;
306 virtual ::FogDefinition::DensitySettingType _getFogDensitySettingType() const ;
308 virtual
void _releaseRespectiveResources() ;
310 virtual
void queueRenderEntities(
311 ::LevelRenderPreRenderUpdateParameters const& levelRenderPreRenderUpdateParameters
314 virtual
void renderEntityEffects(::BaseActorRenderContext& renderContext) ;
320 MCAPI LevelRendererPlayer(
321 ::IClientInstance& clientInstance,
322 ::std::shared_ptr<::OptionRegistry> options,
324 ::LevelRenderer& levelRenderer,
325 ::WeakEntityRef localUser,
326 ::Bedrock::NotNullNonOwnerPtr<::SoundPlayerInterface> const& soundPlayer,
327 ::Bedrock::NotNullNonOwnerPtr<::TextureAtlas const> const& terrainTexture,
328 ::SoundMapping const& sounds
331 MCAPI
void _addTerrainEffect(
332 ::HashedString const& effectName,
333 ::BlockPos const& pos,
334 ::Block const& block,
335 ::Vec3 const& emitterPosition,
337 float velocityScalar,
341 MCAPI
void _crack(::BlockSource& region, ::Block const& block, ::BlockPos const& inPos, uchar face);
343 MCAPI
void _playBabySoundEvent(::Sound const& sound, ::Vec3 const& pos, ::Random& rand,
bool isLocalPlayer) const;
345 MCAPI
void _renderHighlightSelection(
346 ::BaseActorRenderContext& renderContext,
347 ::BlockSource& region,
348 ::Block const& block,
349 ::BlockPos const& pos,
350 bool renderSecondPart,
354 MCAPI
void _renderOutlineSelection(
355 ::BaseActorRenderContext& renderContext,
356 ::Block const& block,
357 ::BlockSource& region,
358 ::BlockPos const& pos
361 MCAPI ::Sound const& _retrieveActorSoundWithFallback(
362 ::SharedTypes::Legacy::LevelSoundEvent eventType,
363 ::SharedTypes::Legacy::LevelSoundEvent backupEventType,
364 ::ActorSoundIdentifier const& actorSoundIdentifier
367 MCAPI
void _spawnSmokeParticles(::ParticleType particleType, ::Vec3 const& pos,
int data);
369 MCAPI
bool blockCanHaveCracksOverlay(::Block const& block) const;
371 MCAPI
bool blockCanHaveSelectionOverlay(::Block const& block) const;
373 MCAPI
void bobHurt(::Matrix& mv,
float a);
375 MCAPI
void bobView(::Matrix& mv,
float a);
377 MCAPI ::CrackRenderObject createCrackRenderObject(
378 ::ScreenContext& screenContext,
379 ::BlockSource& region,
380 ::Block const& block,
382 float destroyProgress
385 MCAPI ::ViewRenderObject createViewRenderObject(::ScreenContext& screenContext, ::SubClientId clientSubId);
387 MCAPI
void emitGrowthParticles(::Vec3 const& pos);
389 MCAPI ::DirectionalLightRenderData getActiveDirectionalLight() const;
391 MCAPI
float getFov(
float a,
bool enableVariableFOV) const;
393 MCAPI
void playDeferredSound(::std::
string const& name, ::Vec3 const& pos,
float volume,
float pitch);
395 MCAPI
void playSound(
396 ::std::
string const& name,
401 ::std::optional<::ServerSoundHandle> serverSoundHandle
404 MCAPI
void reinit(::Bedrock::NotNullNonOwnerPtr<::TextureAtlas const> const& terrainTexture);
406 MCAPI
void renderHitSelect(
407 ::BaseActorRenderContext& renderContext,
408 ::BlockSource& region,
409 ::BlockPos const& pos,
413 MCAPI
void setupCamera(::mce::Camera& camera,
float);
415 MCAPI
void stopMusic();
417 MCAPI
void stopRecord(::Vec3 const& pos);
419 MCAPI
void stopSound(::std::
string const& name);
421 MCAPI
void stopSounds();
423 MCAPI
void tryReassignSoundEventToVariant(::SharedTypes::Legacy::LevelSoundEvent& eventType, ::Vec3 const& pos);
425 MCAPI
void tryReassignSoundToFallback(
426 ::SharedTypes::Legacy::LevelSoundEvent& eventType,
428 ::ActorSoundIdentifier const& actorSoundIdentifier,
429 ::std::
string const& blockType,
433 MCAPI
void updateDestroyBlock(::BlockPos const& tp,
float destroyRate);
435 MCAPI
void updateDestroyProgress();
437 MCAPI
void updateListenerState(
float alpha);
443 MCAPI static
float getActorShadowOffset(::EntityContext const& entity);
445 MCAPI static ::TextureUVCoordinateSet getDestructionParticlesTexture(::IRandom& random, ::Block const& block);
452 ::IClientInstance& clientInstance,
453 ::std::shared_ptr<::OptionRegistry> options,
455 ::LevelRenderer& levelRenderer,
456 ::WeakEntityRef localUser,
457 ::Bedrock::NotNullNonOwnerPtr<::SoundPlayerInterface> const& soundPlayer,
458 ::Bedrock::NotNullNonOwnerPtr<::TextureAtlas const> const& terrainTexture,
459 ::SoundMapping const& sounds
466 MCFOLD ::LevelRendererCameraType $getCameraType() const;
468 MCAPI
void $initResources();
470 MCAPI
void $frameUpdate(::ClientFrameUpdateContext& clientFrameUpdateContext);
472 MCAPI
void $tickLevelRendererCamera();
474 MCAPI
void $tickRain();
476 MCAPI
void $onWillChangeDimension(::Player& player);
478 MCAPI
void $onDimensionChanged(::Player& player);
480 MCAPI
void $recalculateRenderDistance(
float const renderDistanceScalar);
482 MCAPI
void $preRenderUpdate(
483 ::ScreenContext& screenContext,
484 ::LevelRenderPreRenderUpdateParameters& levelRenderPreRenderUpdateParameters
487 MCAPI
void $renderBlockEntities(::BaseActorRenderContext& renderContext,
bool renderAlphaLayer);
489 MCAPI
void $updateViewArea(::LevelRenderPreRenderUpdateParameters const& levelRenderPreRenderUpdateParameters);
491 MCAPI ::NameTagRenderObjectCollection $extractNameTags(::ScreenContext& screenContext) const;
493 MCAPI
void $callRenderNameTags(::ScreenContext& screenContext, ::ViewRenderObject const& renderObj, ::Font& font);
495 MCAPI ::CrackRenderObjectCollection $extractCracks(::ScreenContext& screenContext) const;
497 MCAPI
void $callRenderCracks(::BaseActorRenderContext& renderContext, ::ViewRenderObject const& renderObj);
499 MCAPI
bool $getForceFog(::Actor const& cameraActor) const;
501 MCAPI
void $setupFog(::ScreenContext& screenContext,
float const skyIntensityOverride);
503 MCAPI
void $levelEvent(::SharedTypes::Legacy::LevelEvent type, ::Vec3 const& pos,
int data);
505 MCAPI
void $levelEvent(::SharedTypes::Legacy::LevelEvent type, ::CompoundTag const& data);
507 MCAPI
void $addCameraListenerToRenderChunkCoordinator();
509 MCAPI
void $notifyGeoChangedForAffectedEntities(::RenderChunkShared& renderChunkShared, uchar version);
511 MCAPI
void $addTerrainParticleEffect(
512 ::BlockPos const& pos,
513 ::Block const& block,
514 ::Vec3 const& emitterPosition,
516 float velocityScalar,
520 MCAPI
void $addTerrainSlideEffect(
521 ::BlockPos const& pos,
522 ::Block const& block,
523 ::Vec3 const& emitterPosition,
525 float velocityScalar,
529 MCAPI
void $addBreakingItemParticleEffect(
531 ::BreakingItemParticleData const& data,
532 ::ResolvedItemIconInfo const& textureInfo
535 MCAPI
void $addBiomeTintedParticleEffect(
536 ::HashedString const& effect,
537 ::BlockPos const& pos,
538 ::Block const& block,
539 ::std::optional<::mce::Color> overrideColor
542 MCAPI
float $getUnderwaterVisionClarity();
544 MCAPI ::FogDefinition::DistanceSettingType $_getFogDistanceSettingType() const;
546 MCAPI ::FogDefinition::DensitySettingType $_getFogDensitySettingType() const;
548 MCAPI
void $_releaseRespectiveResources();
550 MCAPI
void $queueRenderEntities(::LevelRenderPreRenderUpdateParameters const& levelRenderPreRenderUpdateParameters);
552 MCAPI
void $renderEntityEffects(::BaseActorRenderContext& renderContext);
Definition ActorSoundIdentifier.h:17
Definition AmbientSoundController.h:5
Definition BaseActorRenderContext.h:5
Definition EnableNonOwnerReferences.h:7
Definition BlockSource.h:71
Definition ClientFrameUpdateContext.h:5
Definition CompoundTag.h:18
Definition EntityContext.h:15
Definition IClientInstance.h:5
Definition LevelAnimateTickHelper.h:13
Definition LevelRendererCameraListeners.h:5
Definition LevelRendererPlayer.h:5
Definition LevelRenderer.h:5
Definition OptionRegistry.h:5
Definition ParticleEmitter.h:7
Definition RenderChunkShared.h:5
Definition ScreenContext.h:5
Definition ServerSoundHandle.h:5
Definition SoundMapping.h:5
Definition SoundPlayerInterface.h:24
Definition Tessellator.h:5
Definition TextureAtlas.h:5
Definition TextureTessellator.h:5
Definition MultiThreaded.h:7
Definition BlockDestructInfo.h:5
Definition BreakingItemParticleData.h:8
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 TextureUVCoordinateSet.h:5
Definition ViewRenderObject.h:5