Fix havok parsing for non-ANSI user paths

Also improve parsing because otter is better at c# than me
This commit is contained in:
ackwell 2024-04-22 23:45:30 +10:00
parent cc2f72b73d
commit 1bc3bb17c9
2 changed files with 6 additions and 9 deletions

View file

@ -71,8 +71,7 @@ public static unsafe class HavokConverter
/// <param name="filePath"> Path to a file on the filesystem. </param>
private static hkResource* Read(string filePath)
{
var path = Marshal.StringToHGlobalAnsi(filePath);
var path = Encoding.UTF8.GetBytes(filePath);
var builtinTypeRegistry = hkBuiltinTypeRegistry.Instance();
var loadOptions = stackalloc hkSerializeUtil.LoadOptions[1];
@ -81,8 +80,7 @@ public static unsafe class HavokConverter
loadOptions->TypeInfoRegistry = builtinTypeRegistry->GetTypeInfoRegistry();
// TODO: probably can use LoadFromBuffer for this.
var resource = hkSerializeUtil.LoadFromFile((byte*)path, null, loadOptions);
return resource;
return hkSerializeUtil.LoadFromFile(path, null, loadOptions);
}
/// <summary> Serializes an hkResource* to a temporary file. </summary>
@ -94,9 +92,9 @@ public static unsafe class HavokConverter
)
{
var tempFile = CreateTempFile();
var path = Marshal.StringToHGlobalAnsi(tempFile);
var path = Encoding.UTF8.GetBytes(tempFile);
var oStream = new hkOstream();
oStream.Ctor((byte*)path);
oStream.Ctor(path);
var result = stackalloc hkResult[1];

View file

@ -84,9 +84,8 @@ public static class SkeletonConverter
.Where(n => n.NodeType != XmlNodeType.Comment)
.Select(n =>
{
var text = n.InnerText.Trim()[1..];
// TODO: surely there's a less shit way to do this I mean seriously
return BitConverter.ToSingle(BitConverter.GetBytes(int.Parse(text, NumberStyles.HexNumber)));
var text = n.InnerText.AsSpan().Trim()[1..];
return BitConverter.Int32BitsToSingle(int.Parse(text, NumberStyles.HexNumber));
})
.ToArray();