yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
minecart_node_tool.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEON_UI_MINECART_MINECART_NODE_TOOL_H_
2#define YAZE_APP_EDITOR_DUNGEON_UI_MINECART_MINECART_NODE_TOOL_H_
3
4#include <cstdint>
5#include <optional>
6#include <span>
7#include <vector>
8
9#include "absl/status/statusor.h"
13
14namespace yaze::zelda3 {
15class Room;
16}
17
18namespace yaze::editor {
19
21
24 int id = 0; // Cart identity or shared switch channel, 0..31.
25 uint8_t collision = 0xB7; // B7..BA for carts; D0..D3 for switch tracks.
26 int source_x = -1; // Optional existing AF/B0 anchor, in 8px cells.
27 int source_y = -1;
28 uint8_t source_key_drop = 0;
29 std::optional<zelda3::CustomCollisionMap> expected_collision;
30};
31
32inline constexpr const char* kMinecartNodeDragPayload = "YAZE_MINECART_NODE";
33
36 bool collision_only = false;
37 uint8_t collision = 0xB7;
38 int size = 1;
39 const void* owner = nullptr;
40 const void* source_viewer = nullptr; // Existing actor drags only.
41 uint64_t revision = 0;
42 int room_id = -1;
43};
44
46 std::vector<zelda3::Sprite> sprites;
48 std::optional<MinecartTrack> track_before;
49 std::optional<MinecartTrack> track_after;
50};
51
52// Pure local candidate: tile coordinates use the 8px grid and must be even.
53// Runtime samples the sprite's exact upper-layer anchor. Only that one cell
54// receives a stop/switch override; this never guesses a 2x2 rail stencil.
55// Global cart-identity checks and encoded-stream preflight belong to the
56// editor.
57absl::StatusOr<MinecartNodePlacement> PreviewMinecartNodePlacement(
58 const zelda3::Room& room, int tile_x, int tile_y,
59 const MinecartNodeBrush& brush, std::span<const MinecartTrack> tracks = {},
60 int layer = 0);
61
62} // namespace yaze::editor
63
64#endif // YAZE_APP_EDITOR_DUNGEON_UI_MINECART_MINECART_NODE_TOOL_H_
Editors are the view controllers for the application.
constexpr const char * kMinecartNodeDragPayload
absl::StatusOr< MinecartNodePlacement > PreviewMinecartNodePlacement(const zelda3::Room &room, int tile_x, int tile_y, const MinecartNodeBrush &brush, std::span< const MinecartTrack > tracks, int layer)
Zelda 3 specific classes and functions.
std::optional< zelda3::CustomCollisionMap > expected_collision
std::optional< MinecartTrack > track_before
zelda3::CustomCollisionMap collision
std::optional< MinecartTrack > track_after
std::vector< zelda3::Sprite > sprites