// ---------------------------------------------------------------------------------------------------- // 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);
// ---------------------------------------------------------------------------------------------------- // 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); }
// ---------------------------------------------------------------------------------------------------- // 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); } }