Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class DW_Swimming : MonoBehaviour {
- public float SwimSpeed = 2f;
- private bool _isSubmerged = true;
- private IDynamicWaterFluidVolume _water;
- private void OnTriggerEnter(Collider otherCollider)
- {
- // Making sure the object we have entered is DynamicWater
- if (otherCollider.CompareTag(FluidVolume.DynamicWaterTagName))
- {
- _water = otherCollider.gameObject.GetComponent<DynamicWater>();
- }
- }
- private void OnTriggerExit(Collider otherCollider)
- {
- // Making sure the object we have left is DynamicWater
- if (_water != null && otherCollider.CompareTag(FluidVolume.DynamicWaterTagName) &&
- otherCollider == _water.Collider)
- {
- _water = null;
- }
- }
- private void Update() {
- // If we are in the water
- if (_water != null)
- {
- // If we are actually submerged to a some extent
- float waterLevel = _water.GetWaterLevel(transform.position.x, transform.position.z);
- float min = collider.bounds.center.y;
- float max = collider.bounds.center.y + collider.bounds.size.y / 2f;
- // Assume we can swim when at least half submerged into water
- _isSubmerged = (min < waterLevel && max > waterLevel) || (min < waterLevel && max < waterLevel);
- // Value of 1 means fully submerged, value of 0 means not submerged
- float submergedCoeff = Mathf.Clamp01((waterLevel - min) / (max - min));
- if (_isSubmerged) {
- // Swim up
- if (Input.GetKey("z")) {
- transform.Translate(Vector3.up * SwimSpeed * submergedCoeff * Time.deltaTime);
- }
- // Swim down
- if (Input.GetKey("x"))
- transform.Translate(-Vector3.up * SwimSpeed * submergedCoeff * Time.deltaTime);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement