1#ifndef YAZE_ZELDA3_DUNGEON_ROOM_LAYER_MANAGER_H
2#define YAZE_ZELDA3_DUNGEON_ROOM_LAYER_MANAGER_H
85 for (
int i = 0; i < 4; ++i) {
129 return layer2_mode == 0x06;
190 uint8_t alpha = 128) {
193 if (entry.object_index == object_index) {
194 entry.translucent = translucent;
204 if (entry.object_index == object_index) {
205 return entry.translucent;
213 if (entry.object_index == object_index && entry.translucent) {
259 if (merge_type.
ID == 0x08) {
359 uint64_t sig = 1469598103934665603ull;
360 const auto mix = [&sig](uint64_t value) {
362 sig *= 1099511628211ull;
365 for (
int i = 0; i < 4; ++i) {
384 mix(
static_cast<uint64_t
>(entry.object_index));
385 mix(entry.translucent ? 1u : 0u);
416 return object_layer * 10;
426 return object_layer == 1;
501 return "BG1 Objects";
505 return "BG2 Objects";
518 return "Translucent";
544 SDL_SetSurfaceColorMod(surface, 128, 128, 128);
547 SDL_SetSurfaceColorMod(surface, 255, 255, 255);
Represents a bitmap image optimized for SNES ROM hacking.
RoomLayerManager - Manages layer visibility and compositing.
uint8_t GetObjectAlpha(size_t object_index) const
bool IsHiddenByGame(LayerType layer) const
bool game_hides_lower_tilemap_
void ClearObjectTranslucency()
static bool IsObjectOnBG2(int object_layer)
Check if an object on a given layer should render to BG2.
bool use_priority_compositing_
void SetPriorityCompositing(bool enabled)
static const char * GetBlendModeName(LayerBlendMode mode)
Get blend mode name.
void SetShowHiddenLayers(bool show)
std::array< LayerBlendMode, 4 > layer_blend_mode_
static gfx::BackgroundBuffer & GetLayerBuffer(Room &room, LayerType layer)
Get the bitmap buffer for a layer type.
bool GameHidesLowerTilemap() const
uint8_t current_merge_type_id_
static const char * GetLayerName(LayerType layer)
Get human-readable name for layer type.
void SetBG2ColorMathEnabled(bool enabled)
static const gfx::BackgroundBuffer & GetLayerBuffer(const Room &room, LayerType layer)
bool lower_tilemap_on_main_
static bool IsTransparent(uint8_t pixel)
Check if a pixel index represents transparency.
int CalculateObjectPriority(int object_layer) const
void ApplyGameLayerRegisters(const RoomLayerRegisters ®isters)
void SetLayerBlendMode(LayerType layer, LayerBlendMode mode)
void ApplyLayerMerging(const LayerMergeType &merge_type)
void SetLayerVisible(LayerType layer, bool visible)
void ApplySurfaceColorMod(SDL_Surface *surface) const
Apply surface color modulation for DarkRoom effect.
void SetBG2OnTop(bool on_top)
bool ShowHiddenLayers() const
std::array< LayerType, 4 > GetDrawOrder() const
Get the draw order for layers.
bool IsLayerVisible(LayerType layer) const
void SetObjectTranslucency(size_t object_index, bool translucent, uint8_t alpha=128)
std::array< uint8_t, 4 > layer_alpha_
bool IsPriorityCompositingEnabled() const
bool IsBG2ColorMathEnabled() const
LayerBlendMode GetLayerBlendMode(LayerType layer) const
static LayerType GetObjectLayerType(int object_layer)
Get the appropriate background layer type for an object.
bool game_registers_applied_
std::array< bool, 4 > layer_visible_
bool IsObjectTranslucent(size_t object_index) const
bool upper_tilemap_blended_
bool AreLayersMerged() const
Check if layers are currently merged.
uint8_t GetMergeTypeId() const
Get the current merge type ID.
void CompositeToOutput(Room &room, gfx::Bitmap &output) const
Composite all visible layers into a single output bitmap.
void ApplyLayerMergingPreserveVisibility(const LayerMergeType &merge_type)
Apply layer merge settings without changing visibility.
uint8_t GetLayerAlpha(LayerType layer) const
uint64_t CompositeStateSignature() const
int GetObjectLayerValue(int object_layer) const
Get object layer value for buffer assignment.
void ApplyRoomEffect(EffectKey effect)
bool LowerTilemapWinsTies() const
bool UpperTilemapCoversLower(int layer2_mode) const
std::vector< ObjectTranslucency > object_translucency_
auto & object_bg2_buffer()
auto & object_bg1_buffer()
LayerBlendMode
Layer blend modes for compositing.
LayerType
Layer types for the 4-way visibility system.
Object metadata for tracking layer assignment.
Per-object translucency settings.
bool LowerTilemapShown() const
bool UpperTilemapBlended() const
bool TilemapsShareMainScreen() const