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 int api_port = 8080;
51 bool enable_test_harness = false;
52 std::string test_harness_bind_address = "0.0.0.0";
54 50052; // Unified gRPC server port (GUI automation + Emulator service)
55 std::string backend = "internal"; // Emulator backend: "internal" or "mesen"
56};
57
63 public:
64 static Application& Instance();
65
66 // Initialize the application with configuration
67 void Initialize(const AppConfig& config);
68
69 // Default initialization (empty config)
71
72 // Main loop tick
73 void Tick();
74
75 // Shutdown application
76 void Shutdown();
77
78 // Unified ROM loading
79 void LoadRom(const std::string& path);
80
81 // Accessors
83 bool IsReady() const { return controller_ != nullptr; }
84 const AppConfig& GetConfig() const { return config_; }
85
86#ifdef YAZE_WITH_GRPC
87 emu::IEmulator* GetEmulatorBackend() { return emulator_backend_.get(); }
88#endif
89
90 private:
91 Application() = default;
92 ~Application() = default;
93
94 // Non-copyable
95 Application(const Application&) = delete;
97
98 std::unique_ptr<Controller> controller_;
100
101 // Frame timing for delta_time calculation
102 std::chrono::steady_clock::time_point last_frame_time_;
103 float delta_time_ = 0.0f;
104 bool first_frame_ = true;
105 bool in_tick_ = false; // Guards Tick() against nested run loops
106
107#ifndef __EMSCRIPTEN__
108 // For non-WASM builds, we need a local queue for ROMs requested before
109 // the controller is initialized.
110 std::string pending_rom_;
111
112 // Activity file for instance discovery by Oracle Agent Manager
113 std::unique_ptr<app::ActivityFile> activity_file_;
114
115 // Update the activity status file with current state
117#endif
118
119 // Helper to run startup actions (jumps, card opening) after ROM load
120 void RunStartupActions();
121
122#ifdef YAZE_WITH_GRPC
123 std::unique_ptr<YazeGRPCServer> grpc_server_;
124 std::unique_ptr<CanvasAutomationServiceImpl> canvas_automation_service_;
125 std::unique_ptr<emu::IEmulator>
126 emulator_backend_; // Owned adapter for gRPC service
127#endif
128};
129
130} // namespace yaze
131
132#endif // YAZE_APP_APPLICATION_H_
Main application singleton managing lifecycle and global state.
Definition application.h:62
Application & operator=(const Application &)=delete
std::string pending_rom_
Application(const Application &)=delete
AppConfig config_
Definition application.h:99
Controller * GetController()
Definition application.h:82
static Application & Instance()
Application()=default
std::unique_ptr< Controller > controller_
Definition application.h:98
void UpdateActivityStatus()
~Application()=default
const AppConfig & GetConfig() const
Definition application.h:84
void LoadRom(const std::string &path)
std::chrono::steady_clock::time_point last_frame_time_
bool IsReady() const
Definition application.h:83
std::unique_ptr< app::ActivityFile > activity_file_
Main controller for the application.
Definition controller.h:35
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:52
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:51
std::string log_file
Definition application.h:29
std::string backend
Definition application.h:55
StartupVisibility dashboard_mode
Definition application.h:33