コード例 #1
0
ファイル: Network.cs プロジェクト: pdwright/VRGameJam
 // ----------------------------------------------------------------------------------------------------
 // Advances on a network using specified distance, mode and direction
 // ----------------------------------------------------------------------------------------------------
 public abstract void Advance(ref PositionInformation _positionInformation, float _distance, Network.Mode _mode, ref bool _reverseDirection);
コード例 #2
0
 // ----------------------------------------------------------------------------------------------------
 // Moves for a specified distance, mode and direction
 // ----------------------------------------------------------------------------------------------------
 public void MoveFor(float _distance, Network.Mode _mode, ref bool _reverseDirection)
 {
     m_Network.Advance(ref m_PositionInformation, _distance, _mode, ref _reverseDirection);
 }
コード例 #3
0
    // ----------------------------------------------------------------------------------------------------
    // Advances on a network using specified distance, mode and direction
    // ----------------------------------------------------------------------------------------------------
    public override void Advance(ref PositionInformation _positionInformation, float _distance, Network.Mode _mode, ref bool _reverseDirection)
    {
        _positionInformation.m_TotalDistance += _reverseDirection ? -_distance : _distance;

        // Reached the end of the network
        if (_positionInformation.m_TotalDistance < 0.0f || _positionInformation.m_TotalDistance > m_Length)
        {
            switch (_mode)
            {
            case Mode.Forward:
                End(ref _positionInformation, _reverseDirection);
                break;

            case Mode.Loop:
                Loop(ref _positionInformation, _distance, ref _reverseDirection);
                break;

            case Mode.BackAndForth:
                Reverse(ref _positionInformation, _distance, ref _reverseDirection);
                break;
            }
        }
        else
        {
            _positionInformation.m_SegmentDistance += _reverseDirection ? -_distance : _distance;

            while (_positionInformation.m_SegmentDistance < 0.0f || _positionInformation.m_SegmentDistance > m_SegmentLength[_positionInformation.m_Segment])
            {
                _positionInformation.m_SegmentDistance -= _reverseDirection ? -m_SegmentLength[_positionInformation.m_Segment - 1] : m_SegmentLength[_positionInformation.m_Segment];
                _positionInformation.m_Segment         += _reverseDirection ? -1 : 1;

                Assertion.Assert(_positionInformation.m_Segment != -1, "Bad segment number");
            }

            _positionInformation.m_SegmentRatio = _positionInformation.m_SegmentDistance / m_SegmentLength[_positionInformation.m_Segment];
            _positionInformation.m_Position     = m_Nodes[_positionInformation.m_Segment] + (m_SegmentDirection[_positionInformation.m_Segment] * _positionInformation.m_SegmentDistance);
        }
    }