From 2816cf4d1245b44af873accab1262337c016a61b Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Fri, 23 May 2025 18:00:59 +0100
Subject: [PATCH 01/15] initial work in running game project from editor
---
sources/Directory.Packages.props | 4 +-
.../Stride.GameStudio.Avalonia/App.axaml.cs | 1 +
.../Stride.GameStudio.Avalonia.csproj | 1 +
.../ViewModels/MainViewModel.cs | 140 ++++++++++++++++++
.../Views/MainWindow.axaml.cs | 12 ++
5 files changed, 156 insertions(+), 2 deletions(-)
diff --git a/sources/Directory.Packages.props b/sources/Directory.Packages.props
index 9b2c9a1b6b..2ea419c968 100644
--- a/sources/Directory.Packages.props
+++ b/sources/Directory.Packages.props
@@ -118,7 +118,7 @@
11.2.7.3
-
+
@@ -147,4 +147,4 @@
-
+
\ No newline at end of file
diff --git a/sources/editor/Stride.GameStudio.Avalonia/App.axaml.cs b/sources/editor/Stride.GameStudio.Avalonia/App.axaml.cs
index ef0e4f011e..642cf7b632 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/App.axaml.cs
+++ b/sources/editor/Stride.GameStudio.Avalonia/App.axaml.cs
@@ -4,6 +4,7 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins;
+using Avalonia.Input;
using Avalonia.Markup.Xaml;
using Stride.Core.Assets.Editor.Services;
using Stride.Core.IO;
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj b/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj
index c01b1eda6e..741f19f6d3 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj
+++ b/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj
@@ -30,6 +30,7 @@
+
diff --git a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
index 9acc96e64a..3fee79bcf8 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
+++ b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
@@ -4,6 +4,7 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
using Avalonia;
+//using Microsoft.Build.Utilities;
using Stride.Core.Assets;
using Stride.Core.Assets.Editor.Components.Status;
using Stride.Core.Assets.Editor.ViewModels;
@@ -44,6 +45,7 @@ public MainViewModel(IViewModelServiceProvider serviceProvider)
OpenCommand = new AnonymousTaskCommand(serviceProvider, OnOpen);
OpenDebugWindowCommand = new AnonymousTaskCommand(serviceProvider, OnOpenDebugWindow, () => DialogService.HasMainWindow);
OpenWebPageCommand = new AnonymousTaskCommand(serviceProvider, OnOpenWebPage);
+ RunCurrentProjectCommand = new AnonymousCommand(serviceProvider, RunCurrentProject);
Status = new StatusViewModel(ServiceProvider);
Status.PushStatus("Ready");
@@ -79,6 +81,8 @@ public string Title
public ICommandBase OpenDebugWindowCommand { get; }
+ public ICommandBase RunCurrentProjectCommand { get; }
+
public async Task OpenSession(UFile? filePath, CancellationToken token = default)
{
if (filePath == null || !File.Exists(filePath))
@@ -138,6 +142,140 @@ private void OnExit()
DialogService.Exit();
}
+ private bool BuildProject(string projectPath, string framework, string workingDirectory)
+ {
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "dotnet",
+ Arguments = $"build \"{projectPath}\" --framework {framework}",
+ WorkingDirectory = workingDirectory,
+ UseShellExecute = false,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true,
+ CreateNoWindow = true,
+ }
+ };
+
+ process.OutputDataReceived += (s, e) => { if (e.Data != null) Console.WriteLine("[build] " + e.Data); };
+ process.ErrorDataReceived += (s, e) => { if (e.Data != null) Console.Error.WriteLine("[build-err] " + e.Data); };
+
+ try
+ {
+ process.Start();
+ process.BeginOutputReadLine();
+ process.BeginErrorReadLine();
+ process.WaitForExit();
+ return process.ExitCode == 0;
+ }
+ catch (Exception ex)
+ {
+ Console.Error.WriteLine("Build process failed: " + ex);
+ return false;
+ }
+ }
+
+
+
+ private async void RunCurrentProject()
+ {
+ var mainProjectPath = Session?.CurrentProject?.RootDirectory;
+ if (mainProjectPath == null) return;
+
+ var projectDir = Path.GetDirectoryName(mainProjectPath.FullPath);
+ var projectBaseName = Path.GetFileNameWithoutExtension(mainProjectPath.FullPath);
+
+ string platformSuffix, framework, platformRuntime;
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ platformSuffix = "Windows";
+ platformRuntime = "win-x64";
+ framework = "net8.0-windows";
+ }
+ else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ {
+ platformSuffix = "Linux";
+ platformRuntime = "linux-x64";
+ framework = "net8.0-linux";
+ }
+ else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+ {
+ platformSuffix = "macOS";
+ platformRuntime = "osx-x64";
+ framework = "net8.0-macos";
+ }
+ else
+ {
+ await ShowError("Unsupported OS platform");
+ return;
+ }
+
+ var platformProjectName = $"{projectBaseName}.{platformSuffix}.csproj";
+ var platformProjectPath = Path.Combine(projectDir, $"{projectBaseName}.{platformSuffix}", platformProjectName);
+ var ExecPath = Path.Combine(projectDir, "Bin", platformSuffix, "Debug", platformRuntime);
+ var dllPath = Path.Combine(ExecPath, $"{projectBaseName}.{platformSuffix}.dll");
+
+
+ if (!File.Exists(platformProjectPath))
+ {
+ await ShowError($"Platform-specific project not found: {platformProjectPath}");
+ return;
+ }
+
+ Status.PushStatus("Building project...");
+ Console.WriteLine("Building project...");
+ bool buildSuccess = await Task.Run(() => BuildProject(platformProjectPath, framework, projectDir));
+ if (!buildSuccess)
+ {
+ Status.PushStatus("Build failed.");
+ Console.WriteLine("Build failed.");
+ await ShowError("Build failed. See output for details.");
+ return;
+ }
+
+ Status.PushStatus("Running project...");
+ Console.WriteLine("Running project...");
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "dotnet",
+ Arguments = $"\"{dllPath}\"",
+ WorkingDirectory = projectDir,
+ UseShellExecute = false,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true,
+ CreateNoWindow = false,
+ }
+ };
+
+ process.OutputDataReceived += (s, e) => { if (e.Data != null) Console.WriteLine("[run] " + e.Data); };
+ process.ErrorDataReceived += (s, e) => { if (e.Data != null) Console.Error.WriteLine("[run-err] " + e.Data); };
+
+ try
+ {
+ process.Start();
+ process.BeginOutputReadLine();
+ process.BeginErrorReadLine();
+ }
+ catch (Exception ex)
+ {
+ Console.Error.WriteLine("Run process failed: " + ex);
+ await ShowError("Failed to start the game process. See output for details.");
+ }
+ }
+
+
+
+
+ private async Task ShowError(string message)
+ {
+ await ServiceProvider.Get().MessageBoxAsync(message, MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+
+
+
private async Task OnOpen(UFile? initialPath)
{
await OpenSession(initialPath);
@@ -157,6 +295,8 @@ private async Task OnOpenWebPage(string url)
}
}
+
+
private async Task OnOpenDebugWindow()
{
await DialogService.ShowDebugWindowAsync();
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Views/MainWindow.axaml.cs b/sources/editor/Stride.GameStudio.Avalonia/Views/MainWindow.axaml.cs
index 275c9a27c6..4b0bac2295 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Views/MainWindow.axaml.cs
+++ b/sources/editor/Stride.GameStudio.Avalonia/Views/MainWindow.axaml.cs
@@ -2,6 +2,7 @@
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
using Avalonia.Controls;
+using Avalonia.Input;
namespace Stride.GameStudio.Avalonia.Views;
@@ -10,6 +11,17 @@ public partial class MainWindow : Window
public MainWindow()
{
InitializeComponent();
+ this.KeyDown += MainWindow_KeyDown;
+ }
+
+ private void MainWindow_KeyDown(object? sender, KeyEventArgs e)
+ {
+ if (e.Key == Key.F5)
+ {
+ (DataContext as ViewModels.MainViewModel)?.RunCurrentProjectCommand.Execute(null);
+ e.Handled = true;
+ Console.WriteLine("Run");
+ }
}
}
From c334afaf37ea2da720d03c2c650eb18858363f9b Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Fri, 23 May 2025 18:11:23 +0100
Subject: [PATCH 02/15] Update Directory.Packages.props
---
sources/Directory.Packages.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sources/Directory.Packages.props b/sources/Directory.Packages.props
index 2ea419c968..cfb304d282 100644
--- a/sources/Directory.Packages.props
+++ b/sources/Directory.Packages.props
@@ -118,7 +118,7 @@
11.2.7.3
-
+
From ef5a20359b239f5c5a42d8e555ac4af35b9def1c Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Sat, 24 May 2025 23:29:17 +0100
Subject: [PATCH 03/15] some fixes includin going from async void to async Task
---
sources/Directory.Packages.props | 1 -
.../Views/ImageResources.axaml | 10 ++++++++++
.../ViewModels/MainViewModel.cs | 4 ++--
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/sources/Directory.Packages.props b/sources/Directory.Packages.props
index cfb304d282..039efcfc75 100644
--- a/sources/Directory.Packages.props
+++ b/sources/Directory.Packages.props
@@ -118,7 +118,6 @@
11.2.7.3
-
diff --git a/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml b/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
index c8249c12ab..0a0f6281d4 100644
--- a/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
+++ b/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
@@ -151,4 +151,14 @@
+
+
+
+
+
+ F1 M 2,2 L 14,8 L 2,14 Z
+
+
+
+
diff --git a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
index 3fee79bcf8..7aa67f6ea9 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
+++ b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
@@ -45,7 +45,7 @@ public MainViewModel(IViewModelServiceProvider serviceProvider)
OpenCommand = new AnonymousTaskCommand(serviceProvider, OnOpen);
OpenDebugWindowCommand = new AnonymousTaskCommand(serviceProvider, OnOpenDebugWindow, () => DialogService.HasMainWindow);
OpenWebPageCommand = new AnonymousTaskCommand(serviceProvider, OnOpenWebPage);
- RunCurrentProjectCommand = new AnonymousCommand(serviceProvider, RunCurrentProject);
+ RunCurrentProjectCommand = new AnonymousTaskCommand(serviceProvider, RunCurrentProject);
Status = new StatusViewModel(ServiceProvider);
Status.PushStatus("Ready");
@@ -178,7 +178,7 @@ private bool BuildProject(string projectPath, string framework, string workingDi
- private async void RunCurrentProject()
+ private async Task RunCurrentProject()
{
var mainProjectPath = Session?.CurrentProject?.RootDirectory;
if (mainProjectPath == null) return;
From 3c1013603dcccbdf2f05686c86264c9ed7d3b0ec Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Sat, 24 May 2025 23:31:09 +0100
Subject: [PATCH 04/15] Update Stride.GameStudio.Avalonia.csproj
---
.../Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj | 1 -
1 file changed, 1 deletion(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj b/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj
index 741f19f6d3..c01b1eda6e 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj
+++ b/sources/editor/Stride.GameStudio.Avalonia/Stride.GameStudio.Avalonia.csproj
@@ -30,7 +30,6 @@
-
From 6b5a2c1927c2a807d16569a31a2c3d6e3e9a4a2d Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Mon, 26 May 2025 12:06:03 +0100
Subject: [PATCH 05/15] Update Directory.Packages.props
---
sources/Directory.Packages.props | 1 +
1 file changed, 1 insertion(+)
diff --git a/sources/Directory.Packages.props b/sources/Directory.Packages.props
index 039efcfc75..cfb304d282 100644
--- a/sources/Directory.Packages.props
+++ b/sources/Directory.Packages.props
@@ -118,6 +118,7 @@
11.2.7.3
+
From 67283fc0e6d58b5127036b72dd4262a0fe68c18b Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Mon, 26 May 2025 12:09:08 +0100
Subject: [PATCH 06/15] Update ImageResources.axaml
---
.../Views/ImageResources.axaml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml b/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
index 0a0f6281d4..aac884df41 100644
--- a/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
+++ b/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
@@ -153,12 +153,12 @@
-
-
-
- F1 M 2,2 L 14,8 L 2,14 Z
-
-
-
-
+
+
+
+ F1 M 2,2 L 14,8 L 2,14 Z
+
+
+
+
From 9972240ca10e78364f36f98732ac829e4c327006 Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Wed, 28 May 2025 13:52:42 +0100
Subject: [PATCH 07/15] Wip: base changes to add start button
---
.../Stride.GameStudio.Avalonia/Views/MainView.axaml | 8 +++++++-
.../Views/MainWindow.axaml.cs | 13 -------------
2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
index 65610ff05c..86970c7c78 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
+++ b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
@@ -78,7 +78,13 @@
-
+
+
+
Date: Wed, 28 May 2025 22:53:46 +0100
Subject: [PATCH 08/15] Update MainViewModel.cs
---
.../Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
index 7aa67f6ea9..874c30539f 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
+++ b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
@@ -166,7 +166,7 @@ private bool BuildProject(string projectPath, string framework, string workingDi
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
- process.WaitForExit();
+ process.WaitForExitAsync();
return process.ExitCode == 0;
}
catch (Exception ex)
From 0a56ef0db6020265bc23cf6ff0d87ee3334c950a Mon Sep 17 00:00:00 2001
From: Nicolas Musset
Date: Mon, 23 Jun 2025 15:56:50 +0200
Subject: [PATCH 09/15] Cleanup
---
.../ViewModels/MainViewModel.cs | 68 ++++++++-----------
.../Views/MainView.axaml | 15 ++--
2 files changed, 38 insertions(+), 45 deletions(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
index 2d0514a62c..c05e340f62 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
+++ b/sources/editor/Stride.GameStudio.Avalonia/ViewModels/MainViewModel.cs
@@ -4,7 +4,6 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
using Avalonia;
-//using Microsoft.Build.Utilities;
using Stride.Core.Assets;
using Stride.Core.Assets.Editor.Components.Status;
using Stride.Core.Assets.Editor.ViewModels;
@@ -82,10 +81,10 @@ public string Title
public ICommandBase OpenWebPageCommand { get; }
- private EditorDialogService DialogService => ServiceProvider.Get();
-
public ICommandBase RunCurrentProjectCommand { get; }
+ private EditorDialogService DialogService => ServiceProvider.Get();
+
public async Task OpenSession(UFile? filePath, CancellationToken token = default)
{
if (filePath == null || !File.Exists(filePath))
@@ -145,42 +144,38 @@ private void OnExit()
DialogService.Exit();
}
- private bool BuildProject(string projectPath, string framework, string workingDirectory)
+ private static async Task BuildProject(string projectPath, string framework, string workingDirectory)
{
- var process = new Process
+ using var process = new Process();
+ process.StartInfo = new ProcessStartInfo
{
- StartInfo = new ProcessStartInfo
- {
- FileName = "dotnet",
- Arguments = $"build \"{projectPath}\" --framework {framework}",
- WorkingDirectory = workingDirectory,
- UseShellExecute = false,
- RedirectStandardOutput = true,
- RedirectStandardError = true,
- CreateNoWindow = true,
- }
+ FileName = "dotnet",
+ Arguments = $"build \"{projectPath}\" --framework {framework}",
+ WorkingDirectory = workingDirectory,
+ UseShellExecute = false,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true,
+ CreateNoWindow = true,
};
- process.OutputDataReceived += (s, e) => { if (e.Data != null) Console.WriteLine("[build] " + e.Data); };
- process.ErrorDataReceived += (s, e) => { if (e.Data != null) Console.Error.WriteLine("[build-err] " + e.Data); };
+ process.OutputDataReceived += (_, e) => { if (e.Data != null) Console.Out.WriteLine("[build] " + e.Data); };
+ process.ErrorDataReceived += (_, e) => { if (e.Data != null) Console.Error.WriteLine("[build-err] " + e.Data); };
try
{
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
- process.WaitForExitAsync();
+ await process.WaitForExitAsync();
return process.ExitCode == 0;
}
catch (Exception ex)
{
- Console.Error.WriteLine("Build process failed: " + ex);
+ await Console.Error.WriteLineAsync("Build process failed: " + ex);
return false;
}
}
-
-
private async Task RunCurrentProject()
{
var mainProjectPath = Session?.CurrentProject?.RootDirectory;
@@ -216,8 +211,8 @@ private async Task RunCurrentProject()
var platformProjectName = $"{projectBaseName}.{platformSuffix}.csproj";
var platformProjectPath = Path.Combine(projectDir, $"{projectBaseName}.{platformSuffix}", platformProjectName);
- var ExecPath = Path.Combine(projectDir, "Bin", platformSuffix, "Debug", platformRuntime);
- var dllPath = Path.Combine(ExecPath, $"{projectBaseName}.{platformSuffix}.dll");
+ var execPath = Path.Combine(projectDir, "Bin", platformSuffix, "Debug", platformRuntime);
+ var dllPath = Path.Combine(execPath, $"{projectBaseName}.{platformSuffix}.dll");
if (!File.Exists(platformProjectPath))
@@ -227,18 +222,18 @@ private async Task RunCurrentProject()
}
Status.PushStatus("Building project...");
- Console.WriteLine("Building project...");
+ await Console.Out.WriteLineAsync("Building project...");
bool buildSuccess = await Task.Run(() => BuildProject(platformProjectPath, framework, projectDir));
if (!buildSuccess)
{
Status.PushStatus("Build failed.");
- Console.WriteLine("Build failed.");
+ await Console.Out.WriteLineAsync("Build failed.");
await ShowError("Build failed. See output for details.");
return;
}
Status.PushStatus("Running project...");
- Console.WriteLine("Running project...");
+ await Console.Out.WriteLineAsync("Running project...");
var process = new Process
{
StartInfo = new ProcessStartInfo
@@ -253,8 +248,8 @@ private async Task RunCurrentProject()
}
};
- process.OutputDataReceived += (s, e) => { if (e.Data != null) Console.WriteLine("[run] " + e.Data); };
- process.ErrorDataReceived += (s, e) => { if (e.Data != null) Console.Error.WriteLine("[run-err] " + e.Data); };
+ process.OutputDataReceived += (_, e) => { if (e.Data != null) Console.Out.WriteLine("[run] " + e.Data); };
+ process.ErrorDataReceived += (_, e) => { if (e.Data != null) Console.Error.WriteLine("[run-err] " + e.Data); };
try
{
@@ -264,21 +259,13 @@ private async Task RunCurrentProject()
}
catch (Exception ex)
{
- Console.Error.WriteLine("Run process failed: " + ex);
+ await Console.Error.WriteLineAsync("Run process failed: " + ex);
await ShowError("Failed to start the game process. See output for details.");
}
- }
-
-
-
- private async Task ShowError(string message)
- {
- await ServiceProvider.Get().MessageBoxAsync(message, MessageBoxButton.OK, MessageBoxImage.Error);
+ // FIXME: should we wait for process end?
}
-
-
private async Task OnOpen(UFile? initialPath)
{
await OpenSession(initialPath);
@@ -307,4 +294,9 @@ private async Task OnOpenWebPage(string url)
await ServiceProvider.Get().MessageBoxAsync(message, MessageBoxButton.OK, MessageBoxImage.Error);
}
}
+
+ private async Task ShowError(string message)
+ {
+ await ServiceProvider.Get().MessageBoxAsync(message, MessageBoxButton.OK, MessageBoxImage.Error);
+ }
}
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
index 5c2b629581..031e1b6402 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
+++ b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
@@ -85,13 +85,14 @@
-
-
-
+
+
+
Date: Wed, 29 Oct 2025 14:05:37 +0100
Subject: [PATCH 10/15] change run button placement
---
.../Views/MainView.axaml | 487 +++++++++---------
1 file changed, 248 insertions(+), 239 deletions(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
index 031e1b6402..6af213fefe 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
+++ b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
@@ -14,247 +14,256 @@
mc:Ignorable="d" d:DesignWidth="1024" d:DesignHeight="768"
x:Class="Stride.GameStudio.Avalonia.Views.MainView"
x:DataType="gsvm:MainViewModel">
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 344bfe34525b08ebc20aa77b7031f49f671a2140 Mon Sep 17 00:00:00 2001
From: hatim ourahou <147079928+ourabigdev@users.noreply.github.com>
Date: Wed, 29 Oct 2025 14:11:04 +0100
Subject: [PATCH 11/15] Update MainView.axaml
---
sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
index 6af213fefe..606a088311 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
+++ b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
@@ -87,7 +87,7 @@
-
+
Date: Sun, 2 Nov 2025 18:58:44 +0100
Subject: [PATCH 12/15] Update MainView.axaml
---
.../Views/MainView.axaml | 494 +++++++++---------
1 file changed, 247 insertions(+), 247 deletions(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
index 606a088311..7a8cd05b43 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
+++ b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
@@ -14,256 +14,256 @@
mc:Ignorable="d" d:DesignWidth="1024" d:DesignHeight="768"
x:Class="Stride.GameStudio.Avalonia.Views.MainView"
x:DataType="gsvm:MainViewModel">
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
From 926691bbc18a9bfe1a29c786b47203eb5da86608 Mon Sep 17 00:00:00 2001
From: Nicolas Musset
Date: Sun, 2 Nov 2025 19:16:07 +0100
Subject: [PATCH 13/15] Update .editorconfig
---
.editorconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.editorconfig b/.editorconfig
index 342cc4c85f..3e5e0a6a99 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -16,7 +16,7 @@ insert_final_newline = false
# XML Code Style Rules #
##################################
-[*.{xaml,props,targets,proj,csproj,shproj,ttproj,vcxproj}]
+[*.{axaml,xaml,props,targets,proj,csproj,shproj,ttproj,vcxproj}]
# enable this once we have merged most of our branches into master
indent_style = space
indent_size = 2
From 9788a1f6f2b43ff83fdc6a995a5a14fb4734b5b2 Mon Sep 17 00:00:00 2001
From: Nicolas Musset
Date: Sun, 2 Nov 2025 19:20:58 +0100
Subject: [PATCH 14/15] Reformat MainView.axaml
---
.../Views/MainView.axaml | 492 +++++++++---------
1 file changed, 246 insertions(+), 246 deletions(-)
diff --git a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
index 7a8cd05b43..2ede894159 100644
--- a/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
+++ b/sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml
@@ -14,256 +14,256 @@
mc:Ignorable="d" d:DesignWidth="1024" d:DesignHeight="768"
x:Class="Stride.GameStudio.Avalonia.Views.MainView"
x:DataType="gsvm:MainViewModel">
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
From 58587d86883d9d7f0d6cdd7f9ffbafdb596d9eb9 Mon Sep 17 00:00:00 2001
From: Nicolas Musset
Date: Sun, 2 Nov 2025 19:23:06 +0100
Subject: [PATCH 15/15] Reformat ImageResources.axaml
---
.../Views/ImageResources.axaml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml b/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
index aac884df41..cdaff2ef38 100644
--- a/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
+++ b/sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/ImageResources.axaml
@@ -137,7 +137,7 @@
-
+
@@ -153,12 +153,12 @@
-
-
-
- F1 M 2,2 L 14,8 L 2,14 Z
-
-
-
+
+
+
+ F1 M 2,2 L 14,8 L 2,14 Z
+
+
+