Beispiel #1
0
    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);
    }
Beispiel #4
0
    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);
    }
Beispiel #5
0
    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);
        }
    }