yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
door_position.h
Go to the documentation of this file.
1#ifndef YAZE_ZELDA3_DUNGEON_DOOR_POSITION_H
2#define YAZE_ZELDA3_DUNGEON_DOOR_POSITION_H
3
4#include <cstdint>
5#include <tuple>
6#include <utility>
7#include <vector>
8
9#include "door_types.h"
10
11namespace yaze {
12namespace zelda3 {
13
32 public:
33 // Room dimensions in tiles (64x64 for standard rooms)
34 static constexpr int kRoomWidthTiles = 64;
35 static constexpr int kRoomHeightTiles = 64;
36 static constexpr int kTileSize = 8; // Pixels per tile
37 static constexpr int kMaxDoorPositions = 32; // 5-bit encoding = 32 positions
38
39 // Wall detection thresholds (in tiles from edge)
40 static constexpr int kWallDetectionThreshold = 8;
41
47 static std::vector<int> GetSnapPositions(DoorDirection direction);
48
60 static uint8_t SnapToNearestPosition(int canvas_x, int canvas_y,
61 DoorDirection direction);
62
70 static std::pair<int, int> PositionToTileCoords(uint8_t position,
71 DoorDirection direction);
72
80 static std::pair<int, int> PositionToRenderTileCoords(
81 uint8_t position, DoorDirection direction);
82
90 static std::pair<int, int> PositionToPixelCoords(uint8_t position,
91 DoorDirection direction);
92
96 static std::pair<int, int> PositionToRenderPixelCoords(
97 uint8_t position, DoorDirection direction);
98
111 static int GetWallEdge(DoorDirection direction);
112
120 static bool IsValidPosition(uint8_t position, DoorDirection direction);
121
133 static bool DetectWallFromPosition(int canvas_x, int canvas_y,
134 DoorDirection& out_direction);
135
154 static bool DetectWallSection(int canvas_x, int canvas_y,
155 DoorDirection& out_direction,
156 bool& out_is_inner);
157
165 static uint8_t GetSectionStartPosition(DoorDirection direction,
166 bool is_inner);
167
176 static std::pair<uint8_t, uint8_t> EncodeDoorBytes(uint8_t position,
177 DoorType type,
178 DoorDirection direction);
179
187 static std::tuple<int, int, int, int> GetDoorBounds(uint8_t position,
188 DoorDirection direction);
189
196 static std::tuple<int, int, int, int> GetDoorEditorBounds(
197 uint8_t position, DoorDirection direction, DoorType type);
198};
199
200} // namespace zelda3
201} // namespace yaze
202
203#endif // YAZE_ZELDA3_DUNGEON_DOOR_POSITION_H
Manages door position snapping and coordinate conversion.
static uint8_t GetSectionStartPosition(DoorDirection direction, bool is_inner)
Get the starting position index for outer/inner section.
static constexpr int kRoomHeightTiles
static constexpr int kMaxDoorPositions
static std::pair< uint8_t, uint8_t > EncodeDoorBytes(uint8_t position, DoorType type, DoorDirection direction)
Encode door data for ROM storage.
static std::pair< int, int > PositionToPixelCoords(uint8_t position, DoorDirection direction)
Convert encoded position to pixel coordinates.
static std::tuple< int, int, int, int > GetDoorEditorBounds(uint8_t position, DoorDirection direction, DoorType type)
Get the editor interaction bounds for a typed door.
static std::tuple< int, int, int, int > GetDoorBounds(uint8_t position, DoorDirection direction)
Get the bounding rectangle for a door.
static bool DetectWallFromPosition(int canvas_x, int canvas_y, DoorDirection &out_direction)
Detect which wall the cursor is near.
static bool IsValidPosition(uint8_t position, DoorDirection direction)
Check if a position is valid for door placement.
static constexpr int kWallDetectionThreshold
static std::pair< int, int > PositionToRenderTileCoords(uint8_t position, DoorDirection direction)
Convert encoded position to the top-left tile of the visible door.
static std::pair< int, int > PositionToTileCoords(uint8_t position, DoorDirection direction)
Convert encoded position to tile coordinates.
static bool DetectWallSection(int canvas_x, int canvas_y, DoorDirection &out_direction, bool &out_is_inner)
Detect wall with inner/outer section information.
static std::pair< int, int > PositionToRenderPixelCoords(uint8_t position, DoorDirection direction)
Convert encoded position to visible render pixel coordinates.
static uint8_t SnapToNearestPosition(int canvas_x, int canvas_y, DoorDirection direction)
Convert canvas coordinates to nearest valid door position.
static int GetWallEdge(DoorDirection direction)
Get the wall edge coordinate for a direction.
static constexpr int kRoomWidthTiles
static std::vector< int > GetSnapPositions(DoorDirection direction)
Get all valid snap positions for a given direction.
DoorType
Door types from ALTTP.
Definition door_types.h:33
DoorDirection
Door direction on room walls.
Definition door_types.h:18