GibTreaty

TableFlipper.cs

Jan 19th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.24 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.Events;
  3.  
  4. public class TableFlipper : MonoBehaviour {
  5.  
  6.     [SerializeField]
  7.     float _power;
  8.  
  9.     [SerializeField]
  10.     float _powerUpSpeed = 1;
  11.  
  12.     [SerializeField]
  13.     float _forceMultiplier;
  14.  
  15.     [SerializeField]
  16.     Vector3 _forcePoint = Vector3.back;
  17.  
  18.     [SerializeField]
  19.     Vector3 _forceDirection = Vector3.up;
  20.  
  21.     [Header("Timer"), SerializeField]
  22.     bool _timerEnabled;
  23.  
  24.     [SerializeField]
  25.     float _timeBeforeForce = 2;
  26.  
  27.     [SerializeField]
  28.     float _forceTimer;
  29.  
  30.     public PowerEvent OnPowerChanged;
  31.  
  32.     #region Properties
  33.     public Vector3 ForceDirection {
  34.         get { return _forceDirection; }
  35.         set { _forceDirection = value; }
  36.     }
  37.  
  38.     public float ForceMultiplier {
  39.         get { return _forceMultiplier; }
  40.         set { _forceMultiplier = value; }
  41.     }
  42.  
  43.     public Vector3 ForcePoint {
  44.         get { return _forcePoint; }
  45.         set { _forcePoint = value; }
  46.     }
  47.  
  48.     public float ForceTimer {
  49.         get { return _forceTimer; }
  50.         set { _forceTimer = value; }
  51.     }
  52.  
  53.     public float Power {
  54.         get { return _power; }
  55.         set {
  56.             float newValue = Mathf.Clamp01(value);
  57.  
  58.             if(newValue == Power) return;
  59.  
  60.             _power = newValue;
  61.  
  62.             if(OnPowerChanged != null) OnPowerChanged.Invoke(Power);
  63.         }
  64.     }
  65.  
  66.     public float PowerUpSpeed {
  67.         get { return _powerUpSpeed; }
  68.         set { _powerUpSpeed = value; }
  69.     }
  70.  
  71.     Rigidbody RigidbodyComponent { get; set; }
  72.  
  73.     public float TimeBeforeForce {
  74.         get { return _timeBeforeForce; }
  75.         set { _timeBeforeForce = value; }
  76.     }
  77.  
  78.     public bool TimerEnabled {
  79.         get { return _timerEnabled; }
  80.         set { _timerEnabled = value; }
  81.     }
  82.     #endregion
  83.  
  84.     void Awake() {
  85.         RigidbodyComponent = GetComponent<Rigidbody>();
  86.     }
  87.  
  88.     void Update() {
  89.         UpdateInput();
  90.         UpdateTimer();
  91.     }
  92.  
  93.     void UpdateInput() {
  94.         if(Input.GetKeyDown(KeyCode.Space)) {
  95.             if(RigidbodyComponent.IsSleeping()) {
  96.                 StartTimer();
  97.                 Power += PowerUpSpeed * Time.deltaTime;
  98.             }
  99.         }
  100.     }
  101.  
  102.     void UpdateTimer() {
  103.         if(TimerEnabled) {
  104.             if(ForceTimer > 0) {
  105.                 ForceTimer = Mathf.Max(ForceTimer - Time.deltaTime, 0);
  106.  
  107.                 if(ForceTimer == 0) {
  108.                     TimerEnabled = false;
  109.                     ApplyForce();
  110.                 }
  111.             }
  112.         }
  113.     }
  114.  
  115.     [ContextMenu("Apply Force")]
  116.     public void ApplyForce() {
  117.         RigidbodyComponent.AddForceAtPosition(ForceDirection * ForceMultiplier * Power, transform.TransformPoint(ForcePoint), ForceMode.VelocityChange);
  118.     }
  119.  
  120.     [ContextMenu("Start Timer")]
  121.     public void StartTimer() {
  122.         if(!TimerEnabled && RigidbodyComponent.IsSleeping()) {
  123.             ForceTimer = TimeBeforeForce;
  124.             TimerEnabled = true;
  125.             Power = 0;
  126.         }
  127.     }
  128.  
  129.     void OnDrawGizmos() {
  130.         Gizmos.color = Color.blue;
  131.         Gizmos.DrawSphere(transform.TransformPoint(ForcePoint), .125f);
  132.     }
  133.  
  134.     [System.Serializable]
  135.     public class PowerEvent : UnityEvent<float> { }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment