yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
application.h
Go to the documentation of this file.
1#ifndef YAZE_APP_APPLICATION_H_
2#define YAZE_APP_APPLICATION_H_
3
4#include <chrono>
5#include <memory>
6#include <string>
7#include <vector>
8
9#include "absl/status/status.h"
10#include "app/activity_file.h"
11#include "app/controller.h"
12#include "app/startup_flags.h"
13#include "yaze_config.h"
14
15#ifdef YAZE_WITH_GRPC
16#include "app/emu/i_emulator.h"
19#endif
20
21namespace yaze {
22
26struct AppConfig {
27 // File loading
28 std::string rom_file;
29 std::string log_file;
30 bool debug = false;
31 std::string log_categories;
36
37 // Startup navigation
38 std::string startup_editor; // Editor to open (e.g., "Dungeon")
39 std::vector<std::string>
40 open_panels; // Panel IDs to show (e.g., "dungeon.room_list")
41
42 // Jump targets
43 int jump_to_room = -1; // Dungeon room ID (-1 to ignore)
44 int jump_to_map = -1; // Overworld map ID (-1 to ignore)
45
46 // Services
47 bool headless = false; // Run without GUI (uses NullWindowBackend)
48 bool service_mode = false; // Run with GUI backend but hidden window
49 bool enable_api = false;
50 bool editor_control = false; // Semantic local editor commands, opt-in.
51 int api_port = 8080;
52 bool enable_test_harness = false;
53 std::string test_harness_bind_address = "0.0.0.0";
55 50052; // Unified gRPC server port (GUI automation + Emulator service)
56 std::string backend = "internal"; // Emulator backend: "internal" or "mesen"
57};
58
64 public:
65 static Application& Instance();
66
67 // Initialize the application with configuration
68 void Initialize(const AppConfig& config);
69
70 // Default initialization (empty config)
72
73 // Main loop tick
74 void Tick();
75
76 // Shutdown application
77 void Shutdown();
78
79 // Unified ROM loading
80 void LoadRom(const std::string& path);
81
82 // Accessors
84 bool IsReady() const { return controller_ != nullptr; }
85 const AppConfig& GetConfig() const { return config_; }
86
87#ifdef YAZE_WITH_GRPC
88 emu::IEmulator* GetEmulatorBackend() { return emulator_backend_.get(); }
89#endif
90
91 private:
92 Application() = default;
93 ~Application() = default;
94
95 // Non-copyable
96 Application(const Application&) = delete;
98
99 std::unique_ptr<Controller> controller_;
101
102 // Frame timing for delta_time calculation
103 std::chrono::steady_clock::time_point last_frame_time_;
104 float delta_time_ = 0.0f;
105 bool first_frame_ = true;
106 bool in_tick_ = false; // Guards Tick() against nested run loops
107
108#ifndef __EMSCRIPTEN__
109 // For non-WASM builds, we need a local queue for ROMs requested before
110 // the controller is initialized.
111 std::string pending_rom_;
112
113 // Activity file for instance discovery by Oracle Agent Manager
114 std::unique_ptr<app::ActivityFile> activity_file_;
115
116 // Update the activity status file with current state
118#endif
119
120 // Helper to run startup actions (jumps, card opening) after ROM load
121 void RunStartupActions();
122
123#ifdef YAZE_WITH_GRPC
124 std::unique_ptr<YazeGRPCServer> grpc_server_;
125 std::unique_ptr<CanvasAutomationServiceImpl> canvas_automation_service_;
126 std::unique_ptr<emu::IEmulator>
127 emulator_backend_; // Owned adapter for gRPC service
128#endif
129};
130
131} // namespace yaze
132
133#endif // YAZE_APP_APPLICATION_H_
Main application singleton managing lifecycle and global state.
Definition application.h:63
Application & operator=(const Application &)=delete
std::string pending_rom_
Application(const Application &)=delete
Controller * GetController()
Definition application.h:83
static Application & Instance()
Application()=default
std::unique_ptr< Controller > controller_
Definition application.h:99
void UpdateActivityStatus()
~Application()=default
const AppConfig & GetConfig() const
Definition application.h:85
void LoadRom(const std::string &path)
std::chrono::steady_clock::time_point last_frame_time_
bool IsReady() const
Definition application.h:84
std::unique_ptr< app::ActivityFile > activity_file_
Main controller for the application.
Definition controller.h:36
Abstract interface for emulator backends (Internal vs Mesen2)
Definition i_emulator.h:23
StartupVisibility
Tri-state toggle used for startup UI visibility controls.
AssetLoadMode
Asset loading mode for editor resources.
Configuration options for the application startup.
Definition application.h:26
std::string rom_file
Definition application.h:28
std::string test_harness_bind_address
Definition application.h:53
AssetLoadMode asset_load_mode
Definition application.h:35
std::string startup_editor
Definition application.h:38
std::string log_categories
Definition application.h:31
StartupVisibility welcome_mode
Definition application.h:32
std::vector< std::string > open_panels
Definition application.h:40
StartupVisibility sidebar_mode
Definition application.h:34
bool enable_test_harness
Definition application.h:52
std::string log_file
Definition application.h:29
std::string backend
Definition application.h:56
StartupVisibility dashboard_mode
Definition application.h:33