Ejemplo n.º 1
0
        private IEnumerator GenerateWake(Wake wake)
        {
            for (var i = 0; i < 2; i++)
            {
                var wl = new WakeLine {
                    points = new List <WakePoint>()
                };
                var wakeLoading = wakePrefab.InstantiateAsync(Vector3.zero, Quaternion.Euler(90f, 0, 0));

                yield return(wakeLoading);

                _lrs.Add(wakeLoading.Result);
                wakeLoading.Result.TryGetComponent(out wl.lineRenderer);
                wakeLoading.Result.hideFlags = HideFlags.HideAndDontSave;

                wake.lines.Add(wl);
            }
        }
Ejemplo n.º 2
0
        public float _maxAge      = 5f;                           // how long the wake lasts for

        void OnEnable()
        {
            // Initial setup for wakes
            foreach (Wake w in _wakes)
            {
                for (int i = 0; i < 2; i++)
                {
                    WakeLine   wl = new WakeLine();
                    GameObject go = GameObject.Instantiate(_wakePrefab, Vector3.zero, Quaternion.Euler(90f, 0, 0));
                    _lrs.Add(go);
                    LineRenderer LR = go.GetComponent <LineRenderer>();
                    wl.points        = new List <WakePoint>();
                    wl._lineRenderer = LR;
                    w.lines.Add(wl);
                    go.hideFlags = HideFlags.HideAndDontSave;
                }
            }
        }
Ejemplo n.º 3
0
        private void DoWake(int side, Wake wake, WakeLine wakeLine)
        {
            var origin = wake.origin;

            origin.x *= side;
            origin    = transform.TransformPoint(origin);
            origin.y  = 0;//flatten origin in world
            var pointCount = wakeLine.points.Count;

            //////////////////////////// create points, if needed ///////////////////////////////
            if (pointCount == 0)
            {
                wakeLine.points.Insert(0, CreateWakePoint(origin, side));
                pointCount++;
            }
            else if (Vector3.Distance(wakeLine.points[0].pos, origin) > genDistance)
            {
                wakeLine.points.Insert(0, CreateWakePoint(origin, side));
                pointCount++;
            }
            ///////////////////////////// kill points, if needed ////////////////////////////////
            for (int i = wakeLine.points.Count - 1; i >= 0; i--)
            {
                if (wakeLine.points[i].age > maxAge)
                {
                    wakeLine.points.RemoveAt(i);
                    pointCount--;
                }
                else
                {
                    wakeLine.points[i].age += Time.deltaTime;                              // increment age
                    wakeLine.points[i].pos += Time.deltaTime * 3 * wakeLine.points[i].dir; // move points by dir
                }
            }
            ///////////////////// Create the line renderer points ///////////////////////////////

            wakeLine.lineRenderer.positionCount = pointCount + 1;
            wakeLine.lineRenderer.SetPosition(0, origin);
            for (var i = 0; i < pointCount; i++)
            {
                wakeLine.lineRenderer.SetPosition(i + 1, wakeLine.points[i].pos);
            }
        }
Ejemplo n.º 4
0
        void Update()
        {
            Vector3 origin;
            //For each wake pair
            var wCount = _wakes.Count;

            for (int w = 0; w < wCount; w++)
            {
                Wake _wake = _wakes[w];
                int  s     = 0;
                for (int x = -1; x <= 1; x += 2)
                {
                    origin    = _wake.origin;
                    origin.x *= x;
                    origin    = transform.TransformPoint(origin);
                    origin.y  = 0;//flatten origin in world
                    WakeLine line       = _wake.lines[s];
                    var      pointCount = line.points.Count;
                    //////////////////////////// create points, if needed ///////////////////////////////
                    if (pointCount == 0)
                    {
                        line.points.Insert(0, CreateWakePoint(origin, x));
                        pointCount++;
                    }
                    else if (Vector3.Distance(line.points[0].pos, origin) > _genDistance)
                    {
                        line.points.Insert(0, CreateWakePoint(origin, x));
                        pointCount++;
                    }
                    ///////////////////////////// kill points, if needed ////////////////////////////////
                    for (int i = line.points.Count - 1; i >= 0; i--)
                    {
                        if (line.points[i].age > _maxAge)
                        {
                            line.points.RemoveAt(i);
                            pointCount--;
                        }
                        else
                        {
                            line.points[i].age += Time.deltaTime;                               // increment age
                            line.points[i].pos += line.points[i].dir * _speed * Time.deltaTime; // move points by dir
                        }
                    }
                    ///////////////////// Create the line renderer points ///////////////////////////////

                    line._lineRenderer.positionCount = pointCount + 1;

                    line.poses[0] = origin;
                    for (var i = 0; i < pointCount; i++)
                    {
                        if (i + 1 == line.poses.Length)
                        {
                            break;
                        }

                        line.poses[i + 1] = line.points[i].pos;
                    }

                    GerstnerWavesJobs.UpdateSamplePoints(line.poses, line.guid);
                    GerstnerWavesJobs.GetData(line.guid, ref line.heights);

                    origin.y = NeoOcean.oceanheight + line.heights[0].y;
                    for (var i = 0; i < pointCount; i++)
                    {
                        if (i + 1 == line.poses.Length)
                        {
                            break;
                        }

                        line.points[i].pos.y = NeoOcean.oceanheight + line.heights[i + 1].y;
                    }

                    line._lineRenderer.SetPosition(0, origin);
                    for (var i = 0; i < pointCount; i++)
                    {
                        line._lineRenderer.SetPosition(i + 1, line.points[i].pos);
                    }
                    s++;
                }
            }
        }