Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .github/workflows/dotnet-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,8 @@ jobs:
with:
repository: PlatinumMaster/NitroSharp
path: NitroSharp
- run: dotnet restore SwissArmyKnife
- run: dotnet build SwissArmyKnife --configuration Release --no-restore
- run: dotnet build SwissArmyKnife --configuration Release
- run: dotnet publish -c Release SwissArmyKnife

- name: Upload build artifacts (Windows)
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/upload-artifact@v2
Expand Down Expand Up @@ -68,10 +66,10 @@ jobs:
filename: SAK-${{matrix.os}}-${{ env.TAG }}.zip
- name: Make release
uses: ncipollo/release-action@v1
if: github.ref == 'refs/heads/master'
with:
allowUpdates: true
prerelease: true
tag: ${{ env.TAG }}
commit: ${{ github.sha }}
name: Nightly ${{ github.sha }}
name: Release ${{ github.sha }}
artifacts: SAK-${{matrix.os}}-${{ env.TAG }}.zip
7 changes: 0 additions & 7 deletions .travis.yml

This file was deleted.

21 changes: 13 additions & 8 deletions App.axaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SwissArmyKnife.Avalonia.App">
xmlns:local="using:SwissArmyKnife"
xmlns:themes="clr-namespace:Material.Styles.Themes;assembly=Material.Styles"
xmlns:avalonia="clr-namespace:SwissArmyKnife"
x:Class="SwissArmyKnife.App">
<Application.DataTemplates>
</Application.DataTemplates>

<Application.Styles>
<StyleInclude Source="avares://AvaloniaEdit/AvaloniaEdit.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseDark.xaml"/>
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Default.xaml" />
<StyleInclude Source="avares://SwissArmyKnife.Avalonia/Styles/Sidebar.axaml" />
<StyleInclude Source="avares://SwissArmyKnife.Avalonia/Styles/Border.axaml" />
<themes:MaterialTheme BaseTheme="Dark" PrimaryColor="LightBlue" SecondaryColor="Cyan" />
<StyleInclude Source="avares://DialogHost.Avalonia/Styles.xaml"/>
<StyleInclude Source="Styles/Navbar.axaml"></StyleInclude>
<StyleInclude Source="Styles/Spinner.axaml"></StyleInclude>
<StyleInclude Source="avares://AvaloniaEdit/Themes/Fluent/AvaloniaEdit.xaml" />
</Application.Styles>
</Application>
</Application>
45 changes: 27 additions & 18 deletions App.axaml.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using SwissArmyKnife.Avalonia.Views;

namespace SwissArmyKnife.Avalonia {
public class App : Application {
public override void Initialize() {
AvaloniaXamlLoader.Load(this);
}

public override void OnFrameworkInitializationCompleted() {
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
desktop.MainWindow = new ProjectManagementWindow();

base.OnFrameworkInitializationCompleted();
}
}
using System.IO;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using SwissArmyKnife.Handlers;
using SwissArmyKnife.ViewModels.Main;
using SwissArmyKnife.Views;

namespace SwissArmyKnife {
public partial class App : Application {
public override void Initialize() {
AvaloniaXamlLoader.Load(this);
}

public override void OnFrameworkInitializationCompleted() {
Logging.InitializeLogger();
Net.Initialize();
Preferences.ReadPreferences(Path.Combine("Configuration", "Preferences.yml"));
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) {
desktop.MainWindow = new StartupWindow {
DataContext = new StartupViewModel()
};
}

base.OnFrameworkInitializationCompleted();
}
}
}
Binary file added Assets/BattleCategory.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Assets/MapEditor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes.
Binary file modified Assets/ScriptEditor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Assets/TextEditor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/TrainerEditor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/WildEditor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/ZoneEditor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Assets/ZoneEntitiesEditor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed Assets/avalonia-logo.ico
Binary file not shown.
Binary file removed Assets/icon.png
Binary file not shown.
38 changes: 0 additions & 38 deletions Converters/MapMatrixRowConverter.cs

This file was deleted.

34 changes: 0 additions & 34 deletions Handlers/CommandUpdateHandler.cs

This file was deleted.

43 changes: 43 additions & 0 deletions Handlers/Commands.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace SwissArmyKnife.Handlers {
public class Commands {
public static async Task<bool> Fetch() {
string ScriptResBase = Path.Combine("Resources", "Scripts", GameWork.Project.GameInfo.Codename);
string NetWkPath = Path.Combine("Resources", "NetWk");

DirectoryInfo BaseDir = new DirectoryInfo(ScriptResBase), NetWkDir = new DirectoryInfo(NetWkPath);
if (!BaseDir.Exists) {
BaseDir.Create();
}

if (!NetWkDir.Exists) {
NetWkDir.Create();
}

if (!await Net.DownloadFile(GetLinkToYML("Base.yml"), Path.Combine(NetWkPath, "Base.yml"))) {
NetWkDir.Delete(true);
return false;
}

foreach (KeyValuePair<int, int[]> PluginMap in GameWork.Project.GameInfo.ScriptPlugins) {
string OVLYML = $"Overlay {PluginMap.Key}.yml";
if (!await Net.DownloadFile(GetLinkToYML(OVLYML), Path.Combine(NetWkPath, OVLYML))) {
NetWkDir.Delete(true);
return false;
}
}

foreach (FileInfo File in NetWkDir.GetFiles()) {
File.CopyTo(Path.Combine(ScriptResBase, $"{File.Name}"), true);
}

NetWkDir.Delete(true);
return true;
}

public static string GetLinkToYML(string ymlName) => $"{Preferences.Prefs.ScriptCommandsLink}{GameWork.Project.GameInfo.Codename}/{ymlName}";
}
}
18 changes: 18 additions & 0 deletions Handlers/GameWork.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Hotswap;
using Hotswap.Project;

namespace SwissArmyKnife.Handlers;

public class GameWork {
public static Patcher? Patcher { get; private set; }
public static IProject? Project { get; private set; }
public static void Init(string BaseROMConfigurationPath) {
Patcher = new Patcher(BaseROMConfigurationPath);
}

public static bool HandleProject(IProject Configuration) {
Project = Configuration;
Patcher?.LoadProject(Configuration);
return true;
}
}
49 changes: 49 additions & 0 deletions Handlers/IO.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Avalonia.Controls;

namespace SwissArmyKnife.Handlers;

public class IO {
private static async Task<string?> HandleFolderFileChoice(bool saving, bool isFile, Window parentInstance, List<FileDialogFilter> dialogFilter) {
string? result;
if (isFile) {
if (saving) {
result = await new SaveFileDialog {
Filters = dialogFilter
}.ShowAsync(parentInstance);
}
else {
string[]? resultArray = await new OpenFileDialog {
Filters = dialogFilter
}.ShowAsync(parentInstance);
result = resultArray != null && resultArray.Length != 0 ? resultArray[0] : null;
}
} else {
result = await new OpenFolderDialog().ShowAsync(parentInstance);
}

return string.IsNullOrEmpty(result) ? String.Empty : result;
}

public static async Task<string?> OpenFolder(Window parentInstance) => await HandleFolderFileChoice(false, false, parentInstance, null);
public static async Task<string?> OpenFile(Window parentInstance, List<FileDialogFilter> dialogFilter) => await HandleFolderFileChoice(false, true, parentInstance, dialogFilter);
public static async Task<string?> SaveFile(Window parentInstance, List<FileDialogFilter> dialogFilter) => await HandleFolderFileChoice(true, true, parentInstance, dialogFilter);

public static async Task<byte[]> TryReadBinaryFile(Window Instance, List<FileDialogFilter> Filters) {
string? FilePath = await OpenFile(Instance, Filters);
if (!FilePath.Equals("")) {
return await File.ReadAllBytesAsync(FilePath);
}
return null;
}

public static async Task TryWriteBinaryFile(Window Instance, byte[] Buffer, List<FileDialogFilter> Filters) {
string? FilePath = await SaveFile(Instance, Filters);
if (!FilePath.Equals("")) {
await File.WriteAllBytesAsync(FilePath, Buffer);
}
}
}
40 changes: 40 additions & 0 deletions Handlers/Logging.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System;
using System.IO;
using Avalonia.Controls;

namespace SwissArmyKnife.Handlers;

public static class Logging {
private static TextWriter loggerStream;
private static string logFileName;

private static void Log(string Message) {
if (!Design.IsDesignMode) {
using (loggerStream = File.AppendText(logFileName)) {
loggerStream.WriteLine($"[{DateTime.Now}] {Message}");
loggerStream.Flush();
loggerStream.Close();
}
}
}

public static void LogWarning(string Message) => Log($"<WARNING>: {Message}");
public static void LogError(string Message) => Log($"<ERROR>: {Message}");
public static void LogStandard(string Message) => Log($"{Message}");

public static void StopLogger() => loggerStream.Close();

public static void InitializeLogger() {
if (!Design.IsDesignMode) {
string baseName = $"SAKLog-{DateTime.Today.Year}{DateTime.Today.Month}{DateTime.Today.Day}";
int sessionNumber = 0;

Directory.CreateDirectory("Logs");
while (File.Exists(logFileName = Path.Combine("Logs", $"{baseName}-{sessionNumber}.log"))) {
sessionNumber++;
}
Log($"# SwissArmyKnife - (Commit Version Here) - Log File");
}
}

}
28 changes: 0 additions & 28 deletions Handlers/MessageHandler.cs

This file was deleted.

Loading