mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-09-13 05:25:06 +00:00
Compare commits
9 Commits
experiment
...
Canary-1.3
Author | SHA1 | Date | |
---|---|---|---|
|
bc6be4e088 | ||
|
64a6494d90 | ||
|
ddb8afa6f4 | ||
|
c2f4118b1f | ||
|
47aa2c1513 | ||
|
f3a2f59683 | ||
|
51bcb9e128 | ||
|
dce5f0eb55 | ||
|
f2eb3749f9 |
@@ -55,7 +55,6 @@
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.9" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.9" />
|
||||
<PackageVersion Include="SPB" Version="0.0.4-build32" />
|
||||
<PackageVersion Include="Starscript.Net" Version="1.0.36" />
|
||||
<PackageVersion Include="System.IO.Hashing" Version="9.0.2" />
|
||||
<PackageVersion Include="System.Management" Version="9.0.2" />
|
||||
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -188,6 +188,8 @@
|
||||
01003DD00BFEE000,"Airheart - Tales of broken Wings",,playable,2021-02-26 15:20:27
|
||||
01007F100DE52000,"Akane",nvdec,playable,2022-07-21 00:12:18
|
||||
01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec,ingame,2020-12-14 22:33:12
|
||||
01009E8012976000,"AKIBA'S TRIP: Hellbound & Debriefed",,playable,2025-07-30 23:22:47
|
||||
0100D74019A0E000,"AKIBA'S TRIP: Undead & Undressed Director's Cut",,playable,2025-07-31 13:58:42
|
||||
010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",,playable,2021-02-22 14:39:35
|
||||
0100D4C00EE0C000,"Akuarium",slow,playable,2020-12-12 23:43:36
|
||||
010026E00FEBE000,"Akuto: Showdown",,playable,2020-08-04 19:43:27
|
||||
@@ -1095,6 +1097,7 @@
|
||||
0100F9600E746000,"ESP Ra.De. Psi",audio;slow,ingame,2024-03-07 15:05:08
|
||||
010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;crash;Needs More Attention,ingame,2024-04-29 05:34:14
|
||||
01004F9012FD8000,"Estranged: The Departure",nvdec;UE4,playable,2022-10-24 10:37:58
|
||||
010018f01e0a0000,"Eternights",,playable,2025-07-30 12:10:24
|
||||
0100CB900B498000,"Eternum Ex",,playable,2021-01-13 20:28:32
|
||||
010092501EB2C000,"Europa (Demo)",gpu;crash;UE4,ingame,2024-04-23 10:47:12
|
||||
01007BE0160D6000,"EVE ghost enemies",gpu,ingame,2023-01-14 03:13:30
|
||||
@@ -1240,6 +1243,8 @@
|
||||
010003F00BD48000,"Friday the 13th: Killer Puzzle",,playable,2021-01-28 01:33:38
|
||||
010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",nvdec;online-broken;UE4,playable,2022-09-06 17:33:27
|
||||
0100F200178F4000,"FRONT MISSION 1st: Remake",,playable,2023-06-09 07:44:24
|
||||
0100c4e018a24000,"FRONT MISSION 2: Remake",,playable,2025-07-30 12:11:23
|
||||
01007E6019872000,"FRONT MISSION 3: Remake",,playable,2025-07-30 12:12:02
|
||||
0100861012474000,"Frontline Zed",,playable,2020-10-03 12:55:59
|
||||
0100B5300B49A000,"Frost",,playable,2022-07-27 12:00:36
|
||||
010038A007AA4000,"FruitFall Crush",,playable,2020-10-20 11:33:33
|
||||
@@ -1518,6 +1523,7 @@
|
||||
010095C016C14000,"Iridium",,playable,2022-08-05 23:19:53
|
||||
0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",,playable,2022-12-05 13:11:15
|
||||
0100945012168000,"Iris.Fall",nvdec,playable,2022-10-18 13:40:22
|
||||
010059801B736000,"IronFall: Invasion",,playable,2025-07-30 11:42:30
|
||||
01005270118D6000,"Iron Wings",slow,ingame,2022-08-07 08:32:57
|
||||
01004DB003E6A000,"IRONCAST",,playable,2021-01-13 13:54:29
|
||||
0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",,playable,2021-06-04 20:12:37
|
||||
@@ -2306,6 +2312,7 @@
|
||||
010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow,playable,2020-12-16 13:38:19
|
||||
010018300C83A000,"Professor Lupo and his Horrible Pets",,playable,2020-06-12 00:08:45
|
||||
0100D1F0132F6000,"Professor Lupo: Ocean",,playable,2021-04-14 16:33:33
|
||||
0100c3a017834000,"Prodeus",,playable,2025-07-30 12:07:52
|
||||
0100BBD00976C000,"Project Highrise: Architect's Edition",,playable,2022-08-10 17:19:12
|
||||
0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43
|
||||
01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27
|
||||
@@ -2768,7 +2775,7 @@
|
||||
0100E6B0115FC000,"Star99",online,menus,2021-11-26 14:18:51
|
||||
01002100137BA000,"Stardash",,playable,2021-01-21 16:31:19
|
||||
0100E65002BB8000,"Stardew Valley",online-broken;ldn-untested,playable,2024-02-14 03:11:19
|
||||
01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;crash;Needs Update,nothing,2024-05-05 17:25:11
|
||||
01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",,playable,2025-07-30 12:09:37
|
||||
010098E010FDA000,"Starlit Adventures Golden Stars",,playable,2020-11-21 12:14:43
|
||||
01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",,playable,2021-01-12 15:52:55
|
||||
010000700A572000,"State of Anarchy: Master of Mayhem",nvdec,playable,2021-01-12 19:00:05
|
||||
@@ -2976,6 +2983,7 @@
|
||||
0100C2E0129A6000,"The Executioner",nvdec,playable,2021-01-23 00:31:28
|
||||
01006050114D4000,"The Experiment: Escape Room",gpu,ingame,2022-09-30 13:20:35
|
||||
0100B5900DFB2000,"The Eyes of Ara",,playable,2022-09-16 14:44:06
|
||||
0100BA5013E52000,"The Falconeer: Warrior Edition",,playable,2025-07-30 12:04:50
|
||||
01002DD00AF9E000,"The Fall",gpu,ingame,2020-05-31 23:31:16
|
||||
01003E5002320000,"The Fall Part 2: Unbound",,playable,2021-11-06 02:18:08
|
||||
0100CDC00789E000,"The Final Station",nvdec,playable,2022-08-22 15:54:39
|
||||
@@ -3198,6 +3206,7 @@
|
||||
010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;nvdec;online-broken,ingame,2022-09-30 22:13:05
|
||||
0100752011628000,"TTV2",,playable,2020-11-27 13:21:36
|
||||
0100AFE00452E000,"Tumblestone",,playable,2021-01-07 17:49:20
|
||||
0100D1A01D7BA000,"Turbo Overkill",,playable,2025-07-30 12:08:57
|
||||
010085500D5F6000,"Turok",gpu,ingame,2021-06-04 13:16:24
|
||||
0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;vulkan,ingame,2022-09-12 17:50:05
|
||||
010004B0130C8000,"Turrican Flashback",audout,playable,2021-08-30 10:07:56
|
||||
@@ -3221,6 +3230,8 @@
|
||||
0100592005164000,"UNBOX: Newbie's Adventure",UE4,playable,2022-08-29 13:12:56
|
||||
01002D900C5E4000,"Uncanny Valley",nvdec,playable,2021-06-04 13:28:45
|
||||
010076F011F54000,"Undead & Beyond",nvdec,playable,2022-10-04 09:11:18
|
||||
01009B700D0B8000,"Undead Horde",,playable,2025-07-30 12:05:05
|
||||
0100FC301A878000,"Undead Horde 2: Necropolis",,playable,2025-07-30 12:06:07
|
||||
01008F3013E4E000,"Under Leaves",,playable,2021-05-22 18:13:58
|
||||
010080B00AD66000,"Undertale",,playable,2022-08-31 17:31:46
|
||||
01008F80049C6000,"Unepic",,playable,2024-01-15 17:03:00
|
||||
|
|
@@ -73,7 +73,6 @@
|
||||
<PackageReference Include="Silk.NET.Vulkan.Extensions.EXT" />
|
||||
<PackageReference Include="Silk.NET.Vulkan.Extensions.KHR" />
|
||||
<PackageReference Include="SPB" />
|
||||
<PackageReference Include="Starscript.Net"/>
|
||||
<PackageReference Include="SharpZipLib" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@@ -14,7 +14,6 @@ using LibHac.Tools.FsSystem.NcaUtils;
|
||||
using Ryujinx.Ava.Common.Models;
|
||||
using Ryujinx.Ava.Systems.Configuration;
|
||||
using Ryujinx.Ava.Systems.Configuration.System;
|
||||
using Ryujinx.Ava.Systems.Starscript;
|
||||
using Ryujinx.Ava.Utilities;
|
||||
using Ryujinx.Common;
|
||||
using Ryujinx.Common.Configuration;
|
||||
@@ -26,7 +25,6 @@ using Ryujinx.HLE.HOS.SystemState;
|
||||
using Ryujinx.HLE.Loaders.Npdm;
|
||||
using Ryujinx.HLE.Loaders.Processes.Extensions;
|
||||
using Ryujinx.HLE.Utilities;
|
||||
using Starscript;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
@@ -43,7 +41,7 @@ using TimeSpan = System.TimeSpan;
|
||||
|
||||
namespace Ryujinx.Ava.Systems.AppLibrary
|
||||
{
|
||||
public class ApplicationLibrary : IStarscriptObject
|
||||
public class ApplicationLibrary
|
||||
{
|
||||
public Language DesiredLanguage { get; set; }
|
||||
public event EventHandler<ApplicationCountUpdatedEventArgs> ApplicationCountUpdated;
|
||||
@@ -1613,14 +1611,5 @@ namespace Ryujinx.Ava.Systems.AppLibrary
|
||||
ApplicationData newApplication = newApplications.First(it => it.IdBase == appIdBase);
|
||||
_applications.AddOrUpdate(newApplication);
|
||||
}
|
||||
|
||||
private ValueMap _starscriptMap;
|
||||
|
||||
public ValueMap ToStarscript()
|
||||
{
|
||||
_starscriptMap ??= StarscriptHelper.Wrap(this);
|
||||
|
||||
return _starscriptMap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,29 +0,0 @@
|
||||
using Ryujinx.Ava.Systems.AppLibrary;
|
||||
using Ryujinx.Common;
|
||||
using Starscript;
|
||||
|
||||
namespace Ryujinx.Ava.Systems.Starscript
|
||||
{
|
||||
public static class RyujinxStarscript
|
||||
{
|
||||
public static readonly StarscriptHypervisor Hypervisor = StarscriptHypervisor.Create().WithStandardLibrary(true);
|
||||
|
||||
static RyujinxStarscript()
|
||||
{
|
||||
Hypervisor.Set("ryujinx.releaseChannel",
|
||||
ReleaseInformation.IsCanaryBuild
|
||||
? "Canary"
|
||||
: ReleaseInformation.IsReleaseBuild
|
||||
? "Stable"
|
||||
: "Custom");
|
||||
Hypervisor.Set("ryujinx.version", Program.Version);
|
||||
Hypervisor.Set("appLibrary", RyujinxApp.MainWindow.ApplicationLibrary);
|
||||
Hypervisor.Set("currentApplication", () =>
|
||||
RyujinxApp.MainWindow.ApplicationLibrary.FindApplication(
|
||||
RyujinxApp.MainWindow.ViewModel.AppHost?.ApplicationId ?? 0,
|
||||
out ApplicationData appData)
|
||||
? StarscriptHelper.Wrap(appData)
|
||||
: Value.Null);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,68 +0,0 @@
|
||||
using Gommon;
|
||||
using Ryujinx.Ava.Systems.AppLibrary;
|
||||
using Starscript;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.Ava.Systems.Starscript
|
||||
{
|
||||
public static class StarscriptHelper
|
||||
{
|
||||
public static ValueMap Wrap(ApplicationLibrary appLib)
|
||||
{
|
||||
ValueMap lMap = new();
|
||||
lMap.Set("appCount", () => appLib.Applications.Count);
|
||||
lMap.Set("dlcCount", () => appLib.DownloadableContents.Count);
|
||||
lMap.Set("updateCount", () => appLib.TitleUpdates.Count);
|
||||
lMap.Set("has", ctx =>
|
||||
{
|
||||
ulong titleId;
|
||||
|
||||
try
|
||||
{
|
||||
titleId = ctx.Constrain(Constraint.ExactlyOneArgument).NextString(1).ToULong();
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
throw ctx.Error(
|
||||
$"Invalid input to {ctx.FormattedName}; input must be a hexadecimal number in a string.");
|
||||
}
|
||||
|
||||
return appLib.FindApplication(titleId, out _);
|
||||
});
|
||||
lMap.Set("get", ctx =>
|
||||
{
|
||||
ulong titleId;
|
||||
|
||||
try
|
||||
{
|
||||
titleId = ctx.Constrain(Constraint.ExactlyOneArgument).NextString(1).ToULong();
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
throw ctx.Error(
|
||||
$"Invalid input to {ctx.FormattedName}; input must be a hexadecimal number in a string.");
|
||||
}
|
||||
|
||||
return appLib.FindApplication(titleId,
|
||||
out ApplicationData applicationData)
|
||||
? Wrap(applicationData)
|
||||
: null;
|
||||
});
|
||||
return lMap;
|
||||
}
|
||||
|
||||
public static ValueMap Wrap(ApplicationData appData)
|
||||
{
|
||||
ValueMap aMap = new();
|
||||
aMap.Set("name", appData.Name);
|
||||
aMap.Set("version", appData.Version);
|
||||
aMap.Set("developer", appData.Developer);
|
||||
aMap.Set("fileExtension", appData.FileExtension);
|
||||
aMap.Set("fileSize", appData.FileSizeString);
|
||||
aMap.Set("hasLdnGames", appData.HasLdnGames);
|
||||
aMap.Set("timePlayed", appData.TimePlayedString);
|
||||
aMap.Set("isFavorite", appData.Favorite);
|
||||
return aMap;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,21 +0,0 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="using:Ryujinx.Ava.Systems.Starscript"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="Ryujinx.Ava.Systems.Starscript.StarscriptTextBox"
|
||||
x:DataType="local:StarscriptTextBoxViewModel">
|
||||
<StackPanel Spacing="10">
|
||||
<TextBlock Text="{Binding ErrorMessage}" IsVisible="{Binding HasError}"/>
|
||||
<TextBlock Text="{Binding CurrentScriptResult}" IsVisible="{Binding !HasError}"/>
|
||||
<AutoCompleteBox Name="InputBox"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
FilterMode="Custom"
|
||||
MinimumPrefixLength="0"
|
||||
MaxDropDownHeight="400">
|
||||
</AutoCompleteBox>
|
||||
</StackPanel>
|
||||
</UserControl>
|
||||
|
@@ -1,87 +0,0 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Styling;
|
||||
using FluentAvalonia.UI.Controls;
|
||||
using Humanizer;
|
||||
using Ryujinx.Ava.Common.Locale;
|
||||
using Ryujinx.Ava.UI.Controls;
|
||||
using Ryujinx.Ava.UI.Helpers;
|
||||
using Starscript;
|
||||
using Starscript.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ryujinx.Ava.Systems.Starscript
|
||||
{
|
||||
public partial class StarscriptTextBox : RyujinxControl<StarscriptTextBoxViewModel>
|
||||
{
|
||||
public IReadOnlyList<string> CurrentSuggestions => ViewModel.CurrentSuggestions;
|
||||
|
||||
public ParserResult CurrentScriptSource => ViewModel.CurrentScriptSource;
|
||||
public Exception Exception => ViewModel.Exception;
|
||||
public Script CurrentScript => ViewModel.CurrentScript;
|
||||
public StringSegment CurrentScriptResult => ViewModel.CurrentScriptResult;
|
||||
|
||||
public StarscriptTextBox()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
InputBox.AsyncPopulator = GetSuggestionsAsync;
|
||||
InputBox.MinimumPopulateDelay = 0.Seconds();
|
||||
InputBox.TextFilter = (_, _) => true;
|
||||
InputBox.TextSelector = (text, suggestion) =>
|
||||
{
|
||||
if (text is not null && suggestion is null)
|
||||
return text;
|
||||
if (text is null && suggestion is not null)
|
||||
return suggestion;
|
||||
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
|
||||
if (text is null && suggestion is null)
|
||||
return string.Empty;
|
||||
|
||||
var sb = new StringBuilder(text.Length + suggestion.Length + 1);
|
||||
sb.Append(text);
|
||||
|
||||
for (int i = 0; i < suggestion.Length - 1; i++)
|
||||
{
|
||||
if (text.EndsWith(suggestion[..(suggestion.Length - i - 1)]))
|
||||
{
|
||||
suggestion = suggestion[(suggestion.Length - i - 1)..];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sb.Append(suggestion);
|
||||
|
||||
return sb.ToString();
|
||||
};
|
||||
|
||||
Style textStyle = new(x => x.OfType<AutoCompleteBox>().Descendant().OfType<TextBlock>());
|
||||
textStyle.Setters.Add(new Setter(MarginProperty, new Thickness(0, 0)));
|
||||
|
||||
Styles.Add(textStyle);
|
||||
}
|
||||
|
||||
private Task<IEnumerable<object>> GetSuggestionsAsync(string input, CancellationToken token)
|
||||
=> Task.FromResult(ViewModel.GetSuggestions(input, token));
|
||||
|
||||
public static StarscriptTextBox Create(StarscriptHypervisor hv)
|
||||
=> new() { ViewModel = new StarscriptTextBoxViewModel(hv) };
|
||||
|
||||
public static async Task Show()
|
||||
{
|
||||
ContentDialog contentDialog = new()
|
||||
{
|
||||
PrimaryButtonText = string.Empty,
|
||||
SecondaryButtonText = string.Empty,
|
||||
CloseButtonText = LocaleManager.Instance[LocaleKeys.UserProfilesClose],
|
||||
Content = new StarscriptTextBox { ViewModel = new() }
|
||||
};
|
||||
|
||||
await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles());
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,126 +0,0 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Ryujinx.Ava.UI.ViewModels;
|
||||
using Starscript;
|
||||
using Starscript.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
namespace Ryujinx.Ava.Systems.Starscript
|
||||
{
|
||||
public partial class StarscriptTextBoxViewModel : BaseModel
|
||||
{
|
||||
private readonly StarscriptHypervisor _hv;
|
||||
|
||||
public StarscriptTextBoxViewModel(StarscriptHypervisor hv = null)
|
||||
{
|
||||
_hv = hv ?? RyujinxStarscript.Hypervisor;
|
||||
}
|
||||
|
||||
public ObservableCollection<string> CurrentSuggestions { get; } = [];
|
||||
|
||||
[ObservableProperty] private bool _hasError;
|
||||
[ObservableProperty] private StringSegment _currentScriptResult;
|
||||
[ObservableProperty] private string _errorMessage;
|
||||
private Exception _exception;
|
||||
private ParserResult _currentScriptSource;
|
||||
private Script _currentScript;
|
||||
|
||||
public Exception Exception
|
||||
{
|
||||
get => _exception;
|
||||
set
|
||||
{
|
||||
ErrorMessage = (_exception = value) switch
|
||||
{
|
||||
ParseException pe => pe.Error.ToString(),
|
||||
StarscriptException se => se.Message,
|
||||
_ => string.Empty
|
||||
};
|
||||
|
||||
HasError = value is not null;
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ParserResult CurrentScriptSource
|
||||
{
|
||||
get => _currentScriptSource;
|
||||
set
|
||||
{
|
||||
_currentScriptSource = value;
|
||||
|
||||
if (value is null)
|
||||
{
|
||||
CurrentScript = null;
|
||||
CurrentScriptResult = null;
|
||||
Exception = null;
|
||||
return;
|
||||
}
|
||||
|
||||
CurrentScript = Compiler.SingleCompile(value);
|
||||
Exception = null;
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public Script CurrentScript
|
||||
{
|
||||
get => _currentScript;
|
||||
private set
|
||||
{
|
||||
try
|
||||
{
|
||||
CurrentScriptResult = value?.Execute(_hv)!;
|
||||
_currentScript = value;
|
||||
Exception = null;
|
||||
}
|
||||
catch (StarscriptException se)
|
||||
{
|
||||
_currentScript = null;
|
||||
CurrentScriptResult = null;
|
||||
Exception = se;
|
||||
}
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public void ReExecuteScript()
|
||||
{
|
||||
if (_currentScript is null) return;
|
||||
|
||||
try
|
||||
{
|
||||
CurrentScriptResult = _currentScript.Execute(_hv)!;
|
||||
}
|
||||
catch (StarscriptException se)
|
||||
{
|
||||
CurrentScriptResult = null;
|
||||
Exception = se;
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<object> GetSuggestions(string input, CancellationToken token)
|
||||
{
|
||||
CurrentSuggestions.Clear();
|
||||
|
||||
CurrentScriptSource = _hv.ParseAndGetCompletions(input, input.Length, CompletionCallback, token);
|
||||
|
||||
if (CurrentScriptSource.HasErrors)
|
||||
{
|
||||
Exception = new ParseException(CurrentScriptSource.Errors.First());
|
||||
}
|
||||
|
||||
OnPropertyChanged(nameof(CurrentSuggestions));
|
||||
|
||||
return CurrentSuggestions;
|
||||
}
|
||||
|
||||
private void CompletionCallback(string result, bool isFunction) => CurrentSuggestions.Add(isFunction ? $"{result}(" : result);
|
||||
}
|
||||
}
|
@@ -14,8 +14,7 @@
|
||||
Command="{Binding ToggleFavorite}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuToggleFavorite}"
|
||||
Icon="{ext:Icon fa-solid fa-star}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuToggleFavoriteToolTip}" />
|
||||
Icon="{ext:Icon fa-solid fa-star}" />
|
||||
<MenuItem
|
||||
Command="{Binding CreateApplicationShortcut}"
|
||||
CommandParameter="{Binding}"
|
||||
@@ -47,43 +46,37 @@
|
||||
Command="{Binding OpenApplicationData}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuShowGameData}"
|
||||
Icon="{ext:Icon fa-solid fa-chart-line}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuShowGameDataToolTip}"/>
|
||||
Icon="{ext:Icon fa-solid fa-chart-line}" />
|
||||
<Separator />
|
||||
<MenuItem
|
||||
Command="{Binding OpenUserSaveDirectory}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuOpenUserSaveDirectory}"
|
||||
Icon="{ext:Icon fa-solid fa-sd-card}"
|
||||
IsEnabled="{Binding OpenUserSaveDirectoryEnabled}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuOpenUserSaveDirectoryToolTip}" />
|
||||
IsEnabled="{Binding OpenUserSaveDirectoryEnabled}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenDeviceSaveDirectory}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuOpenDeviceSaveDirectory}"
|
||||
Icon="{ext:Icon fa-solid fa-hard-drive}"
|
||||
IsEnabled="{Binding OpenDeviceSaveDirectoryEnabled}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuOpenDeviceSaveDirectoryToolTip}" />
|
||||
IsEnabled="{Binding OpenDeviceSaveDirectoryEnabled}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenBcatSaveDirectory}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuOpenBcatSaveDirectory}"
|
||||
Icon="{ext:Icon fa-solid fa-box-archive}"
|
||||
IsEnabled="{Binding OpenBcatSaveDirectoryEnabled}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuOpenBcatSaveDirectoryToolTip}" />
|
||||
IsEnabled="{Binding OpenBcatSaveDirectoryEnabled}" />
|
||||
<Separator />
|
||||
<MenuItem
|
||||
Command="{Binding OpenTitleUpdateManager}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuManageTitleUpdates}"
|
||||
Icon="{ext:Icon fa-solid fa-code-compare}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuManageTitleUpdatesToolTip}" />
|
||||
Icon="{ext:Icon fa-solid fa-code-compare}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenDownloadableContentManager}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuManageDlc}"
|
||||
Icon="{ext:Icon fa-solid fa-download}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuManageDlcToolTip}" />
|
||||
Icon="{ext:Icon fa-solid fa-download}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenCheatManager}"
|
||||
CommandParameter="{Binding}"
|
||||
@@ -101,8 +94,7 @@
|
||||
Command="{Binding OpenModsDirectory}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuOpenModsDirectory}"
|
||||
Icon="{ext:Icon fa-solid fa-folder}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuOpenModsDirectoryToolTip}" />
|
||||
Icon="{ext:Icon fa-solid fa-folder}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenSdModsDirectory}"
|
||||
CommandParameter="{Binding}"
|
||||
@@ -140,14 +132,12 @@
|
||||
Command="{Binding OpenPtcDirectory}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuCacheManagementOpenPptcDirectory}"
|
||||
Icon="{ext:Icon fa-solid fa-folder}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementOpenPptcDirectoryToolTip}" />
|
||||
Icon="{ext:Icon fa-solid fa-folder}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenShaderCacheDirectory}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuCacheManagementOpenShaderCacheDirectory}"
|
||||
Icon="{ext:Icon fa-solid fa-folder}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementOpenShaderCacheDirectoryToolTip}" />
|
||||
Icon="{ext:Icon fa-solid fa-folder}" />
|
||||
</MenuItem>
|
||||
<MenuItem Header="{ext:Locale GameListContextMenuExtractData}" Icon="{ext:Icon fa-solid fa-file-export}">
|
||||
<MenuItem
|
||||
|
@@ -63,18 +63,15 @@
|
||||
<MenuItem
|
||||
Command="{Binding OpenRyujinxFolder}"
|
||||
Header="{ext:Locale MenuBarFileOpenEmuFolder}"
|
||||
Icon="{ext:Icon fa-solid fa-folder-closed}"
|
||||
ToolTip.Tip="{ext:Locale OpenRyujinxFolderTooltip}" />
|
||||
Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenScreenshotsFolder}"
|
||||
Header="{ext:Locale MenuBarFileOpenScreenshotsFolder}"
|
||||
Icon="{ext:Icon fa-solid fa-desktop}"
|
||||
ToolTip.Tip="{ext:Locale OpenScreenshotFolderTooltip}"/>
|
||||
Icon="{ext:Icon fa-solid fa-desktop}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenLogsFolder}"
|
||||
Header="{ext:Locale MenuBarFileOpenLogsFolder}"
|
||||
Icon="{ext:Icon fa-solid fa-file-lines}"
|
||||
ToolTip.Tip="{ext:Locale OpenRyujinxLogsTooltip}" />
|
||||
Icon="{ext:Icon fa-solid fa-file-lines}" />
|
||||
<Separator />
|
||||
<MenuItem
|
||||
Name="CloseRyujinxMenuItem"
|
||||
@@ -149,7 +146,6 @@
|
||||
Padding="0"
|
||||
Header="{ext:Locale MenuBarOptionsSettings}"
|
||||
Icon="{ext:Icon fa-solid fa-gear}"
|
||||
ToolTip.Tip="{ext:Locale OpenSettingsTooltip}"
|
||||
Classes="withCheckbox">
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
@@ -158,7 +154,6 @@
|
||||
Header="{ext:Locale MenuBarOptionsManageUserProfiles}"
|
||||
Icon="{ext:Icon fa-solid fa-user}"
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||
ToolTip.Tip="{ext:Locale OpenProfileManagerTooltip}"
|
||||
Classes="withCheckbox">
|
||||
</MenuItem>
|
||||
</MenuItem>
|
||||
@@ -253,10 +248,6 @@
|
||||
Header="{ext:Locale MenuBarHelpAbout}"
|
||||
Icon="{ext:Icon fa-solid fa-circle-info}"
|
||||
ToolTip.Tip="{ext:Locale OpenAboutTooltip}" />
|
||||
<MenuItem
|
||||
Name="StarscriptDebugMenuItem"
|
||||
Header="Debug Starscript"
|
||||
Icon="{ext:Icon fa-solid fa-star}" />
|
||||
<MenuItem
|
||||
Name="UpdateMenuItem"
|
||||
IsEnabled="{Binding CanUpdate}"
|
||||
|
@@ -8,7 +8,6 @@ using LibHac.Ns;
|
||||
using Ryujinx.Ava.Common.Locale;
|
||||
using Ryujinx.Ava.Systems.AppLibrary;
|
||||
using Ryujinx.Ava.Systems.Configuration;
|
||||
using Ryujinx.Ava.Systems.Starscript;
|
||||
using Ryujinx.Ava.UI.Controls;
|
||||
using Ryujinx.Ava.UI.Helpers;
|
||||
using Ryujinx.Ava.UI.ViewModels;
|
||||
@@ -52,8 +51,6 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
CompatibilityListMenuItem.Command = Commands.Create(() => CompatibilityListWindow.Show());
|
||||
|
||||
UpdateMenuItem.Command = MainWindowViewModel.UpdateCommand;
|
||||
|
||||
StarscriptDebugMenuItem.Command = Commands.Create(StarscriptTextBox.Show);
|
||||
|
||||
FaqMenuItem.Command =
|
||||
SetupGuideMenuItem.Command =
|
||||
|
@@ -285,12 +285,10 @@
|
||||
Spacing="10">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
ToolTip.Tip="{ext:Locale ShaderDumpPathTooltip}"
|
||||
Text="{ext:Locale SettingsTabGraphicsShaderDumpPath}"
|
||||
Width="250" />
|
||||
<TextBox Text="{Binding ShaderDumpPath}"
|
||||
Width="350"
|
||||
ToolTip.Tip="{ext:Locale ShaderDumpPathTooltip}" />
|
||||
Width="350" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
@@ -40,7 +40,6 @@
|
||||
Width="250" />
|
||||
<ComboBox
|
||||
SelectedIndex="{Binding Region}"
|
||||
ToolTip.Tip="{ext:Locale RegionTooltip}"
|
||||
HorizontalContentAlignment="Left"
|
||||
Width="350">
|
||||
<ComboBoxItem>
|
||||
@@ -72,11 +71,9 @@
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{ext:Locale SettingsTabSystemSystemLanguage}"
|
||||
ToolTip.Tip="{ext:Locale LanguageTooltip}"
|
||||
Width="250" />
|
||||
<ComboBox
|
||||
SelectedIndex="{Binding Language}"
|
||||
ToolTip.Tip="{ext:Locale LanguageTooltip}"
|
||||
HorizontalContentAlignment="Left"
|
||||
Width="350">
|
||||
<ComboBoxItem>
|
||||
@@ -141,7 +138,6 @@
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{ext:Locale SettingsTabSystemSystemTimeZone}"
|
||||
ToolTip.Tip="{ext:Locale TimezoneTooltip}"
|
||||
Width="250" />
|
||||
<AutoCompleteBox
|
||||
Name="TimeZoneBox"
|
||||
@@ -152,7 +148,6 @@
|
||||
SelectionChanged="TimeZoneBox_OnSelectionChanged"
|
||||
Text="{Binding Path=TimeZone, Mode=OneWay}"
|
||||
TextChanged="TimeZoneBox_OnTextChanged"
|
||||
ToolTip.Tip="{ext:Locale TimezoneTooltip}"
|
||||
ValueMemberBinding="{Binding Mode=OneWay, Converter={x:Static helpers:TimeZoneConverter.Instance}}" />
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
@@ -163,13 +158,11 @@
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{ext:Locale SettingsTabSystemSystemTime}"
|
||||
ToolTip.Tip="{ext:Locale TimeTooltip}"
|
||||
Width="250"/>
|
||||
<DatePicker
|
||||
VerticalAlignment="Center"
|
||||
IsEnabled="{Binding !MatchSystemTime}"
|
||||
SelectedDate="{Binding CurrentDate}"
|
||||
ToolTip.Tip="{ext:Locale TimeTooltip}"
|
||||
Width="350" />
|
||||
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}"/>
|
||||
</StackPanel>
|
||||
@@ -183,8 +176,7 @@
|
||||
ClockIdentifier="24HourClock"
|
||||
IsEnabled="{Binding !MatchSystemTime}"
|
||||
SelectedTime="{Binding CurrentTime}"
|
||||
Width="350"
|
||||
ToolTip.Tip="{ext:Locale TimeTooltip}" />
|
||||
Width="350" />
|
||||
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}"/>
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
|
Reference in New Issue
Block a user