private void PerformMove() { if (shouldCheck == false || isMoving || currentTransmitter.IsMoving) { return; } if (currentTransmitter.HasConnections) { if (previousTransmitter != null) { breakCount += Time.deltaTime; if (breakCount >= timeBeforeBreak) { breakCount = 0f; previousTransmitter.RemoveSpark(); previousTransmitter = null; } } List <GameObject> connectedPieces = currentTransmitter.GetConnectedPieces(); for (int i = 0; i < connectedPieces.Count; i++) { Vector3 rayOrigin = connectedPieces[i].transform.position + connectedPieces[i].transform.forward; Ray ray = new Ray(rayOrigin, connectedPieces[i].transform.forward); RaycastHit hit; if (Physics.Raycast(ray, out hit, map.nodeSpacing, transmitterMask)) { Transmitter t = hit.transform.GetComponentInParent <Transmitter>(); if (t == null || t == previousTransmitter) { continue; } StartCoroutine(Move(t)); shouldCheck = false; currentTransmitter.RemoveSpark(); previousTransmitter = currentTransmitter; currentTransmitter = t; currentTransmitter.GiveSpark(this); transmitterController.UpdateConnections(); return; } } } }