yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas_automation_service.h
Go to the documentation of this file.
1#ifndef YAZE_APP_CORE_SERVICE_CANVAS_AUTOMATION_SERVICE_H_
2#define YAZE_APP_CORE_SERVICE_CANVAS_AUTOMATION_SERVICE_H_
3
5
6#include "grpcpp/impl/service_type.h"
7#ifdef YAZE_WITH_GRPC
8
9#include <memory>
10#include <string>
11#include <unordered_map>
12
13#include "absl/status/status.h"
15
16namespace yaze {
17namespace editor {
18class OverworldEditor;
19}
20
21namespace proto {
22// Forward declare proto types
23class SetTileRequest;
24class SetTileResponse;
25class GetTileRequest;
26class GetTileResponse;
27class SetTilesRequest;
28class SetTilesResponse;
29class SelectTileRequest;
30class SelectTileResponse;
31class SelectTileRectRequest;
32class SelectTileRectResponse;
33class GetSelectionRequest;
34class GetSelectionResponse;
35class ClearSelectionRequest;
36class ClearSelectionResponse;
37class ScrollToTileRequest;
38class ScrollToTileResponse;
39class CenterOnRequest;
40class CenterOnResponse;
41class SetZoomRequest;
42class SetZoomResponse;
43class GetZoomRequest;
44class GetZoomResponse;
45class GetDimensionsRequest;
46class GetDimensionsResponse;
47class GetVisibleRegionRequest;
48class GetVisibleRegionResponse;
49class IsTileVisibleRequest;
50class IsTileVisibleResponse;
51} // namespace proto
52
62class CanvasAutomationServiceImpl {
63 public:
64 CanvasAutomationServiceImpl() = default;
65
66 // Register a canvas for automation
67 void RegisterCanvas(const std::string& canvas_id, gui::Canvas* canvas);
68
69 // Register an overworld editor (for tile get/set callbacks)
70 void RegisterOverworldEditor(const std::string& canvas_id,
71 editor::OverworldEditor* editor);
72
73 // RPC method implementations
74 absl::Status SetTile(const proto::SetTileRequest* request,
75 proto::SetTileResponse* response);
76
77 absl::Status GetTile(const proto::GetTileRequest* request,
78 proto::GetTileResponse* response);
79
80 absl::Status SetTiles(const proto::SetTilesRequest* request,
81 proto::SetTilesResponse* response);
82
83 absl::Status SelectTile(const proto::SelectTileRequest* request,
84 proto::SelectTileResponse* response);
85
86 absl::Status SelectTileRect(const proto::SelectTileRectRequest* request,
87 proto::SelectTileRectResponse* response);
88
89 absl::Status GetSelection(const proto::GetSelectionRequest* request,
90 proto::GetSelectionResponse* response);
91
92 absl::Status ClearSelection(const proto::ClearSelectionRequest* request,
93 proto::ClearSelectionResponse* response);
94
95 absl::Status ScrollToTile(const proto::ScrollToTileRequest* request,
96 proto::ScrollToTileResponse* response);
97
98 absl::Status CenterOn(const proto::CenterOnRequest* request,
99 proto::CenterOnResponse* response);
100
101 absl::Status SetZoom(const proto::SetZoomRequest* request,
102 proto::SetZoomResponse* response);
103
104 absl::Status GetZoom(const proto::GetZoomRequest* request,
105 proto::GetZoomResponse* response);
106
107 absl::Status GetDimensions(const proto::GetDimensionsRequest* request,
108 proto::GetDimensionsResponse* response);
109
110 absl::Status GetVisibleRegion(const proto::GetVisibleRegionRequest* request,
111 proto::GetVisibleRegionResponse* response);
112
113 absl::Status IsTileVisible(const proto::IsTileVisibleRequest* request,
114 proto::IsTileVisibleResponse* response);
115
116 private:
117 gui::Canvas* GetCanvas(const std::string& canvas_id);
118 editor::OverworldEditor* GetOverworldEditor(const std::string& canvas_id);
119
120 // Canvas registry
121 std::unordered_map<std::string, gui::Canvas*> canvases_;
122
123 // Editor registry (for tile callbacks)
124 std::unordered_map<std::string, editor::OverworldEditor*> overworld_editors_;
125};
126
137std::unique_ptr<grpc::Service> CreateCanvasAutomationServiceGrpc(
138 CanvasAutomationServiceImpl* impl);
139
140} // namespace yaze
141
142#endif // YAZE_WITH_GRPC
143#endif // YAZE_APP_CORE_SERVICE_CANVAS_AUTOMATION_SERVICE_H_
void RegisterCanvas(const char *canvas_name, const std::string &description="")
Register a canvas widget after BeginChild or similar.