Advertisement
Guest User

ControlsManager.cs

a guest
Oct 8th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.79 KB | None | 0 0
  1. #region
  2. using System;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5.  
  6. #endregion
  7.  
  8. public enum ControlType : byte
  9. {
  10.     ButtonDown,
  11.     ButtonPressed,
  12.     ButtonUp,
  13.     Axis
  14. }
  15.  
  16. [Serializable]
  17. public class Control
  18. {
  19.     public string code;
  20.     public ControlType type;
  21.  
  22.     public Control(ControlType type, string code)
  23.     {
  24.         this.type = type;
  25.         this.code = code;
  26.     }
  27. }
  28.  
  29. [Serializable]
  30. public class ControlHandler
  31. {
  32.     public List<Control> controls = new List<Control>();
  33.     public event Action<float> stateChanged;
  34.  
  35.     public void Invoke(float value)
  36.     {
  37.         if (this.stateChanged != null)
  38.             this.stateChanged.Invoke(value);
  39.     }
  40.  
  41.     public void SetType(ControlType type)
  42.     {
  43.         for (var i = 0; i < this.controls.Count; i++)
  44.             if (this.controls[i].type != ControlType.Axis)
  45.                 this.controls[i].type = type;
  46.     }
  47.  
  48.     public void BindRevert(ControlHandler handler)
  49.     {
  50.         for (var i = 0; i < handler.controls.Count; i++)
  51.             switch (handler.controls[i].type)
  52.             {
  53.                 case ControlType.ButtonDown:
  54.                 case ControlType.ButtonPressed:
  55.                     this.controls.Add(new Control(ControlType.ButtonUp, handler.controls[i].code));
  56.                     break;
  57.                 case ControlType.ButtonUp:
  58.                     this.controls.Add(new Control(ControlType.ButtonDown, handler.controls[i].code));
  59.                     break;
  60.                 default:
  61.                     this.controls.Add(new Control(handler.controls[i].type, handler.controls[i].code));
  62.                     break;
  63.             }
  64.     }
  65. }
  66.  
  67. public class ControlsManager : MonoBehaviour
  68. {
  69.     [HideInInspector]
  70.     public List<ControlHandler> controlHandlers;
  71.  
  72.     public ControlHandler jump;
  73.     public ControlHandler look;
  74.  
  75.     public float mouseSensitivity = 10.0f;
  76.     public ControlHandler moveBackward;
  77.     public ControlHandler moveForward;
  78.     public ControlHandler moveLeft;
  79.     public ControlHandler moveRight;
  80.     public ControlHandler pickItem;
  81.     public ControlHandler sit;
  82.     public ControlHandler speedUp;
  83.     internal ControlHandler stand = new ControlHandler();
  84.     public ControlHandler switchItem;
  85.     public ControlHandler switchItemMode;
  86.     public ControlHandler switchUsageMode;
  87.     public ControlHandler throwItem;
  88.     public ControlHandler turn;
  89.     public ControlHandler useItem;
  90.     public ControlHandler useItemAlternatively;
  91.  
  92.     private void Start()
  93.     {
  94.         this.moveForward.SetType(ControlType.ButtonPressed);
  95.         this.moveBackward.SetType(ControlType.ButtonPressed);
  96.         this.moveRight.SetType(ControlType.ButtonPressed);
  97.         this.moveLeft.SetType(ControlType.ButtonPressed);
  98.         this.speedUp.SetType(ControlType.ButtonPressed);
  99.         this.turn.SetType(ControlType.Axis);
  100.         this.look.SetType(ControlType.Axis);
  101.         this.jump.SetType(ControlType.ButtonPressed);
  102.         this.sit.SetType(ControlType.ButtonDown);
  103.         this.stand.BindRevert(this.sit);
  104.         this.pickItem.SetType(ControlType.ButtonDown);
  105.         this.throwItem.SetType(ControlType.ButtonDown);
  106.         this.useItem.SetType(ControlType.ButtonPressed);
  107.         this.useItemAlternatively.SetType(ControlType.ButtonPressed);
  108.         this.switchItem.SetType(ControlType.Axis);
  109.         this.switchUsageMode.SetType(ControlType.ButtonDown);
  110.         this.switchItemMode.SetType(ControlType.ButtonDown);
  111.  
  112.         this.controlHandlers.Add(this.moveForward);
  113.         this.controlHandlers.Add(this.moveBackward);
  114.         this.controlHandlers.Add(this.moveRight);
  115.         this.controlHandlers.Add(this.moveLeft);
  116.         this.controlHandlers.Add(this.speedUp);
  117.         this.controlHandlers.Add(this.turn);
  118.         this.controlHandlers.Add(this.look);
  119.         this.controlHandlers.Add(this.jump);
  120.         this.controlHandlers.Add(this.sit);
  121.         this.controlHandlers.Add(this.stand);
  122.         this.controlHandlers.Add(this.pickItem);
  123.         this.controlHandlers.Add(this.throwItem);
  124.         this.controlHandlers.Add(this.useItem);
  125.         this.controlHandlers.Add(this.useItemAlternatively);
  126.         this.controlHandlers.Add(this.switchItem);
  127.         this.controlHandlers.Add(this.switchUsageMode);
  128.         this.controlHandlers.Add(this.switchItemMode);
  129.     }
  130.  
  131.     private void Update()
  132.     {
  133.         bool controlIsUsed;
  134.         foreach (var controlHandler in this.controlHandlers)
  135.             foreach (var control in controlHandler.controls)
  136.             {
  137.                 controlIsUsed = false;
  138.                 switch (control.type)
  139.                 {
  140.                     case ControlType.ButtonDown:
  141.                         if (Input.GetKeyDown(control.code))
  142.                         {
  143.                             controlHandler.Invoke(1.0f);
  144.                             controlIsUsed = true;
  145.                         }
  146.                         break;
  147.                     case ControlType.ButtonPressed:
  148.                         if (Input.GetKey(control.code))
  149.                         {
  150.                             controlHandler.Invoke(1.0f);
  151.                             controlIsUsed = true;
  152.                         }
  153.                         break;
  154.                     case ControlType.ButtonUp:
  155.                         if (Input.GetKeyUp(control.code))
  156.                         {
  157.                             controlHandler.Invoke(0.0f);
  158.                             controlIsUsed = true;
  159.                         }
  160.                         break;
  161.                     case ControlType.Axis:
  162.                         controlHandler.Invoke(Input.GetAxis(control.code));
  163.                         controlIsUsed = true;
  164.                         break;
  165.                 }
  166.                 if (controlIsUsed)
  167.                     break;
  168.             }
  169.     }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement