yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_rendering_helpers.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEON_DUNGEON_RENDERING_HELPERS_H
2#define YAZE_APP_EDITOR_DUNGEON_DUNGEON_RENDERING_HELPERS_H
3
4#include <algorithm>
5#include <cstdint>
6#include <utility>
7#include <vector>
8
9#include "imgui/imgui.h"
10
11#include <array>
12#include <bitset>
13
14namespace yaze::zelda3 {
15class Room;
16}
17
18namespace yaze::editor {
19
20enum class TrackDir : uint8_t { North, East, South, West };
21
22constexpr uint8_t kTrackDirNorth = 1 << 0;
23constexpr uint8_t kTrackDirEast = 1 << 1;
24constexpr uint8_t kTrackDirSouth = 1 << 2;
25constexpr uint8_t kTrackDirWest = 1 << 3;
26
28 uint8_t primary = 0;
29 uint8_t secondary = 0;
30};
31
33 public:
37 uint8_t tile, const std::vector<uint16_t>& track_tiles,
38 const std::vector<uint16_t>& track_switches);
39
40 static void DrawTrackArrowHead(ImDrawList* draw_list, const ImVec2& tip,
41 TrackDir dir, float size, ImU32 color);
42 static void DrawTrackDirectionMask(ImDrawList* draw_list, const ImVec2& min,
43 float tile_size, uint8_t mask,
44 ImU32 color);
45
46 static std::pair<int, int> RoomToCanvasCoordinates(int room_x, int room_y);
47
48 // Overlay rendering structures
50 std::array<bool, 256> track_tiles{};
51 std::array<bool, 256> stop_tiles{};
52 std::array<bool, 256> switch_tiles{};
53
54 bool IsEmpty() const {
55 for (int i = 0; i < 256; ++i) {
56 if (track_tiles[i] || stop_tiles[i] || switch_tiles[i])
57 return false;
58 }
59 return true;
60 }
61 };
62
64 uint8_t x, y, tile;
65 };
66
68 bool has_data = false;
69 std::vector<CollisionOverlayEntry> entries;
70 };
71
72 // Overlay rendering methods
73 static void DrawTrackCollisionOverlay(
74 ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
75 const CollisionOverlayCache& cache, const TrackCollisionConfig& config,
76 bool direction_map_enabled, const std::vector<uint16_t>& track_tile_order,
77 const std::vector<uint16_t>& switch_tile_order, bool show_legend);
78
79 static void DrawCustomCollisionOverlay(ImDrawList* draw_list,
80 const ImVec2& canvas_pos, float scale,
81 const zelda3::Room& room);
82
83 static void DrawWaterFillOverlay(ImDrawList* draw_list,
84 const ImVec2& canvas_pos, float scale,
85 const zelda3::Room& room);
86
87 static void DrawCameraQuadrantOverlay(ImDrawList* draw_list,
88 const ImVec2& canvas_pos, float scale,
89 const zelda3::Room& room);
90
91 static void DrawMinecartSpriteOverlay(
92 ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
93 const zelda3::Room& room, const std::bitset<256>& minecart_sprite_ids,
94 const TrackCollisionConfig& config);
95
96 static void DrawTrackGapOverlay(ImDrawList* draw_list,
97 const ImVec2& canvas_pos, float scale,
98 const zelda3::Room& room,
99 const CollisionOverlayCache& cache);
100
101 static void DrawTrackRouteOverlay(ImDrawList* draw_list,
102 const ImVec2& canvas_pos, float scale,
103 const CollisionOverlayCache& cache);
104};
105
106} // namespace yaze::editor
107
108#endif // YAZE_APP_EDITOR_DUNGEON_DUNGEON_RENDERING_HELPERS_H
static void DrawCustomCollisionOverlay(ImDrawList *draw_list, const ImVec2 &canvas_pos, float scale, const zelda3::Room &room)
static void DrawTrackGapOverlay(ImDrawList *draw_list, const ImVec2 &canvas_pos, float scale, const zelda3::Room &room, const CollisionOverlayCache &cache)
static void DrawTrackCollisionOverlay(ImDrawList *draw_list, const ImVec2 &canvas_pos, float scale, const CollisionOverlayCache &cache, const TrackCollisionConfig &config, bool direction_map_enabled, const std::vector< uint16_t > &track_tile_order, const std::vector< uint16_t > &switch_tile_order, bool show_legend)
static void DrawCameraQuadrantOverlay(ImDrawList *draw_list, const ImVec2 &canvas_pos, float scale, const zelda3::Room &room)
static std::pair< int, int > RoomToCanvasCoordinates(int room_x, int room_y)
static void DrawTrackRouteOverlay(ImDrawList *draw_list, const ImVec2 &canvas_pos, float scale, const CollisionOverlayCache &cache)
static TrackDirectionMasks GetTrackDirectionMasksForTrackIndex(size_t index)
static void DrawMinecartSpriteOverlay(ImDrawList *draw_list, const ImVec2 &canvas_pos, float scale, const zelda3::Room &room, const std::bitset< 256 > &minecart_sprite_ids, const TrackCollisionConfig &config)
static TrackDirectionMasks GetTrackDirectionMasksForSwitchIndex(size_t index)
static void DrawWaterFillOverlay(ImDrawList *draw_list, const ImVec2 &canvas_pos, float scale, const zelda3::Room &room)
static void DrawTrackDirectionMask(ImDrawList *draw_list, const ImVec2 &min, float tile_size, uint8_t mask, ImU32 color)
static void DrawTrackArrowHead(ImDrawList *draw_list, const ImVec2 &tip, TrackDir dir, float size, ImU32 color)
static TrackDirectionMasks GetTrackDirectionMasksFromConfig(uint8_t tile, const std::vector< uint16_t > &track_tiles, const std::vector< uint16_t > &track_switches)
Editors are the view controllers for the application.
constexpr uint8_t kTrackDirSouth
constexpr uint8_t kTrackDirEast
constexpr uint8_t kTrackDirNorth
constexpr uint8_t kTrackDirWest
Zelda 3 specific classes and functions.