From f41eda6f62a13357f1168bd13d7091efd15acb17 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Mon, 19 Jan 2026 11:16:01 +0100 Subject: [PATCH] add simulator mode to desktop designer for testing apps - Add --simulator flag to launch home screen showing discovered apps - Create app discovery system to scan test-apps/ directory - Build simulator home screen with dark phone-like UI - Add Lua API: simulator.launchApp, simulator.goHome, simulator.getApps - ESC key returns to home when inside an app - Apps displayed with icons in grid layout Co-Authored-By: Claude Opus 4.5 --- designer/CMakeLists.txt | 8 + designer/assets/simulator/home.rcss | 154 ++++++++++++ designer/assets/simulator/home.rml | 36 +++ designer/assets/simulator/simulator.lua | 158 ++++++++++++ designer/main.cpp | 319 +++++++++++++++++++++++- designer/src/app_discovery.cpp | 91 +++++++ designer/src/app_discovery.h | 32 +++ 7 files changed, 795 insertions(+), 3 deletions(-) create mode 100644 designer/assets/simulator/home.rcss create mode 100644 designer/assets/simulator/home.rml create mode 100644 designer/assets/simulator/simulator.lua create mode 100644 designer/src/app_discovery.cpp create mode 100644 designer/src/app_discovery.h diff --git a/designer/CMakeLists.txt b/designer/CMakeLists.txt index 011635c..2b06a6b 100644 --- a/designer/CMakeLists.txt +++ b/designer/CMakeLists.txt @@ -71,6 +71,7 @@ add_executable(mosis-designer src/hot_reload.cpp src/platform_singleton.cpp src/desktop_sandbox.cpp + src/app_discovery.cpp src/testing/action_recorder.cpp src/testing/action_player.cpp src/testing/ui_inspector.cpp @@ -111,3 +112,10 @@ add_custom_command(TARGET mosis-designer POST_BUILD ${CMAKE_CURRENT_SOURCE_DIR}/../src/main/assets $/assets ) + +# Copy simulator assets +add_custom_command(TARGET mosis-designer POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR}/assets/simulator + $/simulator +) diff --git a/designer/assets/simulator/home.rcss b/designer/assets/simulator/home.rcss new file mode 100644 index 0000000..291867a --- /dev/null +++ b/designer/assets/simulator/home.rcss @@ -0,0 +1,154 @@ +/* Simulator Home Screen Styles */ + +body { + font-family: LatoLatin; + background-color: #1a1a2e; + color: #ffffff; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; +} + +/* Status Bar */ +.status-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + height: 24dp; + padding: 0 12dp; + background-color: #0f0f1a; + font-size: 12dp; + color: #cccccc; +} + +.status-time { + font-weight: bold; +} + +.status-icons { + display: flex; + flex-direction: row; + gap: 8dp; +} + +.status-wifi, .status-battery { + font-size: 10dp; + color: #4ade80; +} + +/* Home Content */ +.home-content { + flex: 1; + padding: 16dp; + overflow: auto; +} + +.home-header { + text-align: center; + margin-bottom: 24dp; +} + +.home-header h1 { + font-size: 24dp; + font-weight: bold; + margin: 0 0 4dp 0; + color: #ffffff; +} + +.home-header .subtitle { + font-size: 14dp; + color: #888888; + margin: 0; +} + +/* App Grid */ +.app-grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 16dp; + justify-content: center; +} + +.no-apps { + text-align: center; + color: #666666; + padding: 32dp; +} + +.no-apps p { + margin: 8dp 0; +} + +.no-apps .hint { + font-size: 12dp; + color: #555555; +} + +/* App Icon */ +.app-icon { + display: flex; + flex-direction: column; + align-items: center; + width: 80dp; + cursor: pointer; +} + +.app-icon:hover .app-icon-image { + transform: scale(1.1); + background-color: #3d3d5c; +} + +.app-icon-image { + width: 56dp; + height: 56dp; + border-radius: 12dp; + background-color: #2d2d44; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + transition: transform 0.1s, background-color 0.1s; +} + +.app-icon-image img { + width: 48dp; + height: 48dp; +} + +.app-icon-placeholder { + font-size: 24dp; + color: #888888; +} + +.app-icon-label { + font-size: 11dp; + color: #cccccc; + margin-top: 6dp; + text-align: center; + max-width: 80dp; + overflow: hidden; + white-space: nowrap; +} + +/* Navigation Bar */ +.nav-bar { + display: flex; + flex-direction: row; + justify-content: center; + gap: 24dp; + height: 40dp; + background-color: #0f0f1a; + align-items: center; + border-top-width: 1dp; + border-top-color: #2d2d44; +} + +.nav-hint { + font-size: 11dp; + color: #666666; +} diff --git a/designer/assets/simulator/home.rml b/designer/assets/simulator/home.rml new file mode 100644 index 0000000..1d97c6f --- /dev/null +++ b/designer/assets/simulator/home.rml @@ -0,0 +1,36 @@ + + + Mosis Simulator + +