yaze
0.3.2
Link to the Past ROM Editor
Loading...
Searching...
No Matches
object_dimensions.h
Go to the documentation of this file.
1
#ifndef YAZE_ZELDA3_DUNGEON_OBJECT_DIMENSIONS_H
2
#define YAZE_ZELDA3_DUNGEON_OBJECT_DIMENSIONS_H
3
4
#include <cstdint>
5
#include <tuple>
6
#include <unordered_map>
7
#include <utility>
8
9
#include "absl/status/status.h"
10
#include "
rom/rom.h
"
11
12
namespace
yaze
{
13
namespace
zelda3 {
14
15
struct
RoomObject;
16
29
class
ObjectDimensionTable
{
30
public
:
31
static
ObjectDimensionTable
&
Get
();
32
33
// Load dimension data from ROM
34
absl::Status
LoadFromRom
(
Rom
* rom);
35
36
// Get base dimensions for an object (without size extension)
37
std::pair<int, int>
GetBaseDimensions
(
int
object_id)
const
;
38
39
// Get full dimensions accounting for size parameter
40
std::pair<int, int>
GetDimensions
(
int
object_id,
int
size)
const
;
41
42
// Get dimensions for selection bounds (without size=0 inflation)
43
// This version caps the size and doesn't use 32-when-zero for display
44
std::pair<int, int>
GetSelectionDimensions
(
int
object_id,
int
size)
const
;
45
46
// Get hit-test bounds in tile coordinates (x, y, width, height)
47
std::tuple<int, int, int, int>
GetHitTestBounds
(
const
RoomObject
& obj)
const
;
48
49
// Check if loaded
50
bool
IsLoaded
()
const
{
return
loaded_
; }
51
52
// Reset state (for testing)
53
void
Reset
() {
54
dimensions_
.clear();
55
loaded_
=
false
;
56
}
57
58
private
:
59
ObjectDimensionTable
() =
default
;
60
61
// Dimension entry: base width/height and extension direction
62
struct
DimensionEntry
{
63
int
base_width
= 1;
// Base width in tiles
64
int
base_height
= 1;
// Base height in tiles
65
enum class
ExtendDir
{
None
,
Horizontal
,
Vertical
,
Both
,
Diagonal
}
extend_dir
=
ExtendDir::None
;
66
int
extend_multiplier
= 1;
// Tiles added per size unit
67
bool
use_32_when_zero
=
false
;
// ASM: GetSize_1to15or32 uses 32 when size=0
68
};
69
70
// Object ID -> dimension entry
71
std::unordered_map<int, DimensionEntry>
dimensions_
;
72
bool
loaded_
=
false
;
73
74
// Initialize default dimensions based on draw routine patterns
75
void
InitializeDefaults
();
76
77
// Parse ROM tables for more accurate dimensions
78
void
ParseSubtype1Tables
(
Rom
* rom);
79
void
ParseSubtype2Tables
(
Rom
* rom);
80
void
ParseSubtype3Tables
(
Rom
* rom);
81
};
82
83
}
// namespace zelda3
84
}
// namespace yaze
85
86
#endif
// YAZE_ZELDA3_DUNGEON_OBJECT_DIMENSIONS_H
yaze::Rom
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition
rom.h:24
yaze::zelda3::ObjectDimensionTable
ROM-based object dimension lookup table.
Definition
object_dimensions.h:29
yaze::zelda3::ObjectDimensionTable::loaded_
bool loaded_
Definition
object_dimensions.h:72
yaze::zelda3::ObjectDimensionTable::GetBaseDimensions
std::pair< int, int > GetBaseDimensions(int object_id) const
Definition
object_dimensions.cc:30
yaze::zelda3::ObjectDimensionTable::GetHitTestBounds
std::tuple< int, int, int, int > GetHitTestBounds(const RoomObject &obj) const
Definition
object_dimensions.cc:129
yaze::zelda3::ObjectDimensionTable::IsLoaded
bool IsLoaded() const
Definition
object_dimensions.h:50
yaze::zelda3::ObjectDimensionTable::ParseSubtype3Tables
void ParseSubtype3Tables(Rom *rom)
Definition
object_dimensions.cc:558
yaze::zelda3::ObjectDimensionTable::LoadFromRom
absl::Status LoadFromRom(Rom *rom)
Definition
object_dimensions.cc:13
yaze::zelda3::ObjectDimensionTable::GetDimensions
std::pair< int, int > GetDimensions(int object_id, int size) const
Definition
object_dimensions.cc:38
yaze::zelda3::ObjectDimensionTable::Reset
void Reset()
Definition
object_dimensions.h:53
yaze::zelda3::ObjectDimensionTable::dimensions_
std::unordered_map< int, DimensionEntry > dimensions_
Definition
object_dimensions.h:71
yaze::zelda3::ObjectDimensionTable::ObjectDimensionTable
ObjectDimensionTable()=default
yaze::zelda3::ObjectDimensionTable::InitializeDefaults
void InitializeDefaults()
Definition
object_dimensions.cc:135
yaze::zelda3::ObjectDimensionTable::ParseSubtype2Tables
void ParseSubtype2Tables(Rom *rom)
Definition
object_dimensions.cc:549
yaze::zelda3::ObjectDimensionTable::Get
static ObjectDimensionTable & Get()
Definition
object_dimensions.cc:8
yaze::zelda3::ObjectDimensionTable::GetSelectionDimensions
std::pair< int, int > GetSelectionDimensions(int object_id, int size) const
Definition
object_dimensions.cc:85
yaze::zelda3::ObjectDimensionTable::ParseSubtype1Tables
void ParseSubtype1Tables(Rom *rom)
Definition
object_dimensions.cc:529
yaze::zelda3::RoomObject
Definition
room_object.h:50
yaze
Definition
application.cc:18
rom.h
yaze::zelda3::ObjectDimensionTable::DimensionEntry
Definition
object_dimensions.h:62
yaze::zelda3::ObjectDimensionTable::DimensionEntry::extend_multiplier
int extend_multiplier
Definition
object_dimensions.h:66
yaze::zelda3::ObjectDimensionTable::DimensionEntry::base_width
int base_width
Definition
object_dimensions.h:63
yaze::zelda3::ObjectDimensionTable::DimensionEntry::base_height
int base_height
Definition
object_dimensions.h:64
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir
ExtendDir
Definition
object_dimensions.h:65
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Vertical
@ Vertical
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Both
@ Both
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::None
@ None
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Diagonal
@ Diagonal
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Horizontal
@ Horizontal
yaze::zelda3::ObjectDimensionTable::DimensionEntry::use_32_when_zero
bool use_32_when_zero
Definition
object_dimensions.h:67
yaze::zelda3::ObjectDimensionTable::DimensionEntry::extend_dir
enum yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir extend_dir
src
zelda3
dungeon
object_dimensions.h
Generated by
1.10.0