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> PositionToPixelCoords(uint8_t position,
81 DoorDirection direction);
82
95 static int GetWallEdge(DoorDirection direction);
96
104 static bool IsValidPosition(uint8_t position, DoorDirection direction);
105
117 static bool DetectWallFromPosition(int canvas_x, int canvas_y,
118 DoorDirection& out_direction);
119
138 static bool DetectWallSection(int canvas_x, int canvas_y,
139 DoorDirection& out_direction,
140 bool& out_is_inner);
141
149 static uint8_t GetSectionStartPosition(DoorDirection direction, bool is_inner);
150
159 static std::pair<uint8_t, uint8_t> EncodeDoorBytes(uint8_t position,
160 DoorType type,
161 DoorDirection direction);
162
170 static std::tuple<int, int, int, int> GetDoorBounds(uint8_t position,
171 DoorDirection direction);
172};
173
174} // namespace zelda3
175} // namespace yaze
176
177#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 > 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 > 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 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