private void FindRailwayOnDirection() { List <(RailNode, RailNode)> currentRails = RailManager.GetRails(); if (currentRails == null) { return; } foreach ((RailNode, RailNode)rail in currentRails) { if (rail.Item1.Equals(this.currentNearestRailPoint)) { if ((rail.Item2.transform.position - rail.Item1.transform.position).normalized == this.transform.forward) { this.movementDirection = (rail.Item2.transform.position - rail.Item1.transform.position).normalized; this.SetSpeed(0.1f); this.canTurn = false; this.switchedToEndpoint = false; } } else if (rail.Item2.Equals(this.currentNearestRailPoint)) { if ((rail.Item1.transform.position - rail.Item2.transform.position).normalized == this.transform.forward) { this.movementDirection = (rail.Item1.transform.position - rail.Item2.transform.position).normalized; this.SetSpeed(0.1f); this.canTurn = false; this.switchedToEndpoint = false; } } } }
private void SnapToNearestRailPoint() { List <(RailNode, RailNode)> currentRails = RailManager.GetRails(); if (currentRails == null) { return; } float distanceRecord = Vector3.Distance(currentRails[0].Item1.transform.position, this.transform.position); RailNode closestRail = currentRails[0].Item1; foreach ((RailNode, RailNode)rail in currentRails) { if (Vector3.Distance(rail.Item1.transform.position, this.transform.position) < distanceRecord) { closestRail = rail.Item1; } if (Vector3.Distance(rail.Item2.transform.position, this.transform.position) < distanceRecord) { closestRail = rail.Item2; } } if (closestRail == null) { return; } //this.transform.position = closestRail.transform.position; this.currentNearestRailPoint = closestRail; }