private void PushPreviousNodes(LinkedListNode <GameObject> node) { float garbageDistance = LevelManager.instance.GetGarbageDistance(); LinkedListNode <GameObject> curNode = node; LinkedListNode <GameObject> previousNode = curNode.Previous; while (previousNode != null) { Garbage curGarbage = curNode.Value.GetComponent <Garbage>(); Garbage nextGarbage = previousNode.Value.GetComponent <Garbage>(); Vector2 offset = (nextGarbage.GetPos() - curGarbage.GetPos()); float distance = offset.magnitude; if (distance < garbageDistance) { nextGarbage.MoveForward(garbageDistance - distance); curNode = curNode.Previous; previousNode = previousNode.Previous; } else { break; } } }
private LinkedListNode <GameObject> FindPreviousNodeBeforePoint(Vector2 point, int targetPathIndex, Vector2 targetNodePos) { float pointToTarget = (targetNodePos - point).magnitude; // forward iteration LinkedListNode <GameObject> node = garbages.First; while (node != null) { Garbage garbage = node.Value.GetComponent <Garbage>(); int curIndex = garbage.GetCurPathIndex(); if (curIndex < targetPathIndex) // node < PathNode { return(node); } else if (curIndex == targetPathIndex) // node == PathNode { float nodeToPathNode = (targetNodePos - garbage.GetPos()).magnitude; if (nodeToPathNode > pointToTarget) { return(node); } } node = node.Next; } return(node); }