private void AddGraph(NavGraph graph) { PathProcessor.GraphUpdateLock graphUpdateLock = this.AssertSafe(true); bool flag = false; for (int i = 0; i < this.graphs.Length; i++) { if (this.graphs[i] == null) { this.graphs[i] = graph; graph.graphIndex = (uint)i; flag = true; break; } } if (!flag) { if (this.graphs != null && (long)this.graphs.Length >= 255L) { throw new Exception("Graph Count Limit Reached. You cannot have more than " + 255u + " graphs."); } this.graphs = new List <NavGraph>(this.graphs ?? new NavGraph[0]) { graph }.ToArray(); graph.graphIndex = (uint)(this.graphs.Length - 1); } this.UpdateShortcuts(); graph.active = AstarData.active; graphUpdateLock.Release(); }
public void DeserializeGraphsAdditive(byte[] bytes) { PathProcessor.GraphUpdateLock graphUpdateLock = this.AssertSafe(false); try { if (bytes == null) { throw new ArgumentNullException("bytes"); } AstarSerializer astarSerializer = new AstarSerializer(this); if (astarSerializer.OpenDeserialize(bytes)) { this.DeserializeGraphsPartAdditive(astarSerializer); astarSerializer.CloseDeserialize(); } else { Debug.Log("Invalid data file (cannot read zip).\nThe data is either corrupt or it was saved using a 3.0.x or earlier version of the system"); } AstarData.active.VerifyIntegrity(); } catch (Exception arg) { Debug.LogError("Caught exception while deserializing data.\n" + arg); this.graphs = new NavGraph[0]; this.data_backup = bytes; } this.UpdateShortcuts(); graphUpdateLock.Release(); }
public void DeserializeGraphsPart(AstarSerializer sr) { PathProcessor.GraphUpdateLock graphUpdateLock = this.AssertSafe(false); this.ClearGraphs(); this.DeserializeGraphsPartAdditive(sr); graphUpdateLock.Release(); }
public void DeserializeGraphs(byte[] bytes) { PathProcessor.GraphUpdateLock graphUpdateLock = this.AssertSafe(false); this.ClearGraphs(); this.DeserializeGraphsAdditive(bytes); graphUpdateLock.Release(); }
// Token: 0x06002745 RID: 10053 RVA: 0x001AD344 File Offset: 0x001AB544 public static bool UpdateGraphsNoBlock(GraphUpdateObject guo, List <GraphNode> nodes, bool alwaysRevert = false) { for (int i = 0; i < nodes.Count; i++) { if (!nodes[i].Walkable) { return(false); } } guo.trackChangedNodes = true; PathProcessor.GraphUpdateLock graphUpdateLock = AstarPath.active.PausePathfinding(); bool flag; try { AstarPath.active.UpdateGraphs(guo); AstarPath.active.FlushGraphUpdates(); flag = PathUtilities.IsPathPossible(nodes); if (!flag || alwaysRevert) { guo.RevertFromBackup(); AstarPath.active.FloodFill(); } } finally { graphUpdateLock.Release(); } guo.trackChangedNodes = false; return(flag); }
public byte[] SerializeGraphs(SerializeSettings settings, out uint checksum) { PathProcessor.GraphUpdateLock graphUpdateLock = this.AssertSafe(false); AstarSerializer astarSerializer = new AstarSerializer(this, settings); astarSerializer.OpenSerialize(); this.SerializeGraphsPart(astarSerializer); byte[] result = astarSerializer.CloseSerialize(); checksum = astarSerializer.GetChecksum(); graphUpdateLock.Release(); return(result); }
public bool RemoveGraph(NavGraph graph) { PathProcessor.GraphUpdateLock graphUpdateLock = this.AssertSafe(false); graph.OnDestroy(); graph.active = null; int num = Array.IndexOf <NavGraph>(this.graphs, graph); if (num != -1) { this.graphs[num] = null; } this.UpdateShortcuts(); graphUpdateLock.Release(); return(num != -1); }
public void LoadFromCache() { PathProcessor.GraphUpdateLock graphUpdateLock = this.AssertSafe(false); if (this.file_cachedStartup != null) { byte[] bytes = this.file_cachedStartup.bytes; this.DeserializeGraphs(bytes); GraphModifier.TriggerEvent(GraphModifier.EventType.PostCacheLoad); } else { Debug.LogError("Can't load from cache since the cache is empty"); } graphUpdateLock.Release(); }
private PathProcessor.GraphUpdateLock AssertSafe(bool onlyAddingGraph = false) { if (this.graphStructureLocked.Count > 0) { bool flag = true; for (int i = 0; i < this.graphStructureLocked.Count; i++) { flag &= this.graphStructureLocked[i]; } if (!onlyAddingGraph || !flag) { throw new InvalidOperationException("Graphs cannot be added, removed or serialized while the graph structure is locked. This is the case when a graph is currently being scanned and when executing graph updates and work items.\nHowever as a special case, graphs can be added inside work items."); } } PathProcessor.GraphUpdateLock result = AstarData.active.PausePathfinding(); if (!AstarData.active.IsInsideWorkItem) { AstarData.active.FlushWorkItems(); AstarData.active.pathReturnQueue.ReturnPaths(false); } return(result); }