private void TryClone() { if (!SignalManager.IsAllowedCreateSignal) { return; } if (SignalManager.IsRandomCloning) { bool doClone = Convert.ToBoolean(UnityEngine.Random.Range(0, 2)); if (!doClone) { return; } } TeeShape teeShape = _currentShape as TeeShape; if (teeShape != null && _currentWaypointIndex == 2 && _path.Count == 3)// у клонированного сигнала путь содержит только 2 точки, поэтому он не пройдет проверку: _path.Count == 3 { var signalGO = (Instantiate(_prefab, teeShape.CenterSignalPoint, new Quaternion(0, 0, 0, 0)) as GameObject); var signal = signalGO.GetComponent <Signal>(); signal._path = teeShape.GetSecondPath(_prevOutDirection); var dir = teeShape.GetSecondOutDirection(_prevOutDirection); signal._prevOutDirection = dir; signal.transform.SetY(PosY); signal._isClonedInCurrentShape = true; signal._parentSignal = this; signal._prefab = _prefab; signal._traversedShapes.AddRange(_traversedShapes); } }
/// <summary> /// Вращает teeShape, пока он не будет соединен с другим, если это возможно. Если teeShape расположен в ноде с коннектором, то будет требоваться соединение еще и с коннектором /// </summary> private static void FastRotateToConnection(TeeShape teeShape, Direction direction) { for (int i = 0; i < 4; i++) { if (teeShape.HasConnection(direction)) { var connector = ConnectorsManager.FindConnectorWithNearestShape(teeShape); if (connector == null) { return; } if (teeShape.HasConnection(connector.CurrentDirection)) { return; } } if (i < 3) { teeShape.FastRotate(); } } Debug.LogError("connection not found"); }