Exemplo n.º 1
0
		static public float WrapPosition(BaseSpline.SplineWrapMode wrapmode, float pos, float len)
		{
			switch(wrapmode)
			{
			case BaseSpline.SplineWrapMode.Loop:
				if(pos < 0)
				{
					int tms = (int)(-pos / len) + 1;
					pos += tms * len;
				}
				else if(pos >= len)
				{
					int tms = (int)(pos / len);
					pos -= tms * len;
				}
				break;
				
			case BaseSpline.SplineWrapMode.Once:
				if(pos < 0)
				{
					pos = 0;
				}
				else if(pos > len)
				{
					pos = len;
				}
				break;
			}
			return pos;
		}
Exemplo n.º 2
0
 internal SplineIterator(BaseSpline spline, bool reverse, int startidx, int endidx)
 {
     m_spline   = spline;
     m_reverse  = reverse;
     m_startidx = Mathf.Min(startidx, endidx);
     m_endidx   = Mathf.Max(startidx, endidx);
     Reset();
 }
Exemplo n.º 3
0
			internal SplineIterator(BaseSpline spline, bool reverse, int startidx, int endidx)
			{
				m_spline = spline;
				m_reverse = reverse;
				m_startidx = Mathf.Min(startidx, endidx);
				m_endidx = Mathf.Max(startidx, endidx);
				Reset();
			}		
	/// <summary>
	/// Calculates the point each animation curve point. 
	/// </summary>
	private void CalculatePoint(float _point, int _loopNumber, BaseSpline.SplineIterator _iterator, SplineParticles _target, float _offset)
	{
		
			_iterator.SetOffsetPercent(_point);
			
			//Calc modifiers
			
			float lifeTimeModifier = _target.GetComponent<ParticleSystem>().startLifetime;
			float loopsModifier = _target.loopNumber;
			

			Vector3 currentPosition = _target.transform.TransformPoint(_iterator.GetPosition());
			Vector3 tangentAtPoint = (_iterator.GetTangent().normalized);

			Vector3 velocityAtPoint = Vector3.zero;
			
				
			if (_point == 0 && _target.Spline.WrapMode == BaseSpline.SplineWrapMode.Loop)
			{
				_iterator.SetOffsetPercent(1-_target.pathQuality);
				previousPoint = _target.transform.TransformPoint(_iterator.GetPosition()); 

			}
			else if (_point == 0 && _target.Spline.WrapMode != BaseSpline.SplineWrapMode.Loop)
			{
				_iterator.SetOffsetPercent(_point+_target.pathQuality);
				previousPoint = _target.transform.TransformPoint(_iterator.GetPosition()); 

			}
			
			velocityAtPoint = (currentPosition - previousPoint).magnitude * tangentAtPoint;

				
			previousPoint = currentPosition;
			
			velocityAtPoint *= loopsModifier*(1/_target.pathQuality)/lifeTimeModifier;
			_target.velocityCurveX.AddKey(_point/_loopNumber + _offset,velocityAtPoint.x);
			_target.velocityCurveY.AddKey(_point/_loopNumber + _offset,velocityAtPoint.y);
			_target.velocityCurveZ.AddKey(_point/_loopNumber + _offset,velocityAtPoint.z);
		
		
	}
	/// <summary>
	/// Sets the curve points.
	/// </summary>
	private void SetCurvePoints(int _loopNumber, BaseSpline.SplineIterator _iterator, SplineParticles _target, float _offset)
	{
		previousPoint = Vector3.zero;
		
		for (float i = 0; i<=1; i += _target.pathQuality)
		{
			CalculatePoint(i, _loopNumber, _iterator, _target, _offset);
		}
		
	}