Advertisement
BurntOfferings

Dynamic Water FPS swimming prototype class

Oct 2nd, 2013
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.95 KB | None | 0 0
  1. public class DW_Swimming : MonoBehaviour {
  2.     public float SwimSpeed = 2f;
  3.  
  4.     private bool _isSubmerged = true;
  5.     private IDynamicWaterFluidVolume _water;
  6.  
  7.     private void OnTriggerEnter(Collider otherCollider)
  8.     {
  9.         // Making sure the object we have entered is DynamicWater
  10.         if (otherCollider.CompareTag(FluidVolume.DynamicWaterTagName))
  11.         {
  12.             _water = otherCollider.gameObject.GetComponent<DynamicWater>();
  13.         }
  14.     }
  15.  
  16.     private void OnTriggerExit(Collider otherCollider)
  17.     {
  18.         // Making sure the object we have left is DynamicWater
  19.         if (_water != null && otherCollider.CompareTag(FluidVolume.DynamicWaterTagName) &&
  20.             otherCollider == _water.Collider)
  21.         {
  22.             _water = null;
  23.         }
  24.     }
  25.  
  26.     private void Update() {
  27.         // If we are in the water
  28.         if (_water != null)
  29.         {
  30.             // If we are actually submerged to a some extent
  31.             float waterLevel = _water.GetWaterLevel(transform.position.x, transform.position.z);
  32.            
  33.             float min = collider.bounds.center.y;
  34.             float max = collider.bounds.center.y + collider.bounds.size.y / 2f;
  35.  
  36.             // Assume we can swim when at least half submerged into water
  37.             _isSubmerged = (min < waterLevel && max > waterLevel) || (min < waterLevel && max < waterLevel);
  38.             // Value of 1 means fully submerged, value of 0 means not submerged
  39.             float submergedCoeff = Mathf.Clamp01((waterLevel - min) / (max - min));
  40.  
  41.             if (_isSubmerged) {
  42.                 // Swim up
  43.                 if (Input.GetKey("z")) {
  44.                     transform.Translate(Vector3.up * SwimSpeed * submergedCoeff * Time.deltaTime);
  45.                 }
  46.  
  47.                 // Swim down
  48.                 if (Input.GetKey("x"))
  49.                     transform.Translate(-Vector3.up * SwimSpeed * submergedCoeff * Time.deltaTime);
  50.             }
  51.         }
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement