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 <utility>
5#include <vector>
6#include <cstdint>
7#include <algorithm>
8
9#include "imgui/imgui.h"
10
11#include <bitset>
12#include <array>
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, ImU32 color);
44
45 static std::pair<int, int> RoomToCanvasCoordinates(int room_x, int room_y);
46 static std::pair<int, int> ScreenToRoomCoordinates(const ImVec2& screen_pos,
47 const ImVec2& zero_point, float scale);
48
49 // Overlay rendering structures
51 std::array<bool, 256> track_tiles{};
52 std::array<bool, 256> stop_tiles{};
53 std::array<bool, 256> switch_tiles{};
54
55 bool IsEmpty() const {
56 for (int i = 0; i < 256; ++i) {
57 if (track_tiles[i] || stop_tiles[i] || switch_tiles[i]) 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(ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
74 const CollisionOverlayCache& cache,
75 const TrackCollisionConfig& config,
76 bool direction_map_enabled,
77 const std::vector<uint16_t>& track_tile_order,
78 const std::vector<uint16_t>& switch_tile_order,
79 bool show_legend);
80
81 static void DrawCustomCollisionOverlay(ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
82 const zelda3::Room& room);
83
84 static void DrawWaterFillOverlay(ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
85 const zelda3::Room& room);
86
87 static void DrawCameraQuadrantOverlay(ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
88 const zelda3::Room& room);
89
90 static void DrawMinecartSpriteOverlay(ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
91 const zelda3::Room& room, const std::bitset<256>& minecart_sprite_ids,
92 const TrackCollisionConfig& config);
93
94 static void DrawTrackGapOverlay(ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
95 const zelda3::Room& room, const CollisionOverlayCache& cache);
96
97 static void DrawTrackRouteOverlay(ImDrawList* draw_list, const ImVec2& canvas_pos, float scale,
98 const CollisionOverlayCache& cache);
99};
100
101} // namespace yaze::editor
102
103#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 std::pair< int, int > ScreenToRoomCoordinates(const ImVec2 &screen_pos, const ImVec2 &zero_point, float scale)
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.