void Update() { for (var i = 0; i < samplePoints.Length; i++) { samplePoints[i] = transform.TransformPoint(voxels[i]); } if (_buoyancyType == BuoyancyType.PhysicalVoxel || _buoyancyType == BuoyancyType.Physical) // if acurate the are more points so only heights are needed { GerstnerWavesJobs.UpdateSamplePoints(samplePoints, _guid, false); GerstnerWavesJobs.GetData(_guid, ref heights); } else { GerstnerWavesJobs.UpdateSamplePoints(samplePoints, _guid, true); GerstnerWavesJobs.GetSimpleData(_guid, ref heights, ref normals); if (_buoyancyType == BuoyancyType.NonPhysical) { Vector3 vec = transform.position; vec.y = heights[0].y; transform.position = vec; transform.up = Vector3.Slerp(transform.up, normals[0], Time.deltaTime); } else if (_buoyancyType == BuoyancyType.NonPhysicalVoxel) { // do the voxel non-physical } } }
private void Update() { switch (_buoyancyType) { case BuoyancyType.NonPhysical: { var t = transform; var vec = t.position; vec.y = Heights[0].y + waterLevelOffset; t.position = vec; t.up = Vector3.Slerp(t.up, _normals[0], Time.deltaTime); break; } case BuoyancyType.NonPhysicalVoxel: // do the voxel non-physical break; case BuoyancyType.Physical: LocalToWorldJob.CompleteJob(_guid); GetVelocityPoints(); break; case BuoyancyType.PhysicalVoxel: LocalToWorldJob.CompleteJob(_guid); GetVelocityPoints(); break; default: throw new ArgumentOutOfRangeException(); } GerstnerWavesJobs.UpdateSamplePoints(ref _samplePoints, _guid); GerstnerWavesJobs.GetData(_guid, ref Heights, ref _normals); }