public void Add(Segment node, out StaticNode target) { if (!_nodes.ContainsKey(node.Value)) { lock (this) { if (!_nodes.ContainsKey(node.Value)) { _nodes.Add(node.Value, new StaticNode(node.Value)); } } } target = _nodes[node.Value]; }
void CreateNewStaticNode(Transform t, bool clockDirectionLeft) { Node previousNode = t.transform.GetComponent <Node>(); enabled = false; StaticNode n = t.gameObject.AddComponent <StaticNode>(); n.clockDirectionLeft = clockDirectionLeft; child.SetParent(n); n.SetParent(this); n.SetChild(child); n.AllotRopeLength(AvailableRopeLength - (position - n.position).magnitude); SetChild(n); if (previousNode != null) { StuckEnemyCheck.instance.CheckStuckEnemy(n, previousNode); } }
private void AddInternal(Route route, Stack <Segment> segments, StaticNode node) { if (segments.Count == 0) { node.Leaves.Add(route); return; } var segment = segments.Pop(); if (segment is StaticSegment) { StaticNode subNode; node.StaticSegments.Add(segment, out subNode); AddInternal(route, segments, subNode); } else { node.Leaves.Add(route); } }
public StaticNode(StaticNode firstChild, StaticNode nextSibling, string value) { FirstChild = firstChild; NextSibling = nextSibling; Value = value; }
public override void SetParent(Node parent) { base.SetParent(parent); treeNode = parent as StaticNode; }
private void FindCandidates(string[] segments, string method, int currentSegment, StaticNode node, List <Route> result) { var pathIsNotTooLong = currentSegment < segments.Length; if (pathIsNotTooLong) { var nextSegment = segments[currentSegment]; var subNode = node.StaticSegments.Get(nextSegment); if (subNode != null) { FindCandidates(segments, method, currentSegment + 1, subNode, result); } } foreach (var route in node.Leaves) { if (route.Method == method && route.Segments.Segments.Length == segments.Length) { result.Add(route); } } }