private static void UpdateWireframes(List <RectangleWireframe[]> wireframes, Func <int, SlotSettings> getSlotSettingsFunc) { for (var i = wireframes.Count - 1; i >= 0; i--) { var container = wireframes[i]; try { for (var j = 0; j < container.Length; j++) { var wireframe = container[j]; if (wireframe.Pointer == IntPtr.Zero) { continue; // this should be enough to trigger ObjectCollectedException } var settings = getSlotSettingsFunc(j); var collider = wireframe.GetComponent <BoxCollider>(); collider.size = settings?.Size ?? new Vector3(0.1f, 0.1f, 0.1f); wireframe.Size = collider.size; wireframe.transform.localPosition = (settings?.Offset - collider.size / 2f) ?? wireframe.DefaultPosition; wireframe.transform.localRotation = settings?.Rotation ?? Quaternion.identity; } } catch (ObjectCollectedException) { QoLFixPlugin.LogWarning($"Container {i} was garbage-collected"); wireframes.RemoveAt(i); } } }
private static bool LoadSettings() { AttemptedLoad = true; EnsureWatchInitialized(); try { var jsonPath = Path.Combine(BepInEx.Paths.ConfigPath, CONFIG_FILE); var serializer = new JsonSerializer { NullValueHandling = NullValueHandling.Include, MissingMemberHandling = MissingMemberHandling.Ignore, }; serializer.Converters.Add(new Vector3JsonConverter()); serializer.Converters.Add(new QuaternionJsonConverter()); var obj = JObject.Parse(File.ReadAllText(jsonPath)); BoxSlots = obj["box"]?.ToObject <SlotSettings[]>(serializer); LockerSlots = obj["locker"]?.ToObject <SlotSettings[]>(serializer); SettingsLoaded = true; return(true); } catch (Exception ex) { QoLFixPlugin.LogError("Failed to deserialize wireframes config file: " + ex); return(false); } }
private static void OnWatcherEvent(object sender, FileSystemEventArgs e) { QoLFixPlugin.LogDebug($"WATCH EVENT: {e.ChangeType} - {e.Name}"); if (e.ChangeType != WatcherChangeTypes.Changed && e.ChangeType != WatcherChangeTypes.Created) { return; } if (Path.GetFileName(e.Name) != CONFIG_FILE) { return; } ShouldUpdateSettings = true; }