public PositionRotation GetPositionRotation(TunnelDetail detail, TunnelVector3 localPosition) { PositionRotation cutPositionRotation = detail.TunnelDetailCut.GetLocalPositionRotation(localPosition); PositionRotation curvePositionRotation = GetCentralPoint(detail, localPosition.Depth); return(curvePositionRotation + cutPositionRotation); }
public void PutInCenter(Transform transform, float depth) { float localDepth; TunnelDetail detail = _detailMap.GetDetail(depth, out localDepth); PositionRotation position = _positionRotationCalculator.GetCentralPoint(detail, localDepth); position.SetPosition(transform); }
public void PutInTunnel(Transform transform, TunnelVector3 globalPosition) { float localDepth; TunnelDetail detail = _detailMap.GetDetail(globalPosition.Depth, out localDepth); globalPosition.Depth = localDepth; PositionRotation position = _positionRotationCalculator.GetPositionRotation(detail, globalPosition); position.SetPosition(transform); }
public PositionRotation GetCentralPoint(TunnelDetail detail, float depth) { Quaternion beginning = Quaternion.Euler(detail.RotationAtTheBeginning.Value, 0, 0); Quaternion beginningReversed = Quaternion.Euler(-detail.RotationAtTheBeginning.Value, 0, 0); PositionRotation local = beginning * detail.PositionCurve.GetPositionRotation(depth); local.Rotation *= beginningReversed; return(detail.GlobalStartPoint + local); }
private void FillDetails() { _details = new TunnelDetail[_count]; IPositionRotationCalculator calculator = new SimplePositionRotationCalculator(); PositionRotation start = PositionRotation.Identity; ITunnelDetailCut cut = new SimpleCut(_radius); IPositionCurve[] curves = new IPositionCurve[3]; curves[0] = new SimpleCurvedCurve(10); curves[1] = new SimpleCurvedCurve(30); curves[2] = new SimpleCurve(); for (int i = 0; i < _count; i++) { _details[i] = new TunnelDetail(cut, curves[i % curves.Length], start, _length, new Angle(Random.Range(0, 360f))); start = calculator.GetCentralPoint(_details[i], _details[i].Length); } }