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 var pointCount = _wake.lines[s].points.Count; //////////////////////////// create points, if needed /////////////////////////////// if (pointCount == 0) { _wake.lines[s].points.Insert(0, CreateWakePoint(origin, x)); pointCount++; } else if (Vector3.Distance(_wake.lines[s].points[0].pos, origin) > _genDistance) { _wake.lines[s].points.Insert(0, CreateWakePoint(origin, x)); pointCount++; } ///////////////////////////// kill points, if needed //////////////////////////////// for (int i = _wake.lines[s].points.Count - 1; i >= 0; i--) { if (_wake.lines[s].points[i].age > _maxAge) { _wake.lines[s].points.RemoveAt(i); pointCount--; } else { _wake.lines[s].points[i].age += Time.deltaTime; // increment age _wake.lines[s].points[i].pos += _wake.lines[s].points[i].dir * 3 * Time.deltaTime; // move points by dir } } ///////////////////// Create the line renderer points /////////////////////////////// _wake.lines[s]._lineRenderer.positionCount = pointCount + 1; _wake.lines[s]._lineRenderer.SetPosition(0, origin); for (var i = 0; i < pointCount; i++) { _wake.lines[s]._lineRenderer.SetPosition(i + 1, _wake.lines[s].points[i].pos); } s++; } } }
private void BreakTrail() { List <Wake> newWakes = new List <Wake>(); for (int i = 0; i < Trails.Count; i++) { Wake newWake = Instantiate(Trails[i].gameObject).GetComponent <Wake>(); newWake.transform.position = Trails[i].transform.position; newWake.Offset = Trails[i].Offset; newWakes.Add(newWake); } Trails = newWakes; }
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); } }
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); } }
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++; } } }