yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
minecart_canvas_tool.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEON_UI_MINECART_MINECART_CANVAS_TOOL_H_
2#define YAZE_APP_EDITOR_DUNGEON_UI_MINECART_MINECART_CANVAS_TOOL_H_
3
4#include <cstdint>
5#include <functional>
6#include <optional>
7#include <span>
8#include <string>
9#include <utility>
10
11#include "absl/status/statusor.h"
13
14namespace yaze::gui {
15struct CanvasRuntime;
16}
17
18namespace yaze::zelda3 {
19class Room;
20}
21
22namespace yaze::editor {
23
24// Minecart table coordinates are world pixels, without a $1000 offset.
25std::optional<std::pair<int, int>> MinecartLocalPosition(
26 const MinecartTrack& track);
27absl::StatusOr<size_t> FindCartStartSprite(const zelda3::Room& room,
28 const MinecartTrack& start);
29absl::Status ValidateCartStartDestination(const zelda3::Room& room,
30 const MinecartTrack& start);
31
33 std::span<const MinecartTrack> tracks;
34 int selected = -1;
35 int picking = -1;
36 uint64_t revision = 0;
37 bool enabled = false;
38 std::function<void(int)> select;
39 std::function<absl::Status(const MinecartTrack&, const MinecartTrack&)> move;
40 std::function<void()> cancel_pick;
41};
42
43// Per-viewer transient gesture; drafts remain in the existing track document.
45 public:
46 // Returns true while this tool owns room input, including empty-space clicks.
47 bool Draw(const gui::CanvasRuntime& rt, const zelda3::Room& room, int room_id,
48 bool editable, bool shortcut_focus,
49 const MinecartCanvasBinding& binding);
50 void Cancel();
51 bool dragging() const { return before_.has_value(); }
52 const std::optional<MinecartTrack>& preview() const { return preview_; }
53 const std::string& message() const { return message_; }
54
55 private:
56 std::optional<MinecartTrack> before_;
57 std::optional<MinecartTrack> preview_;
58 int room_id_ = -1;
59 uint64_t revision_ = 0;
60 std::string message_;
61};
62
63} // namespace yaze::editor
64#endif
std::optional< MinecartTrack > preview_
const std::optional< MinecartTrack > & preview() const
const std::string & message() const
std::optional< MinecartTrack > before_
bool Draw(const gui::CanvasRuntime &rt, const zelda3::Room &room, int room_id, bool editable, bool shortcut_focus, const MinecartCanvasBinding &binding)
Editors are the view controllers for the application.
std::optional< std::pair< int, int > > MinecartLocalPosition(const MinecartTrack &track)
absl::StatusOr< size_t > FindCartStartSprite(const zelda3::Room &room, const MinecartTrack &start)
absl::Status ValidateCartStartDestination(const zelda3::Room &room, const MinecartTrack &start)
Graphical User Interface (GUI) components for the application.
Zelda 3 specific classes and functions.
std::function< absl::Status(const MinecartTrack &, const MinecartTrack &) move)
std::span< const MinecartTrack > tracks