yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
controller.h
Go to the documentation of this file.
1#ifndef YAZE_APP_CORE_CONTROLLER_H
2#define YAZE_APP_CORE_CONTROLLER_H
3
5
6#include <chrono>
7#include <memory>
8#include <mutex>
9#include <queue>
10#include <utility>
11
12#include "absl/status/status.h"
18#include "rom/rom.h"
19
20int main(int argc, char** argv);
21
22namespace yaze {
23
24class CanvasAutomationServiceImpl;
25
26namespace test {
27struct ScreenshotArtifact;
28}
29
37 public:
39 std::string preferred_path;
40 std::string window_title;
42 bool reveal_to_user = false;
43 std::function<void(absl::StatusOr<test::ScreenshotArtifact>)> callback;
44 };
45
46 bool IsActive() const { return active_; }
47 absl::Status OnEntry(std::string filename = "");
48 void OnInput();
49 absl::Status OnLoad();
50 void DoRender() const;
51 void OnExit();
52
53 // Defer a screenshot capture to the next render frame (thread-safe)
54 void RequestScreenshot(const ScreenshotRequest& request);
55
56 // HTTP worker entry point; all editor work runs on the main frame thread.
57 absl::StatusOr<std::string> RequestEditorControl(const std::string& request);
58
59 // Set startup editor and cards from command-line flags
60 void SetStartupEditor(const std::string& editor_name,
61 const std::string& cards);
62
63 // Window visibility control (for service mode)
64 void ShowWindow() {
66 window_backend_->ShowWindow();
67 }
68 void HideWindow() {
70 window_backend_->HideWindow();
71 }
72
73 auto window() -> SDL_Window* {
74 return window_backend_ ? window_backend_->GetNativeWindow() : nullptr;
75 }
76 void set_active(bool active) { active_ = active; }
77 auto active() const { return active_; }
82 auto renderer() -> gfx::IRenderer* { return renderer_.get(); }
83
84 // Test-friendly accessors for GUI testing with ImGuiTestEngine
86
87 // Window backend accessor
89
90 // Dependency-injection seam for focused controller event tests.
92 std::unique_ptr<platform::IWindowBackend> window_backend) {
94 }
95
96 // Load a ROM file and initialize all editors for testing
97 // This performs the full initialization flow including LoadAssets()
98 absl::Status LoadRomForTesting(const std::string& rom_path);
99
100#ifdef YAZE_WITH_GRPC
101 void SetCanvasAutomationService(CanvasAutomationServiceImpl* service) {
102 editor_manager_.SetCanvasAutomationService(service);
103 }
104#endif
105
106 private:
107 friend int ::main(int argc, char** argv);
108
109 bool active_ = false;
110 // Idle pacing (see Controller::OnInput): time of the last window event,
111 // whether the window is hidden, and the end of the previous frame.
112 std::chrono::steady_clock::time_point last_event_time_ =
113 std::chrono::steady_clock::now();
114 bool window_hidden_ = false;
115 // Written by DoRender() const.
116 mutable std::chrono::steady_clock::time_point last_frame_end_ =
117 std::chrono::steady_clock::now();
118 std::unique_ptr<platform::IWindowBackend> window_backend_;
120 std::unique_ptr<gfx::IRenderer> renderer_;
121
122 // Thread-safe screenshot queue
123 mutable std::mutex screenshot_mutex_;
124 mutable std::queue<ScreenshotRequest> screenshot_requests_;
125
127
128 void ProcessScreenshotRequests() const;
129};
130
131} // namespace yaze
132
133#endif // YAZE_APP_CORE_CONTROLLER_H
Main controller for the application.
Definition controller.h:36
platform::IWindowBackend * window_backend()
Definition controller.h:88
auto window() -> SDL_Window *
Definition controller.h:73
std::chrono::steady_clock::time_point last_frame_end_
Definition controller.h:116
editor::EditorManager * editor_manager()
Definition controller.h:85
std::queue< ScreenshotRequest > screenshot_requests_
Definition controller.h:124
auto overworld() -> yaze::zelda3::Overworld *
Definition controller.h:78
auto renderer() -> gfx::IRenderer *
Definition controller.h:82
editor::EditorManager editor_manager_
Definition controller.h:119
absl::Status LoadRomForTesting(const std::string &rom_path)
absl::Status OnEntry(std::string filename="")
absl::StatusOr< std::string > RequestEditorControl(const std::string &request)
app::EditorControlQueue editor_control_queue_
Definition controller.h:126
std::chrono::steady_clock::time_point last_event_time_
Definition controller.h:112
auto GetCurrentRom() -> Rom *
Definition controller.h:81
void SetStartupEditor(const std::string &editor_name, const std::string &cards)
auto active() const
Definition controller.h:77
std::unique_ptr< platform::IWindowBackend > window_backend_
Definition controller.h:118
void ProcessScreenshotRequests() const
bool IsActive() const
Definition controller.h:46
absl::Status OnLoad()
void SetWindowBackendForTesting(std::unique_ptr< platform::IWindowBackend > window_backend)
Definition controller.h:91
void DoRender() const
void RequestScreenshot(const ScreenshotRequest &request)
std::unique_ptr< gfx::IRenderer > renderer_
Definition controller.h:120
std::mutex screenshot_mutex_
Definition controller.h:123
void set_active(bool active)
Definition controller.h:76
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:52
The EditorManager controls the main editor window and manages the various editor classes.
Rom * GetCurrentRom() const override
yaze::zelda3::Overworld * overworld() const
Defines an abstract interface for all rendering operations.
Definition irenderer.h:60
Abstract window backend interface.
Definition iwindow.h:135
int main(int argc, char **argv)
Definition emu.cc:43
SDL2/SDL3 compatibility layer.
std::function< void(absl::StatusOr< test::ScreenshotArtifact >)> callback
Definition controller.h:43
test::ScreenshotFormat format
Definition controller.h:41