Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- using System.Collections.Generic;
- using XInputDotNetPure;
- using System.Diagnostics;
- using UnityEngine.EventSystems;
- public class ControllerMenuSelector : MonoBehaviour {
- int index = 0;
- GamePadState prevState;
- GamePadState currentState;
- public Selectable currentItem;
- ServerManager serverManager;
- bool lastButtonState;
- Stopwatch reactionTimer;
- // Use this for initialization
- void Start() {
- reactionTimer = new Stopwatch();
- if (serverManager == null) {
- serverManager = FindObjectOfType<ServerManager>();
- }
- serverManager.PageChanged += delegate {
- foreach (Selectable item in FindObjectsOfType<Selectable>()) {
- if (item.enabled) {
- currentItem = item;
- break;
- }
- }
- };
- foreach (Selectable item in FindObjectsOfType<Selectable>()) {
- if (item.enabled) {
- currentItem = item;
- break;
- }
- }
- }
- // Update is called once per frame
- void Update() {
- currentState = GamePad.GetState(0);
- if (currentItem == null) {
- foreach (Selectable item in FindObjectsOfType<Selectable>()) {
- if (item.enabled) {
- currentItem = item;
- break;
- }
- }
- }
- List<Selectable> selectableItems = new List<Selectable>();
- if (reactionTimer.ElapsedMilliseconds >= 150) {
- reactionTimer.Stop();
- reactionTimer.Reset();
- }
- if (!reactionTimer.IsRunning) {
- lastButtonState = (Input.GetKeyUp(KeyCode.UpArrow)
- || Input.GetKeyUp(KeyCode.DownArrow)
- || Input.GetKeyUp(KeyCode.LeftArrow)
- || Input.GetKeyUp(KeyCode.RightArrow));
- if (currentItem != null) {
- if ((prevState.DPad.Up == ButtonState.Pressed
- && currentState.DPad.Up == ButtonState.Released)
- || Input.GetKey(KeyCode.UpArrow)) {
- Selectable newItem = currentItem.FindSelectableOnUp();
- if (newItem != null) {
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
- currentItem = newItem;
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
- }
- reactionTimer.Start();
- }
- if ((prevState.DPad.Down == ButtonState.Pressed
- && currentState.DPad.Down == ButtonState.Released)
- || Input.GetKey(KeyCode.DownArrow)) {
- Selectable newItem = currentItem.FindSelectableOnDown();
- if (newItem != null) {
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
- currentItem = newItem;
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
- }
- reactionTimer.Start();
- }
- if ((prevState.DPad.Left == ButtonState.Pressed
- && currentState.DPad.Left == ButtonState.Released)
- || Input.GetKey(KeyCode.LeftArrow)) {
- Selectable newItem = currentItem.FindSelectableOnLeft();
- if (newItem != null) {
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
- currentItem = newItem;
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
- }
- reactionTimer.Start();
- }
- if ((prevState.DPad.Right == ButtonState.Pressed
- && currentState.DPad.Right == ButtonState.Released)
- || Input.GetKey(KeyCode.RightArrow)) {
- Selectable newItem = currentItem.FindSelectableOnRight();
- if (newItem != null) {
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
- currentItem = newItem;
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
- }
- reactionTimer.Start();
- }
- if ((prevState.Buttons.A == ButtonState.Pressed
- && currentState.Buttons.A == ButtonState.Released)
- || Input.GetKey(KeyCode.Return)) {
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerDownHandler);
- ExecuteEvents.Execute(currentItem.gameObject,
- new PointerEventData(EventSystem.current), ExecuteEvents.pointerUpHandler);
- }
- if ((prevState.Buttons.B == ButtonState.Pressed
- && currentState.Buttons.B == ButtonState.Released)
- || Input.GetKey(KeyCode.Escape)) {
- serverManager.GoBack();
- }
- }
- }
- prevState = currentState;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment