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(); } var waters = FindObjectsOfType <CameraShadeWater>(); if (waters != null) { foreach (var water in waters) { //Debug.Log("buo water instance call..."); water.GetGerstnerWavesJobsInstance().UpdateSamplePoints(ref _samplePoints, _guid); water.GetGerstnerWavesJobsInstance().GetData(_guid, ref Heights, ref _normals); } } }
private void FixedUpdate() { var submergedAmount = 0f; switch (_buoyancyType) { case BuoyancyType.PhysicalVoxel: { LocalToWorldJob.CompleteJob(_guid); //Debug.Log("new pass: " + gameObject.name); Physics.autoSyncTransforms = false; for (var i = 0; i < _voxels.Length; i++) { BuoyancyForce(_samplePoints[i], _velocity[i], Heights[i].y + waterLevelOffset, ref submergedAmount, ref _debugInfo[i]); } Physics.SyncTransforms(); Physics.autoSyncTransforms = true; UpdateDrag(submergedAmount); break; } case BuoyancyType.Physical: //LocalToWorldJob.CompleteJob(_guid); BuoyancyForce(Vector3.zero, _velocity[0], Heights[0].y + waterLevelOffset, ref submergedAmount, ref _debugInfo[0]); //UpdateDrag(submergedAmount); break; case BuoyancyType.NonPhysical: break; case BuoyancyType.NonPhysicalVoxel: break; default: throw new ArgumentOutOfRangeException(); } }