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