コード例 #1
0
ファイル: SmokeTrail.cs プロジェクト: oathx/Six
 protected override void UpdatePoint(PCTrailPoint point, float deltaTime)
 {
     if (_clampPosition && point.PointNumber == 0)
     {
         point.Position = _clampPosition.position;
     }
 }
コード例 #2
0
 public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints)
 {
     float num = Vector3.Distance(from, to);
     Vector3 normalized = (to - from).normalized;
     float num2 = 0f;
     CircularBuffer<PCTrailPoint> circularBuffer = new CircularBuffer<PCTrailPoint>(this.GetMaxNumberOfPoints());
     int num3 = 0;
     while (num2 < num)
     {
         PCTrailPoint pCTrailPoint = new PCTrailPoint();
         pCTrailPoint.PointNumber = num3;
         pCTrailPoint.Position = from + normalized * num2;
         circularBuffer.Add(pCTrailPoint);
         this.InitialiseNewPoint(pCTrailPoint);
         num3++;
         if (distanceBetweenPoints <= 0f)
         {
             break;
         }
         num2 += distanceBetweenPoints;
     }
     PCTrailPoint pCTrailPoint2 = new PCTrailPoint();
     pCTrailPoint2.PointNumber = num3;
     pCTrailPoint2.Position = to;
     circularBuffer.Add(pCTrailPoint2);
     this.InitialiseNewPoint(pCTrailPoint2);
     PCTrail pCTrail = new PCTrail(this.GetMaxNumberOfPoints());
     pCTrail.Points = circularBuffer;
     this._fadingTrails.Add(pCTrail);
 }
コード例 #3
0
 public void Translate(Vector3 t)
 {
     if (this._activeTrail != null)
     {
         for (int i = 0; i < this._activeTrail.Points.Count; i++)
         {
             PCTrailPoint local1 = this._activeTrail.Points[i];
             local1.Position += t;
         }
     }
     if (this._fadingTrails != null)
     {
         for (int j = 0; j < this._fadingTrails.Count; j++)
         {
             PCTrail trail = this._fadingTrails[j];
             if (trail != null)
             {
                 for (int k = 0; k < trail.Points.Count; k++)
                 {
                     PCTrailPoint local2 = trail.Points[k];
                     local2.Position += t;
                 }
             }
         }
     }
     this.OnTranslate(t);
 }
コード例 #4
0
        public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints)
        {
            float   num        = Vector3.Distance(from, to);
            Vector3 normalized = (to - from).normalized;
            float   num2       = 0f;
            CircularBuffer <PCTrailPoint> circularBuffer = new CircularBuffer <PCTrailPoint>(this.GetMaxNumberOfPoints());
            int num3 = 0;

            while (num2 < num)
            {
                PCTrailPoint pCTrailPoint = new PCTrailPoint();
                pCTrailPoint.PointNumber = num3;
                pCTrailPoint.Position    = from + normalized * num2;
                circularBuffer.Add(pCTrailPoint);
                this.InitialiseNewPoint(pCTrailPoint);
                num3++;
                if (distanceBetweenPoints <= 0f)
                {
                    break;
                }
                num2 += distanceBetweenPoints;
            }
            PCTrailPoint pCTrailPoint2 = new PCTrailPoint();

            pCTrailPoint2.PointNumber = num3;
            pCTrailPoint2.Position    = to;
            circularBuffer.Add(pCTrailPoint2);
            this.InitialiseNewPoint(pCTrailPoint2);
            PCTrail pCTrail = new PCTrail(this.GetMaxNumberOfPoints());

            pCTrail.Points = circularBuffer;
            this._fadingTrails.Add(pCTrail);
        }
コード例 #5
0
 protected override void UpdatePoint(PCTrailPoint point, float deltaTime)
 {
     if (_clampPosition && point.PointNumber == 0)
     {
         point.Position = _clampPosition.position;
     }
 }
コード例 #6
0
 protected bool AnyElement(CircularBuffer <PCTrailPoint> InPoints)
 {
     for (int i = 0; i < InPoints.Count; i++)
     {
         PCTrailPoint pCTrailPoint = InPoints[i];
         if (pCTrailPoint.TimeActive() < this.TrailData.Lifetime)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #7
0
 protected void AddPoint(PCTrailPoint newPoint, Vector3 pos)
 {
     if (base._activeTrail != null)
     {
         newPoint.Position    = pos;
         newPoint.PointNumber = (base._activeTrail.Points.Count != 0) ? (base._activeTrail.Points[base._activeTrail.Points.Count - 1].PointNumber + 1) : 0;
         this.InitialiseNewPoint(newPoint);
         newPoint.SetDistanceFromStart((base._activeTrail.Points.Count != 0) ? (base._activeTrail.Points[base._activeTrail.Points.Count - 1].GetDistanceFromStart() + Vector3.Distance(base._activeTrail.Points[base._activeTrail.Points.Count - 1].Position, pos)) : 0f);
         if (base.TrailData.UseForwardOverride)
         {
             newPoint.Forward = base.TrailData.ForwardOverride.normalized;
         }
         base._activeTrail.Points.Add(newPoint);
     }
 }
コード例 #8
0
ファイル: SmokePlume.cs プロジェクト: TonyDongGuaPi/joework
 protected override void UpdateTrail(PCTrail trail, float deltaTime)
 {
     if (this._noDecay)
     {
         return;
     }
     using (IEnumerator <PCTrailPoint> enumerator = trail.Points.GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             PCTrailPoint current = enumerator.get_Current();
             current.Position += this.ConstantForce * deltaTime;
         }
     }
 }
コード例 #9
0
 protected void AddPoint(PCTrailPoint newPoint, Vector3 pos)
 {
     if (this._activeTrail != null)
     {
         newPoint.Position    = pos;
         newPoint.PointNumber = (this._activeTrail.Points.Count != 0) ? (this._activeTrail.Points[this._activeTrail.Points.Count - 1].PointNumber + 1) : 0;
         this.InitialiseNewPoint(newPoint);
         newPoint.SetDistanceFromStart((this._activeTrail.Points.Count != 0) ? (this._activeTrail.Points[this._activeTrail.Points.Count - 1].GetDistanceFromStart() + Vector3.Distance(this._activeTrail.Points[this._activeTrail.Points.Count - 1].Position, pos)) : 0f);
         if (this.TrailData.UseForwardOverride)
         {
             newPoint.Forward = !this.TrailData.ForwardOverrideRelative ? this.TrailData.ForwardOverride.normalized : this._t.TransformDirection(this.TrailData.ForwardOverride.normalized);
         }
         this._activeTrail.Points.Add(newPoint);
     }
 }
コード例 #10
0
        /// <summary>
        /// Insert a trail into this trail renderer.
        /// </summary>
        /// <param name="from">The start position of the trail.</param>
        /// <param name="to">The end position of the trail.</param>
        /// <param name="distanceBetweenPoints">Distance between each point on the trail</param>
        public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints)
        {
            float distanceBetween = Vector3.Distance(from, to);

            Vector3 dirVector = to - from;

            dirVector = dirVector.normalized;

            float currentLength = 0;

            CircularBuffer <PCTrailPoint> newLine = new CircularBuffer <PCTrailPoint>(GetMaxNumberOfPoints());
            int pointNumber = 0;

            while (currentLength < distanceBetween)
            {
                PCTrailPoint newPoint = new PCTrailPoint();
                newPoint.PointNumber = pointNumber;
                newPoint.Position    = from + dirVector * currentLength;
                newLine.Add(newPoint);
                InitialiseNewPoint(newPoint);

                pointNumber++;

                if (distanceBetweenPoints <= 0)
                {
                    break;
                }
                else
                {
                    currentLength += distanceBetweenPoints;
                }
            }

            PCTrailPoint lastPoint = new PCTrailPoint();

            lastPoint.PointNumber = pointNumber;
            lastPoint.Position    = to;
            newLine.Add(lastPoint);
            InitialiseNewPoint(lastPoint);

            PCTrail newTrail = new PCTrail(GetMaxNumberOfPoints());

            newTrail.Points = newLine;

            _fadingTrails.Add(newTrail);
        }
コード例 #11
0
        protected override void Update()
        {
            if (_emit)
            {
                _distanceMoved += Vector3.Distance(_t.position, _lastPosition);

                if (_distanceMoved != 0 && _distanceMoved >= MinVertexDistance)
                {
                    AddPoint(PCTrailPoint.New(), _t.position);
                    _distanceMoved = 0;
                }

                _lastPosition = _t.position;
            }

            base.Update();
        }
コード例 #12
0
ファイル: SmoothTrail.cs プロジェクト: pikaqiufk/Client
        /*
         * void OnDrawGizmos()
         * {
         *  if (Application.isPlaying && _controlPoints != null)
         *  {
         *      for (int i = 0; i < _controlPoints.Count; i++)
         *      {
         *          Gizmos.color = Color.red;
         *          Gizmos.DrawSphere(_controlPoints[i].p, 0.01f);
         *
         *          if (i < _controlPoints.Count - 1)
         *          {
         *              Vector3 Handle1, Handle2;
         *              float distanceBetween = Vector3.Distance(_controlPoints[i].p, _controlPoints[i + 1].p) / 2;
         *              if (i == 0)
         *              {
         *                  Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i].p).normalized * distanceBetween;
         *              }
         *              else
         *              {
         *                  Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i - 1].p).normalized * distanceBetween;
         *              }
         *
         *              int nextI = i + 1;
         *
         *              if (nextI == _controlPoints.Count - 1)
         *              {
         *                  Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI].p).normalized * distanceBetween;
         *              }
         *              else
         *              {
         *                  Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI + 1].p).normalized * distanceBetween;
         *              }
         *
         *              Gizmos.color = Color.green;
         *              Gizmos.DrawSphere(Handle1, 0.01f);
         *              Gizmos.DrawLine(_controlPoints[i].p, Handle1);
         *              Gizmos.color = Color.blue;
         *              Gizmos.DrawSphere(Handle2, 0.01f);
         *              Gizmos.DrawLine(_controlPoints[nextI].p, Handle2);
         *
         *
         *              Vector3 current = _controlPoints[i].p;
         *
         *              for (int pointBetween = 0; pointBetween < PointsBetweenControlPoints; pointBetween++)
         *              {
         *                  Vector3 next = GetPointAlongCurve(_controlPoints[i].p, Handle1, _controlPoints[i + 1].p, Handle2, ((pointBetween + 1) / ((float)PointsBetweenControlPoints + 1f)), 0.3f);
         *
         *                  Gizmos.DrawLine(current, next);
         *
         *                  Gizmos.color = Color.yellow;
         *                  Gizmos.DrawSphere(next, 0.01f);
         *
         *                  current = next;
         *              }
         *
         *              Gizmos.color = Color.blue;
         *              Gizmos.DrawLine(current, _controlPoints[i + 1].p);
         *
         *          }
         *      }
         *  }
         * }
         */

        protected override void OnStartEmit()
        {
            _lastPosition  = _t.position;
            _distanceMoved = 0;
            _controlPoints = new CircularBuffer <ControlPoint>(MaxControlPoints);

            _controlPoints.Add(new ControlPoint {
                p = _lastPosition
            });

            if (TrailData.UseForwardOverride)
            {
                _controlPoints[0].forward = TrailData.ForwardOverrideRelative
                               ? _t.TransformDirection(TrailData.ForwardOverride.normalized)
                               : TrailData.ForwardOverride.normalized;
            }

            AddPoint(PCTrailPoint.New(), _lastPosition);

            AddControlPoint(_lastPosition);
        }
コード例 #13
0
        public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints)
        {
            float   num        = Vector3.Distance(from, to);
            Vector3 normalized = to - from;

            normalized = normalized.normalized;
            float num2 = 0f;
            CircularBuffer <PCTrailPoint> buffer = new CircularBuffer <PCTrailPoint>(this.GetMaxNumberOfPoints());
            int num3 = 0;

            while (num2 < num)
            {
                PCTrailPoint point = new PCTrailPoint {
                    PointNumber = num3,
                    Position    = from + ((Vector3)(normalized * num2))
                };
                buffer.Add(point);
                this.InitialiseNewPoint(point);
                num3++;
                if (distanceBetweenPoints <= 0f)
                {
                    break;
                }
                num2 += distanceBetweenPoints;
            }
            PCTrailPoint item = new PCTrailPoint {
                PointNumber = num3,
                Position    = to
            };

            buffer.Add(item);
            this.InitialiseNewPoint(item);
            PCTrail trail = new PCTrail(this.GetMaxNumberOfPoints())
            {
                Points = buffer
            };

            this._fadingTrails.Add(trail);
        }
コード例 #14
0
ファイル: SmoothTrail.cs プロジェクト: pikaqiufk/Client
        private void AddControlPoint(Vector3 position)
        {
            for (int i = 0; i < PointsBetweenControlPoints; i++)
            {
                AddPoint(PCTrailPoint.New(), position);
            }

            AddPoint(PCTrailPoint.New(), position);

            ControlPoint newCP = new ControlPoint {
                p = position
            };

            if (TrailData.UseForwardOverride)
            {
                newCP.forward = TrailData.ForwardOverrideRelative
                               ? _t.TransformDirection(TrailData.ForwardOverride.normalized)
                               : TrailData.ForwardOverride.normalized;
            }

            _controlPoints.Add(newCP);
        }
コード例 #15
0
ファイル: SmokePlume.cs プロジェクト: isoundy000/wzry-1
 protected override void UpdateTrail(PCTrail trail, float deltaTime)
 {
     if (!base._noDecay)
     {
         IEnumerator <PCTrailPoint> enumerator = trail.Points.GetEnumerator();
         try
         {
             while (enumerator.MoveNext())
             {
                 PCTrailPoint current = enumerator.Current;
                 current.Position += (Vector3)(this.ConstantForce * deltaTime);
             }
         }
         finally
         {
             if (enumerator == null)
             {
             }
             enumerator.Dispose();
         }
     }
 }
コード例 #16
0
        public void Dispose()
        {
            if (Mesh != null)
            {
                if (Application.isEditor)
                {
                    UnityEngine.Object.DestroyImmediate(Mesh, true);
                }
                else
                {
                    UnityEngine.Object.Destroy(Mesh);
                }
            }

            for (int i = 0; i < Points.Count; i++)
            {
                PCTrailPoint.Release(Points[i]);
            }

            Points.Clear();
            Points = null;
        }
コード例 #17
0
        protected void AddPoint(PCTrailPoint newPoint, Vector3 pos)
        {
            if (_activeTrail == null)
            {
                return;
            }

            newPoint.Position    = pos;
            newPoint.PointNumber = _activeTrail.Points.Count == 0 ? 0 : _activeTrail.Points[_activeTrail.Points.Count - 1].PointNumber + 1;
            InitialiseNewPoint(newPoint);

            newPoint.SetDistanceFromStart(_activeTrail.Points.Count == 0
                                              ? 0
                                              : _activeTrail.Points[_activeTrail.Points.Count - 1].GetDistanceFromStart() + Vector3.Distance(_activeTrail.Points[_activeTrail.Points.Count - 1].Position, pos));

            if (TrailData.UseForwardOverride)
            {
                newPoint.Forward = TrailData.ForwardOverrideRelative
                                       ? _t.TransformDirection(TrailData.ForwardOverride.normalized)
                                       : TrailData.ForwardOverride.normalized;
            }

            _activeTrail.Points.Add(newPoint);
        }
コード例 #18
0
 protected virtual void InitialiseNewPoint(PCTrailPoint newPoint)
 {
 }
コード例 #19
0
        protected override void UpdateTrail(PCTrail trail, float deltaTime)
        {
            if (!trail.IsActiveTrail)
            {
                return;
            }
            int num = 0;

            for (int i = 0; i < this._controlPoints.Count; i++)
            {
                trail.Points[num].Position = this._controlPoints[i].p;
                if (this.TrailData.UseForwardOverride)
                {
                    trail.Points[num].Forward = this._controlPoints[i].forward;
                }
                num++;
                if (i < this._controlPoints.Count - 1)
                {
                    float   d = Vector3.Distance(this._controlPoints[i].p, this._controlPoints[i + 1].p) / 2f;
                    Vector3 curveStartHandle;
                    if (i == 0)
                    {
                        curveStartHandle = this._controlPoints[i].p + (this._controlPoints[i + 1].p - this._controlPoints[i].p).normalized * d;
                    }
                    else
                    {
                        curveStartHandle = this._controlPoints[i].p + (this._controlPoints[i + 1].p - this._controlPoints[i - 1].p).normalized * d;
                    }
                    int     num2 = i + 1;
                    Vector3 curveEndHandle;
                    if (num2 == this._controlPoints.Count - 1)
                    {
                        curveEndHandle = this._controlPoints[num2].p + (this._controlPoints[num2 - 1].p - this._controlPoints[num2].p).normalized * d;
                    }
                    else
                    {
                        curveEndHandle = this._controlPoints[num2].p + (this._controlPoints[num2 - 1].p - this._controlPoints[num2 + 1].p).normalized * d;
                    }
                    PCTrailPoint pCTrailPoint  = trail.Points[num - 1];
                    PCTrailPoint pCTrailPoint2 = trail.Points[num - 1 + this.PointsBetweenControlPoints + 1];
                    for (int j = 0; j < this.PointsBetweenControlPoints; j++)
                    {
                        float t = ((float)j + 1f) / ((float)this.PointsBetweenControlPoints + 1f);
                        trail.Points[num].Position = this.GetPointAlongCurve(this._controlPoints[i].p, curveStartHandle, this._controlPoints[i + 1].p, curveEndHandle, t, 0.3f);
                        trail.Points[num].SetTimeActive(Mathf.Lerp(pCTrailPoint.TimeActive(), pCTrailPoint2.TimeActive(), t));
                        if (this.TrailData.UseForwardOverride)
                        {
                            trail.Points[num].Forward = Vector3.Lerp(pCTrailPoint.Forward, pCTrailPoint2.Forward, t);
                        }
                        num++;
                    }
                }
            }
            int   num3 = this._controlPoints.Count - 1 + (this._controlPoints.Count - 1) * this.PointsBetweenControlPoints;
            int   num4 = num3 - this.PointsBetweenControlPoints - 1;
            int   num5 = num3 + 1;
            float num6 = trail.Points[num4].GetDistanceFromStart();

            for (int k = num4 + 1; k < num5; k++)
            {
                num6 += Vector3.Distance(trail.Points[k - 1].Position, trail.Points[k].Position);
                trail.Points[k].SetDistanceFromStart(num6);
            }
        }
コード例 #20
0
 public static void Release(PCTrailPoint p)
 {
     sPointStack.Push(p);
 }
コード例 #21
0
ファイル: TrailRenderer_Base.cs プロジェクト: oathx/Six
        protected virtual void UpdatePoint(PCTrailPoint point, float deltaTime)
        {

        }
コード例 #22
0
        private void GenerateMesh(PCTrail trail)
        {
            trail.Mesh.Clear(false);
            Vector3 vector = (!(Camera.main != null)) ? Vector3.forward : Camera.main.transform.forward;

            if (this.TrailData.UseForwardOverride)
            {
                vector = this.TrailData.ForwardOverride.normalized;
            }
            trail.activePointCount = this.NumberOfActivePoints(trail);
            if (trail.activePointCount < 2)
            {
                return;
            }
            int num = 0;

            for (int i = 0; i < trail.Points.Count; i++)
            {
                PCTrailPoint pCTrailPoint = trail.Points[i];
                float        num2         = pCTrailPoint.TimeActive() / this.TrailData.Lifetime;
                if (pCTrailPoint.TimeActive() <= this.TrailData.Lifetime)
                {
                    if (this.TrailData.UseForwardOverride && this.TrailData.ForwardOverrideRelative)
                    {
                        vector = pCTrailPoint.Forward;
                    }
                    Vector3 a = Vector3.zero;
                    if (i < trail.Points.Count - 1)
                    {
                        a = Vector3.Cross((trail.Points[i + 1].Position - pCTrailPoint.Position).normalized, vector).normalized;
                    }
                    else
                    {
                        a = Vector3.Cross((pCTrailPoint.Position - trail.Points[i - 1].Position).normalized, vector).normalized;
                    }
                    Color color = (!this.TrailData.StretchColorToFit) ? ((!this.TrailData.UsingSimpleColor) ? this.TrailData.ColorOverLife.Evaluate(num2) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, num2)) : ((!this.TrailData.UsingSimpleColor) ? this.TrailData.ColorOverLife.Evaluate(1f - (float)num / (float)trail.activePointCount / 2f) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, 1f - (float)num / (float)trail.activePointCount / 2f));
                    float d     = (!this.TrailData.StretchSizeToFit) ? ((!this.TrailData.UsingSimpleSize) ? this.TrailData.SizeOverLife.Evaluate(num2) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, num2)) : ((!this.TrailData.UsingSimpleSize) ? this.TrailData.SizeOverLife.Evaluate(1f - (float)num / (float)trail.activePointCount / 2f) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, 1f - (float)num / (float)trail.activePointCount / 2f));
                    trail.verticies[num] = pCTrailPoint.Position + a * d;
                    if (this.TrailData.MaterialTileLength <= 0f)
                    {
                        trail.uvs[num] = new Vector2((float)num / (float)trail.activePointCount / 2f, 0f);
                    }
                    else
                    {
                        trail.uvs[num] = new Vector2(pCTrailPoint.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 0f);
                    }
                    trail.normals[num] = vector;
                    trail.colors[num]  = color;
                    num++;
                    trail.verticies[num] = pCTrailPoint.Position - a * d;
                    if (this.TrailData.MaterialTileLength <= 0f)
                    {
                        trail.uvs[num] = new Vector2((float)num / (float)trail.activePointCount / 2f, 1f);
                    }
                    else
                    {
                        trail.uvs[num] = new Vector2(pCTrailPoint.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 1f);
                    }
                    trail.normals[num] = vector;
                    trail.colors[num]  = color;
                    num++;
                }
            }
            Vector2 v = trail.verticies[num - 1];

            for (int j = num; j < trail.verticies.Length; j++)
            {
                trail.verticies[j] = v;
            }
            int num3 = 0;

            for (int k = 0; k < 2 * (trail.activePointCount - 1); k++)
            {
                if (k % 2 == 0)
                {
                    trail.indicies[num3] = k;
                    num3++;
                    trail.indicies[num3] = k + 1;
                    num3++;
                    trail.indicies[num3] = k + 2;
                }
                else
                {
                    trail.indicies[num3] = k + 2;
                    num3++;
                    trail.indicies[num3] = k + 1;
                    num3++;
                    trail.indicies[num3] = k;
                }
                num3++;
            }
            int num4 = trail.indicies[num3 - 1];

            for (int l = num3; l < trail.indicies.Length; l++)
            {
                trail.indicies[l] = num4;
            }
            trail.Mesh.vertices = trail.verticies;
            trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0);
            trail.Mesh.uv      = trail.uvs;
            trail.Mesh.normals = trail.normals;
            trail.Mesh.colors  = trail.colors;
        }
コード例 #23
0
 protected void AddPoint(PCTrailPoint newPoint, Vector3 pos)
 {
     if (this._activeTrail == null)
     {
         return;
     }
     newPoint.Position = pos;
     newPoint.PointNumber = ((this._activeTrail.Points.Count != 0) ? (this._activeTrail.Points[this._activeTrail.Points.Count - 1].PointNumber + 1) : 0);
     this.InitialiseNewPoint(newPoint);
     newPoint.SetDistanceFromStart((this._activeTrail.Points.Count != 0) ? (this._activeTrail.Points[this._activeTrail.Points.Count - 1].GetDistanceFromStart() + Vector3.Distance(this._activeTrail.Points[this._activeTrail.Points.Count - 1].Position, pos)) : 0f);
     if (this.TrailData.UseForwardOverride)
     {
         newPoint.Forward = ((!this.TrailData.ForwardOverrideRelative) ? this.TrailData.ForwardOverride.normalized : this._t.TransformDirection(this.TrailData.ForwardOverride.normalized));
     }
     this._activeTrail.Points.Add(newPoint);
 }
コード例 #24
0
 protected virtual void UpdatePoint(PCTrailPoint pCTrailPoint, float deltaTime)
 {
 }
コード例 #25
0
ファイル: SmokePlume.cs プロジェクト: oathx/Six
 protected override void UpdatePoint(PCTrailPoint point, float deltaTime)
 {
     point.Position += ConstantForce*deltaTime;
 }
コード例 #26
0
        protected virtual void GenerateTrail(PCTrail trail)
        {
            int num = 0;

            for (int i = 0; i < this._controlPoints.Count; i++)
            {
                trail.Points[num].Position = this._controlPoints[i].p;
                if (base.TrailData.UseForwardOverride)
                {
                    trail.Points[num].Forward = this._controlPoints[i].forward;
                }
                num++;
                if (i < (this._controlPoints.Count - 1))
                {
                    Vector3 vector;
                    Vector3 vector2;
                    float   num3 = Vector3.Distance(this._controlPoints[i].p, this._controlPoints[i + 1].p) / 2f;
                    if (i == 0)
                    {
                        Vector3 vector3 = this._controlPoints[i + 1].p - this._controlPoints[i].p;
                        vector = this._controlPoints[i].p + ((Vector3)(vector3.normalized * num3));
                    }
                    else
                    {
                        Vector3 vector4 = this._controlPoints[i + 1].p - this._controlPoints[i - 1].p;
                        vector = this._controlPoints[i].p + ((Vector3)(vector4.normalized * num3));
                    }
                    int num4 = i + 1;
                    if (num4 == (this._controlPoints.Count - 1))
                    {
                        Vector3 vector5 = this._controlPoints[num4 - 1].p - this._controlPoints[num4].p;
                        vector2 = this._controlPoints[num4].p + ((Vector3)(vector5.normalized * num3));
                    }
                    else
                    {
                        Vector3 vector6 = this._controlPoints[num4 - 1].p - this._controlPoints[num4 + 1].p;
                        vector2 = this._controlPoints[num4].p + ((Vector3)(vector6.normalized * num3));
                    }
                    PCTrailPoint point  = trail.Points[num - 1];
                    PCTrailPoint point2 = trail.Points[((num - 1) + this.PointsBetweenControlPoints) + 1];
                    for (int k = 0; k < this.PointsBetweenControlPoints; k++)
                    {
                        float t = (k + 1f) / (this.PointsBetweenControlPoints + 1f);
                        trail.Points[num].Position = this.GetPointAlongCurve(this._controlPoints[i].p, vector, this._controlPoints[i + 1].p, vector2, t, 0.3f);
                        trail.Points[num].SetTimeActive(Mathf.Lerp(point.TimeActive(), point2.TimeActive(), t));
                        if (base.TrailData.UseForwardOverride)
                        {
                            trail.Points[num].Forward = Vector3.Lerp(point.Forward, point2.Forward, t);
                        }
                        num++;
                    }
                }
            }
            float distance = 0f;

            for (int j = 1; j < trail.Points.Count; j++)
            {
                distance += Vector3.Distance(trail.Points[j - 1].Position, trail.Points[j].Position);
                trail.Points[j].SetDistanceFromStart(distance);
            }
        }
コード例 #27
0
        private void GenerateMesh(PCTrail trail)
        {
            trail.Mesh.Clear(false);
            Vector3 rhs = (Camera.main == null) ? Vector3.forward : Camera.main.transform.forward;

            if (this.TrailData.UseForwardOverride)
            {
                rhs = this.TrailData.ForwardOverride.normalized;
            }
            trail.activePointCount = this.NumberOfActivePoints(trail);
            if (trail.activePointCount >= 2)
            {
                int index = 0;
                for (int i = 0; i < trail.Points.Count; i++)
                {
                    PCTrailPoint point = trail.Points[i];
                    float        time  = point.TimeActive() / this.TrailData.Lifetime;
                    if (point.TimeActive() <= this.TrailData.Lifetime)
                    {
                        if (this.TrailData.UseForwardOverride && this.TrailData.ForwardOverrideRelative)
                        {
                            rhs = point.Forward;
                        }
                        Vector3 zero = Vector3.zero;
                        if (i < (trail.Points.Count - 1))
                        {
                            Vector3 vector4 = trail.Points[i + 1].Position - point.Position;
                            zero = Vector3.Cross(vector4.normalized, rhs).normalized;
                        }
                        else
                        {
                            Vector3 vector6 = point.Position - trail.Points[i - 1].Position;
                            zero = Vector3.Cross(vector6.normalized, rhs).normalized;
                        }
                        Color color = !this.TrailData.StretchColorToFit ? (!this.TrailData.UsingSimpleColor ? this.TrailData.ColorOverLife.Evaluate(time) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, time)) : (!this.TrailData.UsingSimpleColor ? this.TrailData.ColorOverLife.Evaluate(1f - ((((float)index) / ((float)trail.activePointCount)) / 2f)) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, 1f - ((((float)index) / ((float)trail.activePointCount)) / 2f)));
                        float num4  = !this.TrailData.StretchSizeToFit ? (!this.TrailData.UsingSimpleSize ? this.TrailData.SizeOverLife.Evaluate(time) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, time)) : (!this.TrailData.UsingSimpleSize ? this.TrailData.SizeOverLife.Evaluate(1f - ((((float)index) / ((float)trail.activePointCount)) / 2f)) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, 1f - ((((float)index) / ((float)trail.activePointCount)) / 2f)));
                        trail.verticies[index] = point.Position + ((Vector3)(zero * num4));
                        if (this.TrailData.MaterialTileLength <= 0f)
                        {
                            trail.uvs[index] = new Vector2((((float)index) / ((float)trail.activePointCount)) / 2f, 0f);
                        }
                        else
                        {
                            trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 0f);
                        }
                        trail.normals[index] = rhs;
                        trail.colors[index]  = color;
                        index++;
                        trail.verticies[index] = point.Position - ((Vector3)(zero * num4));
                        if (this.TrailData.MaterialTileLength <= 0f)
                        {
                            trail.uvs[index] = new Vector2((((float)index) / ((float)trail.activePointCount)) / 2f, 1f);
                        }
                        else
                        {
                            trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 1f);
                        }
                        trail.normals[index] = rhs;
                        trail.colors[index]  = color;
                        index++;
                    }
                }
                Vector2 vector3 = trail.verticies[index - 1];
                for (int j = index; j < trail.verticies.Length; j++)
                {
                    trail.verticies[j] = (Vector3)vector3;
                }
                int num6 = 0;
                for (int k = 0; k < (2 * (trail.activePointCount - 1)); k++)
                {
                    if ((k % 2) == 0)
                    {
                        trail.indicies[num6] = k;
                        num6++;
                        trail.indicies[num6] = k + 1;
                        num6++;
                        trail.indicies[num6] = k + 2;
                    }
                    else
                    {
                        trail.indicies[num6] = k + 2;
                        num6++;
                        trail.indicies[num6] = k + 1;
                        num6++;
                        trail.indicies[num6] = k;
                    }
                    num6++;
                }
                int num8 = trail.indicies[num6 - 1];
                for (int m = num6; m < trail.indicies.Length; m++)
                {
                    trail.indicies[m] = num8;
                }
                trail.Mesh.vertices = trail.verticies;
                trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0);
                trail.Mesh.uv      = trail.uvs;
                trail.Mesh.normals = trail.normals;
                trail.Mesh.colors  = trail.colors;
            }
        }
コード例 #28
0
        private void GenerateMesh(PCTrail trail)
        {
            trail.Mesh.Clear(false);

            float3 camForward = Camera.main != null ?(float3)Camera.main.transform.forward : float3(0, 0, 1);

            if (TrailData.UseForwardOverride)
            {
                camForward = normalize(TrailData.ForwardOverride);
            }

            trail.activePointCount = NumberOfActivePoints(trail);

            if (trail.activePointCount < 2)
            {
                return;
            }
            Profiler.BeginSample("generameshTest");

            int vertIndex = 0;

            for (int i = 0; i < trail.Points.Count; i++)
            {
                PCTrailPoint p         = trail.Points[i];
                float        timeAlong = p.TimeActive() / TrailData.Lifetime;

                if (p.TimeActive() > TrailData.Lifetime)
                {
                    continue;
                }

                if (TrailData.UseForwardOverride && TrailData.ForwardOverrideRelative)
                {
                    camForward = p.Forward;
                }

                float3 Cross = float3.zero;

                if (i < trail.Points.Count - 1)
                {
                    Cross =
                        cross(normalize(trail.Points[i + 1].Position - p.Position), camForward);
                }
                else
                {
                    Cross =
                        cross(normalize(p.Position - trail.Points[i - 1].Position), camForward);
                }
                Cross = normalize(Cross);


                //yuck! lets move these into their own functions some time
                Color c = TrailData.StretchColorToFit ?
                          (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.ColorOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) :
                          (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, timeAlong) : TrailData.ColorOverLife.Evaluate(timeAlong));

                float s = TrailData.StretchSizeToFit ?
                          (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.SizeOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) :
                          (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, timeAlong) : TrailData.SizeOverLife.Evaluate(timeAlong));


                trail.vertexDatas[vertIndex].verticies = p.Position + Cross * s;
                trail.vertexDatas[vertIndex].normals   = camForward;
                if (TrailData.MaterialTileLength <= 0)
                {
                    trail.vertexDatas[vertIndex].uvs = new float2((float)vertIndex / (float)trail.activePointCount / 2f, 0);
                }
                else
                {
                    trail.vertexDatas[vertIndex].uvs = new float2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 0);
                }


                trail.vertexDatas[vertIndex].colors = c;

                vertIndex++;
                trail.vertexDatas[vertIndex].verticies = p.Position - Cross * s;
                trail.vertexDatas[vertIndex].normals   = camForward;
                if (TrailData.MaterialTileLength <= 0)
                {
                    trail.vertexDatas[vertIndex].uvs = new float2((float)vertIndex / (float)trail.activePointCount / 2f, 1);
                }
                else
                {
                    trail.vertexDatas[vertIndex].uvs = new float2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 1);
                }


                trail.vertexDatas[vertIndex].colors = c;
                vertIndex++;
            }

            float3 finalPosition = trail.vertexDatas[vertIndex - 1].verticies;

            for (int i = vertIndex; i < trail.vertexDatas.Length; i++)
            {
                trail.vertexDatas[i].verticies = finalPosition;
            }

            int indIndex = 0;

            for (int pointIndex = 0; pointIndex < 2 * (trail.activePointCount - 1); pointIndex++)
            {
                if (pointIndex % 2 == 0)
                {
                    trail.indicies[indIndex] = pointIndex;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex + 1;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex + 2;
                }
                else
                {
                    trail.indicies[indIndex] = pointIndex + 2;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex + 1;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex;
                }

                indIndex++;
            }

            Profiler.EndSample();
            Profiler.BeginSample("SetMeshVertexTest");

            trail.Mesh.SetVertexBufferParams(trail.vertexDatas.Length,
                                             new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3),
                                             new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3),
                                             new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.UNorm8, 4),
                                             new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2));

            trail.Mesh.SetVertexBufferData(trail.vertexDatas, 0, 0, trail.vertexDatas.Length);

            trail.Mesh.SetIndexBufferParams(trail.indicies.Length, IndexFormat.UInt32);
            trail.Mesh.SetIndexBufferData(trail.indicies, 0, 0, trail.indicies.Length);
            trail.Mesh.subMeshCount = 1;
            var subMeshDescriptor = new SubMeshDescriptor(0, trail.indicies.Length, MeshTopology.Triangles);

            trail.Mesh.SetSubMesh(0, subMeshDescriptor);

            Profiler.EndSample();
        }
コード例 #29
0
        private void GenerateMesh(PCTrail trail)
        {
            trail.Mesh.Clear(false);
            Vector3 rhs = (Camera.main == null) ? Vector3.forward : Camera.main.transform.forward;

            if (base.TrailData.UseForwardOverride)
            {
                rhs = base.TrailData.ForwardOverride.normalized;
            }
            trail.activePointCount = trail.Points.Count;
            if (trail.activePointCount >= 2)
            {
                int index = 0;
                for (int i = 0; i < trail.Points.Count; i++)
                {
                    PCTrailPoint point = trail.Points[i];
                    if (point.TimeActive() <= base.TrailData.Lifetime)
                    {
                        if (base.TrailData.UseForwardOverride && base.TrailData.ForwardOverrideRelative)
                        {
                            rhs = point.Forward;
                        }
                        Vector3 zero = Vector3.zero;
                        if (i < (trail.Points.Count - 1))
                        {
                            if (base.TrailData.UseForwardOverride && base.TrailData.ForwardOverrideRelative)
                            {
                                Vector3 vector5 = trail.Points[i + 1].Position - point.Position;
                                zero = Vector3.Cross(vector5.normalized, rhs).normalized;
                            }
                            else
                            {
                                Vector3 vector7 = trail.Points[i + 1].Position - point.Position;
                                zero = vector7.normalized;
                            }
                        }
                        else if (base.TrailData.UseForwardOverride && base.TrailData.ForwardOverrideRelative)
                        {
                            Vector3 vector8 = point.Position - trail.Points[i - 1].Position;
                            zero = Vector3.Cross(vector8.normalized, rhs).normalized;
                        }
                        else
                        {
                            Vector3 vector10 = point.Position - trail.Points[i - 1].Position;
                            zero = vector10.normalized;
                        }
                        trail.verticies[index] = point.Position;
                        trail.normals[index]   = (Vector3)(zero * base.StretchUpRatio);
                        if (base.clockSize)
                        {
                            trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 1f);
                        }
                        else
                        {
                            trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 0f);
                        }
                        trail.colors[index] = Color.white;
                        index++;
                        trail.verticies[index] = point.Position;
                        trail.normals[index]   = (Vector3)(-zero * base.StretchDownRatio);
                        if (base.clockSize)
                        {
                            trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 0f);
                        }
                        else
                        {
                            trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 1f);
                        }
                        trail.colors[index] = Color.white;
                        index++;
                    }
                }
                Vector2 vector3 = trail.verticies[index - 1];
                Vector3 vector4 = trail.normals[index - 1];
                for (int j = index; j < trail.verticies.Length; j++)
                {
                    trail.verticies[j] = (Vector3)vector3;
                    trail.normals[j]   = vector4;
                }
                int num4 = 0;
                for (int k = 0; k < (2 * (trail.activePointCount - 1)); k++)
                {
                    if ((k % 2) == 0)
                    {
                        trail.indicies[num4] = k;
                        num4++;
                        trail.indicies[num4] = k + 1;
                        num4++;
                        trail.indicies[num4] = k + 2;
                    }
                    else
                    {
                        trail.indicies[num4] = k + 2;
                        num4++;
                        trail.indicies[num4] = k + 1;
                        num4++;
                        trail.indicies[num4] = k;
                    }
                    num4++;
                }
                int num6 = trail.indicies[num4 - 1];
                for (int m = num4; m < trail.indicies.Length; m++)
                {
                    trail.indicies[m] = num6;
                }
                trail.Mesh.vertices = trail.verticies;
                trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0);
                trail.Mesh.uv      = trail.uvs;
                trail.Mesh.normals = trail.normals;
                trail.Mesh.colors  = trail.colors;
            }
        }
コード例 #30
0
ファイル: TrailRenderer_Base.cs プロジェクト: oathx/Six
        /// <summary>
        /// Insert a trail into this trail renderer. 
        /// </summary>
        /// <param name="from">The start position of the trail.</param>
        /// <param name="to">The end position of the trail.</param>
        /// <param name="distanceBetweenPoints">Distance between each point on the trail</param>
        public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints)
        {
            float distanceBetween = Vector3.Distance(from, to);

            Vector3 dirVector = to - from;
            dirVector = dirVector.normalized;

            float currentLength = 0;

            CircularBuffer<PCTrailPoint> newLine = new CircularBuffer<PCTrailPoint>(MaxNumberOfPoints);
            int pointNumber = 0;
            while (currentLength < distanceBetween) 
            {
                PCTrailPoint newPoint = new PCTrailPoint();
                newPoint.PointNumber = pointNumber;
                newPoint.Position = from + dirVector*currentLength;
                newLine.Add(newPoint);
                InitialiseNewPoint(newPoint);

                pointNumber++;

                if (distanceBetweenPoints <= 0)
                    break;
                else
                    currentLength += distanceBetweenPoints;
            }

            PCTrailPoint lastPoint = new PCTrailPoint();
            lastPoint.PointNumber = pointNumber;
            lastPoint.Position = to;
            newLine.Add(lastPoint);
            InitialiseNewPoint(lastPoint);

            _fadingTrails.Add(newLine);
        }
コード例 #31
0
ファイル: TrailRenderer_Base.cs プロジェクト: oathx/Six
        protected void AddPoint(PCTrailPoint newPoint, Vector3 pos)
        {
            if (_activeTrail == null)
                return;

            newPoint.Position = pos;
            newPoint.PointNumber = _activeTrail.Count == 0 ? 0 : _activeTrail[_activeTrail.Count - 1].PointNumber + 1;
            InitialiseNewPoint(newPoint);

            newPoint.SetDistanceFromStart(_activeTrail.Count == 0
                                              ? 0
                                              : _activeTrail[_activeTrail.Count - 1].GetDistanceFromStart() + Vector3.Distance(_activeTrail[_activeTrail.Count - 1].Position, pos));

            if(TrailData.UseForwardOverride)
            {
                newPoint.Forward = TrailData.ForwardOverideRelative
                                       ? _t.TransformDirection(TrailData.ForwardOverride.normalized)
                                       : TrailData.ForwardOverride.normalized;
            }

            _activeTrail.Add(newPoint);
        }
コード例 #32
0
        private void GenerateMesh(PCTrail trail)
        {
            trail.Mesh.Clear(false);

            Vector3 camForward = Camera.main != null ? Camera.main.transform.forward : Vector3.forward;

            if (TrailData.UseForwardOverride)
            {
                camForward = TrailData.ForwardOverride.normalized;
            }

            trail.activePointCount = NumberOfActivePoints(trail);

            if (trail.activePointCount < 2)
            {
                return;
            }


            int vertIndex = 0;

            for (int i = 0; i < trail.Points.Count; i++)
            {
                PCTrailPoint p         = trail.Points[i];
                float        timeAlong = p.TimeActive() / TrailData.Lifetime;

                if (p.TimeActive() > TrailData.Lifetime)
                {
                    continue;
                }

                if (TrailData.UseForwardOverride && TrailData.ForwardOverrideRelative)
                {
                    camForward = p.Forward;
                }

                Vector3 cross = Vector3.zero;

                if (i < trail.Points.Count - 1)
                {
                    cross =
                        Vector3.Cross((trail.Points[i + 1].Position - p.Position).normalized, camForward).
                        normalized;
                }
                else
                {
                    cross =
                        Vector3.Cross((p.Position - trail.Points[i - 1].Position).normalized, camForward).
                        normalized;
                }


                //yuck! lets move these into their own functions some time
                Color c = TrailData.StretchColorToFit ?
                          (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.ColorOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) :
                          (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, timeAlong) : TrailData.ColorOverLife.Evaluate(timeAlong));

                float s = TrailData.StretchSizeToFit ?
                          (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.SizeOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) :
                          (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, timeAlong) : TrailData.SizeOverLife.Evaluate(timeAlong));


                trail.verticies[vertIndex] = p.Position + cross * s;

                if (TrailData.MaterialTileLength <= 0)
                {
                    trail.uvs[vertIndex] = new Vector2((float)vertIndex / (float)trail.activePointCount / 2f, 0);
                }
                else
                {
                    trail.uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 0);
                }

                trail.normals[vertIndex] = camForward;
                trail.colors[vertIndex]  = c;
                vertIndex++;
                trail.verticies[vertIndex] = p.Position - cross * s;

                if (TrailData.MaterialTileLength <= 0)
                {
                    trail.uvs[vertIndex] = new Vector2((float)vertIndex / (float)trail.activePointCount / 2f, 1);
                }
                else
                {
                    trail.uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 1);
                }

                trail.normals[vertIndex] = camForward;
                trail.colors[vertIndex]  = c;

                vertIndex++;
            }

            Vector2 finalPosition = trail.verticies[vertIndex - 1];

            for (int i = vertIndex; i < trail.verticies.Length; i++)
            {
                trail.verticies[i] = finalPosition;
            }

            int indIndex = 0;

            for (int pointIndex = 0; pointIndex < 2 * (trail.activePointCount - 1); pointIndex++)
            {
                if (pointIndex % 2 == 0)
                {
                    trail.indicies[indIndex] = pointIndex;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex + 1;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex + 2;
                }
                else
                {
                    trail.indicies[indIndex] = pointIndex + 2;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex + 1;
                    indIndex++;
                    trail.indicies[indIndex] = pointIndex;
                }

                indIndex++;
            }

            int finalIndex = trail.indicies[indIndex - 1];

            for (int i = indIndex; i < trail.indicies.Length; i++)
            {
                trail.indicies[i] = finalIndex;
            }

            trail.Mesh.vertices = trail.verticies;
            trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0);
            trail.Mesh.uv      = trail.uvs;
            trail.Mesh.normals = trail.normals;
            trail.Mesh.colors  = trail.colors;
        }
コード例 #33
0
        private Mesh GenerateMesh(CircularBuffer <PCTrailPoint> trail)
        {
            Vector3 camForward = Camera.main != null ? Camera.main.transform.forward : Vector3.forward;

            if (TrailData.UseForwardOverride)
            {
                camForward = TrailData.ForwardOverride.normalized;
            }

            Mesh generatedMesh    = new Mesh();
            int  activePointCount = NumberOfActivePoints(trail);

            if (activePointCount < 2)
            {
                return(null);
            }

            Vector3[] verticies = new Vector3[2 * activePointCount];
            Vector3[] normals   = new Vector3[2 * activePointCount];
            Vector2[] uvs       = new Vector2[2 * activePointCount];
            Color[]   colors    = new Color[2 * activePointCount];
            int[]     indicies  = new int[2 * (activePointCount) * 3];


            int vertIndex = 0;

            for (int i = 0; i < trail.Count; i++)
            {
                PCTrailPoint p         = trail[i];
                float        timeAlong = p.TimeActive() / TrailData.Lifetime;

                if (p.TimeActive() > TrailData.Lifetime)
                {
                    continue;
                }

                if (TrailData.UseForwardOverride && TrailData.ForwardOverideRelative)
                {
                    camForward = p.Forward;
                }

                Vector3 cross = Vector3.zero;

                if (i < trail.Count - 1)
                {
                    cross =
                        Vector3.Cross((trail[i + 1].Position - p.Position).normalized, camForward).
                        normalized;
                }
                else
                {
                    cross =
                        Vector3.Cross((p.Position - trail[i - 1].Position).normalized, camForward).
                        normalized;
                }

                Color c = TrailData.StretchToFit ? TrailData.ColorOverLife.Evaluate(1 - ((float)vertIndex / (float)activePointCount / 2f)) : TrailData.ColorOverLife.Evaluate(timeAlong);
                float s = TrailData.StretchToFit ? TrailData.SizeOverLife.Evaluate(1 - ((float)vertIndex / (float)activePointCount / 2f)) : TrailData.SizeOverLife.Evaluate(timeAlong);
                verticies[vertIndex] = p.Position + cross * s;

                if (TrailData.MaterialTileLength <= 0)
                {
                    uvs[vertIndex] = new Vector2((float)vertIndex / (float)activePointCount / 2f, 0);
                }
                else
                {
                    uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 0);
                }

                normals[vertIndex] = camForward;
                colors[vertIndex]  = c;
                vertIndex++;
                verticies[vertIndex] = p.Position - cross * s;

                if (TrailData.MaterialTileLength <= 0)
                {
                    uvs[vertIndex] = new Vector2((float)vertIndex / (float)activePointCount / 2f, 1);
                }
                else
                {
                    uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 1);
                }

                normals[vertIndex] = camForward;
                colors[vertIndex]  = c;

                vertIndex++;
            }

            int indIndex = 0;

            for (int pointIndex = 0; pointIndex < 2 * (activePointCount - 1); pointIndex++)
            {
                if (pointIndex % 2 == 0)
                {
                    indicies[indIndex] = pointIndex;
                    indIndex++;
                    indicies[indIndex] = pointIndex + 1;
                    indIndex++;
                    indicies[indIndex] = pointIndex + 2;
                }
                else
                {
                    indicies[indIndex] = pointIndex + 2;
                    indIndex++;
                    indicies[indIndex] = pointIndex + 1;
                    indIndex++;
                    indicies[indIndex] = pointIndex;
                }

                indIndex++;
            }

            generatedMesh.vertices = verticies;
            generatedMesh.SetIndices(indicies, MeshTopology.Triangles, 0);
            generatedMesh.uv      = uvs;
            generatedMesh.normals = normals;
            generatedMesh.colors  = colors;
            return(generatedMesh);
        }
コード例 #34
0
 protected override void UpdatePoint(PCTrailPoint point, float deltaTime)
 {
     point.Position += ConstantForce * deltaTime;
 }
コード例 #35
0
ファイル: SmokePlume.cs プロジェクト: isoundy000/wzry-1
 protected override void InitialiseNewPoint(PCTrailPoint newPoint)
 {
     ((SmokeTrailPoint)newPoint).RandomVec = (Vector3)(UnityEngine.Random.onUnitSphere * this.RandomForceScale);
 }
コード例 #36
0
ファイル: SmokeTrail.cs プロジェクト: oathx/Six
 protected override void InitialiseNewPoint(PCTrailPoint newPoint)
 {
     ((SmokeTrailPoint)newPoint).RandomVec = Random.onUnitSphere * RandomForceScale;
 }
コード例 #37
0
        protected override void UpdateTrail(PCTrail trail, float deltaTime)
        {
            if (trail.IsActiveTrail == false)
            {
                return;
            }

            //TODO Must optimize this further, I don't need to keep recalculating point positions unless we are
            //dealng with the points between the last and 2nd last CP (+ the last CP itself)
            int trailPointIndex = 0;

            for (int i = 0; i < _controlPoints.Count; i++)
            {
                trail.Points[trailPointIndex].Position = _controlPoints[i].p;

                if (TrailData.UseForwardOverride)
                {
                    trail.Points[trailPointIndex].Forward = _controlPoints[i].forward;
                }

                trailPointIndex++;

                if (i < _controlPoints.Count - 1)
                {
                    Vector3 Handle1, Handle2;
                    float   distanceBetween = Vector3.Distance(_controlPoints[i].p, _controlPoints[i + 1].p) / 2;
                    if (i == 0)
                    {
                        Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i].p).normalized * distanceBetween;
                    }
                    else
                    {
                        Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i - 1].p).normalized * distanceBetween;
                    }

                    int nextI = i + 1;

                    if (nextI == _controlPoints.Count - 1)
                    {
                        Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI].p).normalized * distanceBetween;
                    }
                    else
                    {
                        Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI + 1].p).normalized * distanceBetween;
                    }

                    PCTrailPoint currentHandle = trail.Points[trailPointIndex - 1];
                    PCTrailPoint nextHandle    = trail.Points[(trailPointIndex - 1) + PointsBetweenControlPoints + 1];


                    for (int pointBetween = 0; pointBetween < PointsBetweenControlPoints; pointBetween++)
                    {
                        float t = (((float)pointBetween + 1f) / ((float)PointsBetweenControlPoints + 1f));
                        trail.Points[trailPointIndex].Position = GetPointAlongCurve(_controlPoints[i].p, Handle1, _controlPoints[i + 1].p, Handle2, t, 0.3f);
                        trail.Points[trailPointIndex].SetTimeActive(Mathf.Lerp(currentHandle.TimeActive(), nextHandle.TimeActive(), t));

                        if (TrailData.UseForwardOverride)
                        {
                            trail.Points[trailPointIndex].Forward = Vector3.Lerp(currentHandle.Forward, nextHandle.Forward, t);
                        }


                        trailPointIndex++;
                    }
                }
            }

            int lastControlPointPointIndex = ((_controlPoints.Count - 1) + ((_controlPoints.Count - 1) * PointsBetweenControlPoints));
            int prevControlPointPointIndex = lastControlPointPointIndex - PointsBetweenControlPoints - 1;
            int activePointCount           = lastControlPointPointIndex + 1;


            /*
             *
             * This is that optimisation mentioned above..sort of works, but smoothing isn't working right so i am leaving it out for now
             *
             *
             *
             * int lastControlPointIndex = _controlPoints.Count - 1;
             * int prevControlPointIndex = _controlPoints.Count - 2;
             *
             * Vector3 Handle1, Handle2;
             * float distanceBetween = Vector3.Distance(_controlPoints[lastControlPointIndex].p, _controlPoints[prevControlPointIndex].p) / 2;
             *
             * if (prevControlPointIndex == 0)
             *  Handle1 = _controlPoints[prevControlPointIndex].p + (_controlPoints[lastControlPointIndex].p - _controlPoints[prevControlPointIndex].p).normalized * distanceBetween;
             * else
             *  Handle1 = _controlPoints[prevControlPointIndex].p + (_controlPoints[lastControlPointIndex].p - _controlPoints[prevControlPointIndex - 1].p).normalized * distanceBetween;
             *
             *
             * Handle2 = _controlPoints[lastControlPointIndex].p + (_controlPoints[prevControlPointIndex].p - _controlPoints[lastControlPointIndex].p).normalized * distanceBetween;
             *
             *
             * float timeActiveLastControlPoint = trail.Points[lastControlPointPointIndex].TimeActive();
             * float timeActivePrevControlPoint = trail.Points[prevControlPointPointIndex].TimeActive();
             *
             * for (int pointBetween = 0; pointBetween < PointsBetweenControlPoints; pointBetween++)
             * {
             *  float t= (((float)pointBetween + 1f) / ((float)PointsBetweenControlPoints + 1f));
             *  trail.Points[prevControlPointPointIndex + pointBetween + 1].Position = GetPointAlongCurve(_controlPoints[prevControlPointIndex].p, Handle1, _controlPoints[lastControlPointIndex].p, Handle2, t, 0.3f);
             *  trail.Points[prevControlPointPointIndex + pointBetween + 1].SetTimeActive(Mathf.Lerp(timeActivePrevControlPoint, timeActiveLastControlPoint, t));
             * }
             * trail.Points[lastControlPointPointIndex].Position = _controlPoints[lastControlPointIndex].p;
             */

            float distanceFromStart = trail.Points[prevControlPointPointIndex].GetDistanceFromStart();

            for (int i = prevControlPointPointIndex + 1; i < activePointCount; i++)
            {
                distanceFromStart += Vector3.Distance(trail.Points[i - 1].Position, trail.Points[i].Position);
                trail.Points[i].SetDistanceFromStart(distanceFromStart);
            }
        }
コード例 #38
0
ファイル: SmokePlume.cs プロジェクト: bigstupidx/Motor
 protected override void InitialiseNewPoint(PCTrailPoint newPoint)
 {
     ((SmokeTrailPoint)newPoint).RandomVec = Random.onUnitSphere * RandomForceScale;
 }
コード例 #39
0
ファイル: TrailRenderer_Base.cs プロジェクト: oathx/Six
        protected virtual void InitialiseNewPoint(PCTrailPoint newPoint)
        {

        }