public PathfinderNode(PathfinderLayer NewParentLayer) { this.Network_FindParentNum = -1; this.Layer_NodeNum = -1; this.Layer_ChangedNodeNum = -1; this.ParentNode_NodeNum = -1; this.Nodes = new PathfinderNode[4]; this.Connections = new PathfinderConnection[2]; this.Clearance = 0x7fffffff; this.Layer = NewParentLayer; this.Layer.Node_Add(this); }
public PathfinderNode(PathfinderNetwork ParentNetwork) { PathfinderLayer layer; this.Network_FindParentNum = -1; this.Layer_NodeNum = -1; this.Layer_ChangedNodeNum = -1; this.ParentNode_NodeNum = -1; this.Nodes = new PathfinderNode[4]; this.Connections = new PathfinderConnection[2]; this.Clearance = 0x7fffffff; if (ParentNetwork.NodeLayerCount == 0) { layer = new PathfinderLayer(ParentNetwork); } else { layer = ParentNetwork.NodeLayers[0]; } this.Layer = layer; layer.Node_Add(this); }
public void ForceDeallocate() { int num2 = this.NodeCount - 1; for (int i = 0; i <= num2; i++) { this.Nodes[i].ForceDeallocate(); } this.Nodes = null; this.Connections = null; this.Network = null; this.ParentLayer = null; }
public void FindParent() { PathfinderNode nodeToAdd = null; if ((this.NodeCount == 0) & (this.Layer.Network_LayerNum > 0)) { Debugger.Break(); } else if (this.ParentNode != null) { Debugger.Break(); } else { bool flag2; float maxValue = float.MaxValue; int num7 = this.ConnectionCount - 1; for (int i = 0; i <= num7; i++) { bool flag; float num6; PathfinderConnection connection = this.Connections[i]; PathfinderNode otherNode = connection.GetOtherNode(this); PathfinderNode parentNode = otherNode.ParentNode; if (parentNode == null) { parentNode = connection.GetOtherNode(this); num6 = connection.Value * (0.98f + (VBMath.Rnd() * 0.04f)); if (num6 < maxValue) { maxValue = num6; nodeToAdd = parentNode; flag2 = true; } continue; } if (parentNode.NodeCount == 3) { int num5 = 0; flag = false; int num8 = parentNode.NodeCount - 1; for (int j = 0; j <= num8; j++) { int num9 = parentNode.Nodes[j].ConnectionCount - 1; for (int k = 0; k <= num9; k++) { if (parentNode.Nodes[j].Connections[k].GetOtherNode(parentNode.Nodes[j]) == this) { num5++; if (num5 >= 2) { flag = true; } break; } } } } else { flag = true; } if (flag) { num6 = (otherNode.SiblingSpan + connection.Value) * (0.98f + (VBMath.Rnd() * 0.04f)); if (num6 < maxValue) { maxValue = num6; nodeToAdd = parentNode; flag2 = false; } } } if (nodeToAdd != null) { if (flag2) { PathfinderLayer parentLayer; if (this.Layer.ParentLayer == null) { parentLayer = new PathfinderLayer(this.Layer.Network); } else { parentLayer = this.Layer.ParentLayer; } PathfinderNode newFindParentNode = new PathfinderNode(parentLayer); newFindParentNode.Node_Add(this); newFindParentNode.Node_Add(nodeToAdd); newFindParentNode.SpanCalc(); this.RaiseConnections(); nodeToAdd.RaiseConnections(); newFindParentNode.Layer.Network.FindParentNode_Add(newFindParentNode); } else if (nodeToAdd != null) { nodeToAdd.Node_Add(this); if (nodeToAdd.NodeCount >= 4) { nodeToAdd.Split(); } else { nodeToAdd.SpanCalc(); this.RaiseConnections(); if (nodeToAdd.ParentNode == null) { nodeToAdd.Layer.Network.FindParentNode_Add(nodeToAdd); } } } } else if (this.ConnectionCount > 0) { PathfinderLayer layer2; if (this.Layer.ParentLayer == null) { layer2 = new PathfinderLayer(this.Layer.Network); } else { layer2 = this.Layer.ParentLayer; } PathfinderNode node5 = new PathfinderNode(layer2); node5.Node_Add(this); node5.SpanCalc(); this.RaiseConnections(); node5.Layer.Network.FindParentNode_Add(node5); } } }
public void NodeLayer_Add(PathfinderLayer NewNodeLayer) { if (this.NodeLayerCount > 0) { this.NodeLayers[this.NodeLayerCount - 1].ParentLayer = NewNodeLayer; } this.NodeLayers = (PathfinderLayer[]) Utils.CopyArray((Array) this.NodeLayers, new PathfinderLayer[this.NodeLayerCount + 1]); this.NodeLayers[this.NodeLayerCount] = NewNodeLayer; this.NodeLayers[this.NodeLayerCount].Network_LayerNum = this.NodeLayerCount; this.NodeLayerCount++; }