Skip to content

Commit

Permalink
feat(Native): implement ZkSaveGame APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
lmichaelis committed Jan 20, 2024
1 parent 253f4ed commit d58dfc0
Show file tree
Hide file tree
Showing 9 changed files with 737 additions and 35 deletions.
41 changes: 41 additions & 0 deletions ZenKit.Test/TestSaveGame.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System;
using NUnit.Framework;

namespace ZenKit.Test;

public class TestSaveGame
{
[OneTimeSetUp]
public void SetUp()
{
Logger.Set(LogLevel.Trace,
(level, name, message) =>
Console.WriteLine(new DateTime() + " [ZenKit] (" + level + ") > " + name + ": " + message));
}

[Test]
public void TestLoadG1()
{
var sav = new SaveGame(GameVersion.Gothic1);
sav.Load("./Samples/G1/Save");

var meta = sav.Metadata;
Assert.That(meta.Title, Is.EqualTo("sds"));
Assert.That(meta.World, Is.EqualTo("WORLD"));
Assert.That(meta.TimeDay, Is.EqualTo(0));
Assert.That(meta.TimeHour, Is.EqualTo(8));
Assert.That(meta.TimeMinute, Is.EqualTo(6));
Assert.That(meta.SaveDate, Is.EqualTo("24.12.2022 - 21:36"));
Assert.That(meta.VersionMajor, Is.EqualTo(1));
Assert.That(meta.VersionMinor, Is.EqualTo(87));
Assert.That(meta.PlayTime.TotalSeconds, Is.EqualTo(49));

var state = sav.State;
Assert.That(state.Day, Is.EqualTo(0));
Assert.That(state.Hour, Is.EqualTo(8));
Assert.That(state.Minute, Is.EqualTo(6));

// Try to parse the world data.
var wld = sav.LoadWorld();
}
}
206 changes: 206 additions & 0 deletions ZenKit/Native.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7147,6 +7147,212 @@ public static extern void
[DllImport(DllName)]
public static extern IntPtr ZkSvmInstance_getOm(UIntPtr slf);

[DllImport(DllName)]
public static extern UIntPtr ZkSaveGame_new(GameVersion version);

[DllImport(DllName)]
public static extern void ZkSaveGame_del(UIntPtr slf);

[DllImport(DllName)]
public static extern bool ZkSaveGame_load(UIntPtr slf, string path);

[DllImport(DllName)]
public static extern bool ZkSaveGame_save(UIntPtr slf, string path, UIntPtr world, string worldName);

[DllImport(DllName)]
public static extern UIntPtr ZkSaveGame_loadCurrentWorld(UIntPtr slf);

[DllImport(DllName)]
public static extern UIntPtr ZkSaveGame_loadWorld(UIntPtr slf, string name);

[DllImport(DllName)]
public static extern UIntPtr ZkSaveGame_getMetadata(UIntPtr slf);

[DllImport(DllName)]
public static extern UIntPtr ZkSaveGame_getState(UIntPtr slf);

[DllImport(DllName)]
public static extern UIntPtr ZkSaveGame_getThumbnail(UIntPtr slf);

[DllImport(DllName)]
public static extern void ZkSaveGame_setThumbnail(UIntPtr slf, UIntPtr texture);

[DllImport(DllName)]
public static extern IntPtr ZkSaveMetadata_getTitle(UIntPtr slf);

[DllImport(DllName)]
public static extern IntPtr ZkSaveMetadata_getWorld(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getTimeDay(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getTimeHour(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getTimeMinute(UIntPtr slf);

[DllImport(DllName)]
public static extern IntPtr ZkSaveMetadata_getSaveDate(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getVersionMajor(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getVersionMinor(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getPlayTimeSeconds(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getVersionPoint(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveMetadata_getVersionInt(UIntPtr slf);

[DllImport(DllName)]
public static extern IntPtr ZkSaveMetadata_getVersionAppName(UIntPtr slf);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setTitle(UIntPtr slf, string title);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setWorld(UIntPtr slf, string world);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setTimeDay(UIntPtr slf, int timeDay);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setTimeHour(UIntPtr slf, int timeHour);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setTimeMinute(UIntPtr slf, int timeMinute);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setSaveDate(UIntPtr slf, string saveDate);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setVersionMajor(UIntPtr slf, int versionMajor);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setVersionMinor(UIntPtr slf, int versionMinor);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setPlayTimeSeconds(UIntPtr slf, int playTimeSeconds);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setVersionPoint(UIntPtr slf, int versionPoint);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setVersionInt(UIntPtr slf, int versionInt);

[DllImport(DllName)]
public static extern void ZkSaveMetadata_setVersionAppName(UIntPtr slf, string versionAppName);

[DllImport(DllName)]
public static extern int ZkSaveState_getDay(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveState_getHour(UIntPtr slf);

[DllImport(DllName)]
public static extern int ZkSaveState_getMinute(UIntPtr slf);

[DllImport(DllName)]
public static extern void ZkSaveState_setDay(UIntPtr slf, int day);

[DllImport(DllName)]
public static extern void ZkSaveState_setHour(UIntPtr slf, int hour);

[DllImport(DllName)]
public static extern void ZkSaveState_setMinute(UIntPtr slf, int minute);

[DllImport(DllName)]
public static extern ulong ZkSaveState_getMissionCount(UIntPtr slf);

[DllImport(DllName)]
public static extern void ZkSaveState_getMission(UIntPtr slf, ulong i, out IntPtr name, out int id, out bool av,
out int statusIndex);

[DllImport(DllName)]
public static extern void ZkSaveState_setMission(UIntPtr slf, ulong i, string name, int id, bool av,
int statusIndex);

[DllImport(DllName)]
public static extern void ZkSaveState_addMission(UIntPtr slf, string name, int id, bool av, int statusIndex);

[DllImport(DllName)]
public static extern void ZkSaveState_removeMission(UIntPtr slf, ulong i);

[DllImport(DllName)]
public static extern void ZkSaveState_clearMissions(UIntPtr slf);

[DllImport(DllName)]
public static extern ulong ZkSaveState_getInfoStateCount(UIntPtr slf);

[DllImport(DllName)]
public static extern void ZkSaveState_getInfoState(UIntPtr slf, ulong i, out IntPtr name, out bool told);

[DllImport(DllName)]
public static extern void ZkSaveState_setInfoState(UIntPtr slf, ulong i, string name, bool told);

[DllImport(DllName)]
public static extern void ZkSaveState_addInfoState(UIntPtr slf, string name, bool told);

[DllImport(DllName)]
public static extern void ZkSaveState_removeInfoState(UIntPtr slf, ulong i);

[DllImport(DllName)]
public static extern void ZkSaveState_clearInfoStates(UIntPtr slf);

[DllImport(DllName)]
public static extern ulong ZkSaveState_getSymbolStateCount(UIntPtr slf);

[DllImport(DllName)]
public static extern void ZkSaveState_getSymbolState(UIntPtr slf, ulong i, out IntPtr name, out IntPtr values,
out ulong valueCount);

[DllImport(DllName)]
public static extern void ZkSaveState_setSymbolState(UIntPtr slf, ulong i, string name, int[] values,
ulong valueCount);

[DllImport(DllName)]
public static extern void ZkSaveState_addSymbolState(UIntPtr slf, string name, int[] values, ulong valueCount);

[DllImport(DllName)]
public static extern void ZkSaveState_removeSymbolState(UIntPtr slf, ulong i);

[DllImport(DllName)]
public static extern void ZkSaveState_clearSymbolStates(UIntPtr slf);

[DllImport(DllName)]
public static extern ulong ZkSaveState_getLogTopicCount(UIntPtr slf);

[DllImport(DllName)]
public static extern void ZkSaveState_getLogTopic(UIntPtr slf, ulong i, out IntPtr description,
out SaveTopicSection section, out SaveTopicStatus status);

[DllImport(DllName)]
public static extern void ZkSaveState_setLogTopic(UIntPtr slf, ulong i, string description,
SaveTopicSection section, SaveTopicStatus status);

[DllImport(DllName)]
public static extern void ZkSaveState_addLogTopic(UIntPtr slf, string description, SaveTopicSection section,
SaveTopicStatus status);

[DllImport(DllName)]
public static extern void ZkSaveState_removeLogTopic(UIntPtr slf, ulong i);

[DllImport(DllName)]
public static extern void ZkSaveState_clearLogTopics(UIntPtr slf);

[DllImport(DllName)]
public static extern IntPtr ZkSaveState_getGuildAttitudes(UIntPtr slf, out ulong dimension);

[DllImport(DllName)]
public static extern void ZkSaveState_setGuildAttitudes(UIntPtr slf, byte[] attitudes, ulong dimension);


public class Callbacks
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
Expand Down
Loading

0 comments on commit d58dfc0

Please sign in to comment.