Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #region
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- #endregion
- public enum ControlType : byte
- {
- ButtonDown,
- ButtonPressed,
- ButtonUp,
- Axis
- }
- [Serializable]
- public class Control
- {
- public string code;
- public ControlType type;
- public Control(ControlType type, string code)
- {
- this.type = type;
- this.code = code;
- }
- }
- [Serializable]
- public class ControlHandler
- {
- public List<Control> controls = new List<Control>();
- public event Action<float> stateChanged;
- public void Invoke(float value)
- {
- if (this.stateChanged != null)
- this.stateChanged.Invoke(value);
- }
- public void SetType(ControlType type)
- {
- for (var i = 0; i < this.controls.Count; i++)
- if (this.controls[i].type != ControlType.Axis)
- this.controls[i].type = type;
- }
- public void BindRevert(ControlHandler handler)
- {
- for (var i = 0; i < handler.controls.Count; i++)
- switch (handler.controls[i].type)
- {
- case ControlType.ButtonDown:
- case ControlType.ButtonPressed:
- this.controls.Add(new Control(ControlType.ButtonUp, handler.controls[i].code));
- break;
- case ControlType.ButtonUp:
- this.controls.Add(new Control(ControlType.ButtonDown, handler.controls[i].code));
- break;
- default:
- this.controls.Add(new Control(handler.controls[i].type, handler.controls[i].code));
- break;
- }
- }
- }
- public class ControlsManager : MonoBehaviour
- {
- [HideInInspector]
- public List<ControlHandler> controlHandlers;
- public ControlHandler jump;
- public ControlHandler look;
- public float mouseSensitivity = 10.0f;
- public ControlHandler moveBackward;
- public ControlHandler moveForward;
- public ControlHandler moveLeft;
- public ControlHandler moveRight;
- public ControlHandler pickItem;
- public ControlHandler sit;
- public ControlHandler speedUp;
- internal ControlHandler stand = new ControlHandler();
- public ControlHandler switchItem;
- public ControlHandler switchItemMode;
- public ControlHandler switchUsageMode;
- public ControlHandler throwItem;
- public ControlHandler turn;
- public ControlHandler useItem;
- public ControlHandler useItemAlternatively;
- private void Start()
- {
- this.moveForward.SetType(ControlType.ButtonPressed);
- this.moveBackward.SetType(ControlType.ButtonPressed);
- this.moveRight.SetType(ControlType.ButtonPressed);
- this.moveLeft.SetType(ControlType.ButtonPressed);
- this.speedUp.SetType(ControlType.ButtonPressed);
- this.turn.SetType(ControlType.Axis);
- this.look.SetType(ControlType.Axis);
- this.jump.SetType(ControlType.ButtonPressed);
- this.sit.SetType(ControlType.ButtonDown);
- this.stand.BindRevert(this.sit);
- this.pickItem.SetType(ControlType.ButtonDown);
- this.throwItem.SetType(ControlType.ButtonDown);
- this.useItem.SetType(ControlType.ButtonPressed);
- this.useItemAlternatively.SetType(ControlType.ButtonPressed);
- this.switchItem.SetType(ControlType.Axis);
- this.switchUsageMode.SetType(ControlType.ButtonDown);
- this.switchItemMode.SetType(ControlType.ButtonDown);
- this.controlHandlers.Add(this.moveForward);
- this.controlHandlers.Add(this.moveBackward);
- this.controlHandlers.Add(this.moveRight);
- this.controlHandlers.Add(this.moveLeft);
- this.controlHandlers.Add(this.speedUp);
- this.controlHandlers.Add(this.turn);
- this.controlHandlers.Add(this.look);
- this.controlHandlers.Add(this.jump);
- this.controlHandlers.Add(this.sit);
- this.controlHandlers.Add(this.stand);
- this.controlHandlers.Add(this.pickItem);
- this.controlHandlers.Add(this.throwItem);
- this.controlHandlers.Add(this.useItem);
- this.controlHandlers.Add(this.useItemAlternatively);
- this.controlHandlers.Add(this.switchItem);
- this.controlHandlers.Add(this.switchUsageMode);
- this.controlHandlers.Add(this.switchItemMode);
- }
- private void Update()
- {
- bool controlIsUsed;
- foreach (var controlHandler in this.controlHandlers)
- foreach (var control in controlHandler.controls)
- {
- controlIsUsed = false;
- switch (control.type)
- {
- case ControlType.ButtonDown:
- if (Input.GetKeyDown(control.code))
- {
- controlHandler.Invoke(1.0f);
- controlIsUsed = true;
- }
- break;
- case ControlType.ButtonPressed:
- if (Input.GetKey(control.code))
- {
- controlHandler.Invoke(1.0f);
- controlIsUsed = true;
- }
- break;
- case ControlType.ButtonUp:
- if (Input.GetKeyUp(control.code))
- {
- controlHandler.Invoke(0.0f);
- controlIsUsed = true;
- }
- break;
- case ControlType.Axis:
- controlHandler.Invoke(Input.GetAxis(control.code));
- controlIsUsed = true;
- break;
- }
- if (controlIsUsed)
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement