internal void GenerateAndLoadAllClusters(bool loadSaveFile = true) { var stopwatch = Stopwatch.StartNew(); var allBuildables = BuildableDirectory.GetBuildables(includePlants: true).ToList(); Logging.Write(m_Plugin, $"Loaded {allBuildables.Count} buildables from the map. Took {stopwatch.ElapsedMilliseconds}ms", ConsoleColor.Cyan); foreach (var c in m_Clusters) { Return(c); } var successfulLoad = false; if (loadSaveFile && LevelSavedata.fileExists("/Bases.dat")) { successfulLoad = LoadClusters(allBuildables); } if (!successfulLoad) { Logging.Write(m_Plugin, "Generating new clusters. This can take a LONG time. How long will depend on the following factors (but not limited to): CPU usage, CPU cores/threads, Buildables in the map. This generation only needs to be ran once from raw."); m_Clusters.AddRange(ClusterElements(allBuildables, true)); } stopwatch.Stop(); Logging.Write(m_Plugin, $"Clusters Loaded: {Clusters.Count}. Took {stopwatch.ElapsedMilliseconds}ms.", ConsoleColor.Cyan); OnClustersGenerated?.Invoke(); }
public static bool load() { if (LevelSavedata.fileExists("/Animals.dat")) { River river = LevelSavedata.openRiver("/Animals.dat", true); byte ver = river.readByte(); ushort packsCount = river.readUInt16(); int animalManagerPacks = AnimalManager.packs.Count; int packIndex = 0; int loadedAnimals = 0; for (int i = 0; i < packsCount; i++) { PackInfo selectedPack; bool createdNewPack = i >= animalManagerPacks; if (createdNewPack) { selectedPack = addNewPack(); } else { selectedPack = AnimalManager.packs[packIndex]; } ushort animalsCount = river.readUInt16(); for (int j = 0; j < animalsCount; j++) { ushort id = river.readUInt16(); if (id == 0) { //null animal detects custom animal pack without auto respawning if (j == 0 && !createdNewPack) { selectedPack = addNewPack(); } selectedPack.animals.Add(null); continue; } UnityEngine.Vector3 position = river.readSingleVector3(); float angle = river.readSingle(); if (animalsCount > selectedPack.animals.Count) { try { AnimalManager aManager = ((AnimalManager)(typeof(AnimalManager)).GetField("manager", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(null)); Animal animal = (Animal)typeof(AnimalManager).GetMethod("addAnimal", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(aManager, new object[] { id, position, angle, false }); animal.pack = selectedPack; selectedPack.animals.Add(animal); } catch (Exception ex) { Logger.LogError(string.Format("Plugin {0} has to be updated... ", SaveAnimals.instance.Name)); Logger.Log(ex); return(false); } } else { Animal animal = selectedPack.animals[j]; animal.id = id; animal.transform.position = position; animal.transform.rotation = UnityEngine.Quaternion.Euler(0.0f, angle, 0.0f); } } if (!createdNewPack) { packIndex++; } loadedAnimals += animalsCount; } river.closeRiver(); Logger.Log(string.Format("Loaded {0} packs with {1} animals in total", packsCount, loadedAnimals)); } return(true); }