Side-car geometry engine that replays draw routines against an off-screen buffer to calculate real extents. More...
#include <object_geometry.h>
Classes | |
| struct | CacheKey |
| struct | CacheKeyHash |
Public Member Functions | |
| const DrawRoutineInfo * | LookupRoutine (int routine_id) const |
| absl::StatusOr< GeometryBounds > | MeasureByRoutineId (int routine_id, const RoomObject &object) const |
| absl::StatusOr< GeometryBounds > | MeasureByObjectId (const RoomObject &object) const |
| absl::StatusOr< GeometryBounds > | MeasureByObjectIdForState (const RoomObject &object, const DungeonState *state) const |
| void | ClearCache () |
| absl::StatusOr< GeometryBounds > | MeasureRoutine (const DrawRoutineInfo &routine, const RoomObject &object) const |
| absl::StatusOr< GeometryBounds > | MeasureRoutineForState (const DrawRoutineInfo &routine, const RoomObject &object, const DungeonState *state) const |
| std::pair< int, int > | ResolveAnchor (int16_t object_id, uint8_t size_byte) const |
| Resolve the canvas anchor (x, y) for a given object's draw routine. | |
| absl::StatusOr< GeometryBounds > | MeasureForLayerCompositing (int routine_id, const RoomObject &object) const |
| Measure bounds for a BG2 overlay object and mark it for masking. | |
Static Public Member Functions | |
| static ObjectGeometry & | Get () |
| static bool | IsLayerOneRoutine (int routine_id) |
| Get list of routine IDs that draw to BG2 layer. | |
Private Member Functions | |
| ObjectGeometry () | |
| void | BuildRegistry () |
Private Attributes | |
| std::vector< DrawRoutineInfo > | routines_ |
| std::unordered_map< int, DrawRoutineInfo > | routine_map_ |
| std::unordered_map< CacheKey, GeometryBounds, CacheKeyHash > | cache_ |
Side-car geometry engine that replays draw routines against an off-screen buffer to calculate real extents.
This is intentionally self-contained (no ROM or editor coupling) so it can be tested in isolation and later dropped into ObjectDrawer/editor hit-testing paths.
Definition at line 102 of file object_geometry.h.
|
private |
Definition at line 124 of file object_geometry.cc.
References BuildRegistry().

|
static |
Definition at line 119 of file object_geometry.cc.
Referenced by yaze::zelda3::CustomObjectManager::ActivateRuntimeContext(), yaze::editor::TileObjectHandler::CalculateGhostPreviewGeometry(), yaze::zelda3::ObjectTileEditor::CaptureObjectLayout(), yaze::zelda3::DimensionService::GetDimensions(), yaze::zelda3::DimensionService::GetHitTestBounds(), yaze::zelda3::DimensionService::GetSelectionBoundsPixels(), yaze::zelda3::CustomObjectManager::InvalidateCaches(), and yaze::cli::anonymous_namespace{dungeon_object_validate_commands.cc}::ResolveExpectedBounds().
| const DrawRoutineInfo * yaze::zelda3::ObjectGeometry::LookupRoutine | ( | int | routine_id | ) | const |
Definition at line 142 of file object_geometry.cc.
References routine_map_.
Referenced by MeasureByObjectIdForState(), MeasureByRoutineId(), and ResolveAnchor().
| absl::StatusOr< GeometryBounds > yaze::zelda3::ObjectGeometry::MeasureByRoutineId | ( | int | routine_id, |
| const RoomObject & | object ) const |
Definition at line 150 of file object_geometry.cc.
References LookupRoutine(), and MeasureRoutine().
Referenced by MeasureByObjectId(), and MeasureForLayerCompositing().

| absl::StatusOr< GeometryBounds > yaze::zelda3::ObjectGeometry::MeasureByObjectId | ( | const RoomObject & | object | ) | const |
Definition at line 256 of file object_geometry.cc.
References yaze::zelda3::CustomObjectManager::asset_generation(), cache_, yaze::zelda3::CustomObjectManager::Get(), yaze::zelda3::DrawRoutineRegistry::Get(), yaze::zelda3::DrawRoutineRegistry::GetRoutineIdForObject(), and MeasureByRoutineId().
Referenced by yaze::zelda3::DimensionService::GetDimensions(), yaze::zelda3::DimensionService::GetHitTestBounds(), and yaze::zelda3::DimensionService::GetSelectionBoundsPixels().
| absl::StatusOr< GeometryBounds > yaze::zelda3::ObjectGeometry::MeasureByObjectIdForState | ( | const RoomObject & | object, |
| const DungeonState * | state ) const |
Definition at line 280 of file object_geometry.cc.
References yaze::zelda3::DrawRoutineRegistry::Get(), yaze::zelda3::DrawRoutineRegistry::GetRoutineIdForObject(), LookupRoutine(), and MeasureRoutineForState().
Referenced by yaze::cli::anonymous_namespace{dungeon_object_validate_commands.cc}::ResolveExpectedBounds().

| void yaze::zelda3::ObjectGeometry::ClearCache | ( | ) |
Definition at line 298 of file object_geometry.cc.
References cache_.
Referenced by yaze::zelda3::CustomObjectManager::ActivateRuntimeContext(), and yaze::zelda3::CustomObjectManager::InvalidateCaches().
| absl::StatusOr< GeometryBounds > yaze::zelda3::ObjectGeometry::MeasureRoutine | ( | const DrawRoutineInfo & | routine, |
| const RoomObject & | object ) const |
Definition at line 176 of file object_geometry.cc.
References MeasureRoutineForState().
Referenced by MeasureByRoutineId().

| absl::StatusOr< GeometryBounds > yaze::zelda3::ObjectGeometry::MeasureRoutineForState | ( | const DrawRoutineInfo & | routine, |
| const RoomObject & | object, | ||
| const DungeonState * | state ) const |
Definition at line 182 of file object_geometry.cc.
References yaze::zelda3::DrawRoutineInfo::function, yaze::gfx::BackgroundBuffer::GetTileAt(), yaze::zelda3::GeometryBounds::height_tiles, yaze::zelda3::DrawRoutineInfo::id, yaze::zelda3::GeometryBounds::is_bg2_overlay, yaze::zelda3::DrawRoutineIds::kChest, yaze::zelda3::DrawContext::kMaxTilesX, yaze::zelda3::DrawContext::kMaxTilesY, yaze::zelda3::DrawRoutineInfo::min_tiles, yaze::zelda3::GeometryBounds::min_x_tiles, yaze::zelda3::GeometryBounds::min_y_tiles, yaze::zelda3::DrawContext::target_bg, yaze::zelda3::RoomObject::tiles(), yaze::zelda3::GeometryBounds::width_tiles, yaze::zelda3::RoomObject::x_, and yaze::zelda3::RoomObject::y_.
Referenced by MeasureByObjectIdForState(), and MeasureRoutine().

| std::pair< int, int > yaze::zelda3::ObjectGeometry::ResolveAnchor | ( | int16_t | object_id, |
| uint8_t | size_byte ) const |
Resolve the canvas anchor (x, y) for a given object's draw routine.
Replay-style preview/editor pipelines that call ObjectDrawer::DrawObject with hardcoded coordinates clip routines that draw upward or leftward (acute diagonals 0x09-0x14 / 0x15-0x20, diagonal ceilings 0xA0-0xAC, and moving wall west 0xCD). This returns the same anchor that ObjectGeometry uses internally for MeasureRoutine, so callers can position their RoomObject at coordinates that keep the full extent within the trace canvas.
Returns (0, 0) for unknown routines, or for routines whose draw direction does not require headroom.
Definition at line 160 of file object_geometry.cc.
References yaze::zelda3::DrawRoutineRegistry::Get(), yaze::zelda3::DrawRoutineRegistry::GetRoutineIdForObject(), and LookupRoutine().
Referenced by yaze::editor::TileObjectHandler::CalculateGhostPreviewGeometry(), and yaze::zelda3::ObjectTileEditor::CaptureObjectLayout().

| absl::StatusOr< GeometryBounds > yaze::zelda3::ObjectGeometry::MeasureForLayerCompositing | ( | int | routine_id, |
| const RoomObject & | object ) const |
Measure bounds for a BG2 overlay object and mark it for masking.
This is a convenience method that measures the object and sets the is_bg2_overlay flag if the object's layer indicates it draws to BG2. Used by the dungeon editor to determine BG1 mask regions.
| routine_id | Draw routine ID |
| object | Object with layer information |
Definition at line 302 of file object_geometry.cc.
References yaze::zelda3::RoomObject::BG2, yaze::zelda3::GeometryBounds::is_bg2_overlay, and MeasureByRoutineId().

|
static |
Get list of routine IDs that draw to BG2 layer.
These routines write to the lower tilemap (BG2) and require corresponding BG1 transparency for proper compositing.
Definition at line 318 of file object_geometry.cc.
|
private |
Definition at line 128 of file object_geometry.cc.
References yaze::zelda3::DrawRoutineRegistry::Get(), routine_map_, and routines_.
Referenced by ObjectGeometry().

|
private |
Definition at line 206 of file object_geometry.h.
Referenced by BuildRegistry().
|
private |
Definition at line 207 of file object_geometry.h.
Referenced by BuildRegistry(), and LookupRoutine().
|
mutableprivate |
Definition at line 208 of file object_geometry.h.
Referenced by ClearCache(), and MeasureByObjectId().