added mirror status to spiral cache and fixed bugs with loading cache

This commit is contained in:
FreezeDriedMangoes 2023-02-01 13:02:21 -05:00
parent c03938a1ab
commit bf2043a80b
3 changed files with 24 additions and 15 deletions

View File

@ -626,6 +626,7 @@ namespace NewHorizons.Builder.Props
public MVector3[] skeletonPoints;
public MVector3 position;
public float zRotation;
public bool mirrored;
}
internal static void RefreshArcs(NomaiWallText nomaiWallText, GameObject conversationZone, PropModule.NomaiTextInfo info, NewHorizonsBody nhBody, string cacheKey)
@ -671,6 +672,7 @@ namespace NewHorizons.Builder.Props
var skeletonPoints = cachedData[i].skeletonPoints.Select(mv => (Vector3)mv).ToArray();
arcReadFromCache = NomaiTextArcBuilder.BuildSpiralGameObject(skeletonPoints, cachedData[i].mesh);
arcReadFromCache.transform.parent = arranger.transform;
arcReadFromCache.transform.localScale = new Vector3(cachedData[i].mirrored? -1 : 1, 1, 1);
arcReadFromCache.transform.localPosition = cachedData[i].position;
arcReadFromCache.transform.localEulerAngles = new Vector3(0, 0, cachedData[i].zRotation);
}
@ -727,7 +729,8 @@ namespace NewHorizons.Builder.Props
mesh = spiralManipulator.GetComponent<MeshFilter>().sharedMesh, // TODO: create a serializable version of Mesh and pass this: spiralManipulator.GetComponent<MeshFilter>().mesh
skeletonPoints = spiralManipulator.NomaiTextLine._points.Select(v => (MVector3)v).ToArray(),
position = spiralManipulator.transform.localPosition,
zRotation = spiralManipulator.transform.localEulerAngles.z
zRotation = spiralManipulator.transform.localEulerAngles.z,
mirrored = spiralManipulator.transform.localScale.x < 0
}).ToArray();
nhBody.Cache.Set(cacheKey, cacheData);

View File

@ -17,23 +17,20 @@ namespace NewHorizons.Utility
public Cache(IModBehaviour mod, string cacheFilePath)
{
this.mod = mod;
filepath = cacheFilePath;
this.filepath = cacheFilePath;
var fullPath = mod.ModHelper.Manifest.ModFolderPath + cacheFilePath;
var json = File.ReadAllText(mod.ModHelper.Manifest.ModFolderPath + cacheFilePath);
data = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
// the above is exactly the same thing that the below does, but the below for some reason always returns null. no clue why
// data = mod.ModHelper.Storage.Load<Dictionary<string, string>>(filepath);
if (data == null)
if (!File.Exists(fullPath))
{
Logger.LogWarning("Failed to load cache! Cache path: " + cacheFilePath);
Logger.LogWarning("Cache file not found! Cache path: " + cacheFilePath);
data = new Dictionary<string, string>();
return;
}
Logger.LogWarning("CACHE DEBUG: Cache path: " + cacheFilePath);
Logger.LogWarning("CACHE DEBUG: Loaded cache == null? " + (data == null));
Logger.LogWarning("CACHE DEBUG: Loaded cache keys: " + String.Join(",", data?.Keys ?? new Dictionary<string, string>().Keys));
var json = File.ReadAllText(fullPath);
data = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
// the code above does exactly the same thing that the code below does, but the below for some reason always returns null. no clue why
// data = mod.ModHelper.Storage.Load<Dictionary<string, string>>(filepath);
}
public void WriteToFile()

View File

@ -1,5 +1,6 @@
using NewHorizons.External.Configs;
using OWML.Common;
using System;
using System.Linq;
using UnityEngine;
namespace NewHorizons.Utility
@ -33,8 +34,16 @@ namespace NewHorizons.Utility
return;
}
var pathWithoutExtension = RelativePath.Substring(0, RelativePath.LastIndexOf('.'));
Cache = new Cache(Mod, pathWithoutExtension+".nhcache");
try
{
var pathWithoutExtension = RelativePath.Substring(0, RelativePath.LastIndexOf('.'));
Cache = new Cache(Mod, pathWithoutExtension+".nhcache");
}
catch (Exception e)
{
Logger.LogError("Cache failed to load: " + e.Message);
Cache = null;
}
}
public void UnloadCache(bool writeBeforeUnload=false)