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) {
150 uint8_t alpha = 128) {
153 if (entry.object_index == object_index) {
154 entry.translucent = translucent;
164 if (entry.object_index == object_index) {
165 return entry.translucent;
173 if (entry.object_index == object_index && entry.translucent) {
219 if (merge_type.
ID == 0x08) {
319 uint64_t sig = 1469598103934665603ull;
320 const auto mix = [&sig](uint64_t value) {
322 sig *= 1099511628211ull;
325 for (
int i = 0; i < 4; ++i) {
338 mix(
static_cast<uint64_t
>(entry.object_index));
339 mix(entry.translucent ? 1u : 0u);
370 return object_layer * 10;
380 return object_layer == 1;
455 return "BG1 Objects";
459 return "BG2 Objects";
472 return "Translucent";
498 SDL_SetSurfaceColorMod(surface, 128, 128, 128);
501 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
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.
std::array< LayerBlendMode, 4 > layer_blend_mode_
static gfx::BackgroundBuffer & GetLayerBuffer(Room &room, LayerType layer)
Get the bitmap buffer for a layer type.
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)
static bool IsTransparent(uint8_t pixel)
Check if a pixel index represents transparency.
int CalculateObjectPriority(int object_layer) const
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)
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.
std::array< bool, 4 > layer_visible_
bool IsObjectTranslucent(size_t object_index) const
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)
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.