From f32f9cfcc928c708b5bedaf9349ae4d11f451509 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Thu, 26 Mar 2026 14:49:36 +0100 Subject: [PATCH] paint: add run in player button --- paint/sources/args.c | 4 ++++ paint/sources/base.c | 24 +++++++++++++++++++++--- paint/sources/functions.h | 1 + paint/sources/globals.h | 1 + paint/sources/ui_menubar.c | 5 +++++ 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/paint/sources/args.c b/paint/sources/args.c index 5602b244..5dfc6a30 100644 --- a/paint/sources/args.c +++ b/paint/sources/args.c @@ -18,6 +18,9 @@ void args_parse() { else if (string_equals(current_arg, "--background")) { args_background = true; } + else if (string_equals(current_arg, "--player")) { + args_player = true; + } else if (path_is_texture(current_arg)) { gc_unroot(args_asset_path); args_asset_path = string_copy(current_arg); @@ -70,6 +73,7 @@ void args_parse() { printf(" --export-mesh Export mesh to path\n"); printf(" --export-material Export material to path\n"); printf(" --reload-mesh Reimport mesh on startup\n"); + printf(" --player Run in player mode\n"); printf(" --help Show this help message\n"); exit(1); } diff --git a/paint/sources/base.c b/paint/sources/base.c index d496eb03..2d5b645a 100644 --- a/paint/sources/base.c +++ b/paint/sources/base.c @@ -129,6 +129,10 @@ void base_init() { gc_unroot(project_filepath); project_filepath = start_arm; gc_root(project_filepath); + args_player = true; + } + + if (args_player) { sys_notify_on_next_frame(&base_init_on_start_arm, NULL); context_raw->tool = TOOL_TYPE_GIZMO; make_material_parse_paint_material(true); @@ -1009,9 +1013,12 @@ void ui_base_update(void *_) { if (keyboard_started(any_map_get(config_keymap, "view_distract_free")) || (keyboard_started("escape") && !ui_base_show && !ui_box_show)) { ui_base_toggle_distract_free(); } - if (keyboard_started("f5") && config_raw->workspace != WORKSPACE_PLAYER) { - config_raw->workspace = WORKSPACE_PLAYER; - base_update_workspace(); + // if (config_raw->experimental && keyboard_started("f5") && config_raw->workspace != WORKSPACE_PLAYER) { + // config_raw->workspace = WORKSPACE_PLAYER; + // base_update_workspace(); + // } + if (config_raw->experimental && keyboard_started("f5")) { + base_run_in_player(); } #ifdef IRON_LINUX @@ -2201,3 +2208,14 @@ void base_update_workflow() { } } } + +void base_run_in_player() { + if (string_equals(project_filepath, "")) { + console_error(tr("Save project first")); + return; + } + export_arm_run_project(); + char *bin = iron_get_arg(0); + iron_sys_command(string("%s %s --player", bin, project_filepath)); + // iron_exec_async() +} diff --git a/paint/sources/functions.h b/paint/sources/functions.h index 7c6d3490..6899dfc7 100644 --- a/paint/sources/functions.h +++ b/paint/sources/functions.h @@ -180,6 +180,7 @@ void base_resize(); void base_update(void *_); void base_update_workspace(); void base_update_workflow(); +void base_run_in_player(); void base_material_dropped(); void base_handle_drop_paths(); rect_t *base_get_drag_background(); diff --git a/paint/sources/globals.h b/paint/sources/globals.h index ac13a91f..9984f265 100644 --- a/paint/sources/globals.h +++ b/paint/sources/globals.h @@ -371,6 +371,7 @@ bool parser_material_is_frag = true; bool args_use = false; char *args_asset_path = ""; bool args_background = false; +bool args_player = false; bool args_export_textures = false; char *args_export_textures_type = ""; char *args_export_textures_preset = ""; diff --git a/paint/sources/ui_menubar.c b/paint/sources/ui_menubar.c index 9081ad40..ddded2fe 100644 --- a/paint/sources/ui_menubar.c +++ b/paint/sources/ui_menubar.c @@ -589,6 +589,11 @@ void ui_menubar_draw_category_items() { ui->changed = false; // Close menu } + if (config_raw->experimental && ui_menu_button(tr("Run in Player"), "f5", ICON_PLAY)) { + base_run_in_player(); + ui->changed = false; // Close menu + } + context_update_envmap(); if (ui->changed) {