using GKC.Localization; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Text.RegularExpressions; using System.Xml.Linq; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; #if REWIRED using Rewired; #endif [System.Serializable] public class inputManager : MonoBehaviour { public List axes = new List (); public List multiAxesList = new List (); public GameObject editInputPanelPrefab; public GameObject editInputMenu; public Text currentInputPanelListText; public loadType loadOption; public bool useRelativePath; public bool checkInputKeyDuplicatedOnRebindAction; public bool checkInputKeyDuplicatedOnlyOnSameInputCategory; public List buttonsDisabledAtStart = new List (); public List gamepadList = new List (); public List playerInputManagerList = new List (); public bool showActionKeysOnMenu = true; public bool touchPlatform; public bool gameCurrentlyPaused; public bool useTouchControls; public playerCharactersManager charactersManager; public menuPause pauseManager; public gameManager mainGameManager; public bool ignoreGamepad; public bool allowKeyboardAndGamepad; public bool allowGamepadInTouchDevice; public float checkConnectedGamepadRate; float lastGamepadUpdateCheckTime; public List multiAxesEditButtonInputList = new List (); public List touchButtonList = new List (); public List touchButtonsInfoList = new List (); public List touchButtonsStringInfoList = new List (); public List buttonsToIgnoreSetVisibleStateList = new List (); bool touchButtonsCurrentlyVisible = true; Scrollbar scroller; bool mainInputMenuScrollerLocated; Touch currentTouch; int currentFingerID; public bool usingGamepad; public bool onlyOnePlayer; public bool usingKeyBoard; public int numberOfGamepads = -1; [Tooltip ("If true any keypress will be logged to the Debug console.")] public bool showKeyboardPressed; public bool showKeyboardPressedAction; public bool showGamepadPressed; public bool showGamepadPressedAction; public bool showPressedKeyWhenEditingInput; public bool showDebugKeyPressed; public bool editingInput; bool newKeyAssigned; editButtonInput currentEditButtonInputToRebind; string currentEditButtonInputPreviouseValue; KeyCode [] validKeyCodes; string [] currentGamepadConnectedNameArray; List currentGamepadConnectedNameList = new List (); public int currentInputPanelListIndex = 0; bool previouslyUsingGamepad; bool editInputMenuOpened; bool usingTouchControls; bool gameManagerPaused; public enum buttonType { //type of press of a key getKey, getKeyDown, getKeyUp, negMouseWheel, posMouseWheel, } //load the key input in the game from the current configuration in the inspector or load from a file public enum loadType { loadFile, loadEditorConfig, } float currentAxisValue; KeyCode currentKeyCodeToCheck; public Dictionary> register; bool registerInitialized; public string [] joystickNames; public string joystickName; Axes currentKeyButtonToCheck; Dictionary buttonConfig; int keyIndexPressed; string retString; bool joystickNamesInitialized; bool currentJoystickButtonIsAxis; Axes currentJoystickButtonToCheck; Axes currentTouchButtonToCheck; int currentTouchButtonIndexToCheck; touchButtonListener currentTouchButtonListener; int numberOfMultiAxes; int [] multiAxesIndexList; public string [] touchButtonListString; string currentJoystickButtonKeyString; string saveFileFolderName = "Input"; string saveFileName = "Input File"; string defaultSaveFileName = "Default Input File"; int numberOfTouchControls; public List currentInputActionList = new List (); public KeyCode actionKeyToFilter; public joystickButtons joystickButtonToFilter; public bool createRebindInputMenuWithCurrentAxes; public int rebindInputMenuPanelsAmount; public int rebindInputMenuActionsPerPanelAmount; bool joystickFilterActive; bool keyFilterActive; public bool lastButtonPressedOnGamepad; public bool lastKeyPressedOnKeyboard; public bool showMissingInputWarningMessagesEnabled = true; string emptyGamepadName = ""; bool inputManagerInitialized; public bool useCustomInputFileName; public string customInputFileName; public bool useCustomInputFilePathName = true; public string customInputFilePathName = "Assets/Game Kit Controller/Input"; public string [] customInputFileList; public bool customInputFileListAssigned; private static inputManager _inputManagerInstance; public static inputManager Instance { get { return _inputManagerInstance; } } bool instanceInitialized; public void getComponentInstance () { if (instanceInitialized) { return; } if (_inputManagerInstance != null && _inputManagerInstance != this) { Destroy (this.gameObject); return; } _inputManagerInstance = this; instanceInitialized = true; } public void getComponentInstanceOnApplicationPlaying () { if (Application.isPlaying) { getComponentInstance (); } } void Awake () { getComponentInstance (); } #if REWIRED public bool useRewired; private IList _rewiredPlayers; #endif public bool checkInputManagerElementsOnStartEnabled = true; void Start () { if (checkInputManagerElementsOnStartEnabled) { checkInputManagerElementsOnStart (); } } public void checkInputManagerElementsOnStart () { if (inputManagerInitialized) { return; } inputManagerInitialized = true; #if REWIRED if (useRewired) { _rewiredPlayers = ReInput.players.GetPlayers(); foreach (var player in _rewiredPlayers) { player.controllers.AddLastActiveControllerChangedDelegate(OnControllerChange); } } #endif //get if the current platform is a touch device touchPlatform = touchJoystick.checkTouchPlatform (); checkPlayerInputManagerList (); getGameManagerSettings (); usingTouchControls = mainGameManager.isUsingTouchControls (); pauseManager = charactersManager.getPauseManagerFromPlayerByIndex (0); //if the current platform is a mobile, enable the touch controls in case they are not active if (touchPlatform && !usingTouchControls) { pauseManager.setUseTouchControlsState (true); mainGameManager.setUseTouchControlsState (true); pauseManager.reloadStart (); usingKeyBoard = true; usingTouchControls = true; } useRelativePath = mainGameManager.useRelativePath; //load the key input loadButtonsInput (); getValidKeyCodes (); if (usingTouchControls) { ignoreGamepad = true; } if (ignoreGamepad) { currentGamepadConnectedNameArray = new String [0]; setGamePadList (); } else { currentGamepadConnectedNameArray = Input.GetJoystickNames (); setGamePadList (); } } void Update () { usingTouchControls = mainGameManager.isUsingTouchControls (); gameManagerPaused = mainGameManager.isGamePaused (); if (gameManagerPaused && currentNumberOfTouchButtonsPressed > 0) { currentNumberOfTouchButtonsPressed = 0; } if (!ignoreGamepad) { if (usingGamepad) { if (Time.time > checkConnectedGamepadRate + lastGamepadUpdateCheckTime) { joystickNames = Input.GetJoystickNames (); } } if ((Time.time > checkConnectedGamepadRate + lastGamepadUpdateCheckTime || gameManagerPaused)) { if (usingGamepad) { currentGamepadConnectedNameArray = joystickNames; } else { currentGamepadConnectedNameArray = Input.GetJoystickNames (); } lastGamepadUpdateCheckTime = Time.time; currentGamepadConnectedNameList.Clear (); int currentGamepadConnectedNameArrayLength = currentGamepadConnectedNameArray.Length; for (int i = 0; i < currentGamepadConnectedNameArrayLength; ++i) { if (!currentGamepadConnectedNameArray [i].Equals (emptyGamepadName)) { currentGamepadConnectedNameList.Add (currentGamepadConnectedNameArray [i]); } } int currentGamepadConnectedNameListCount = currentGamepadConnectedNameList.Count; currentGamepadConnectedNameArray = new string [currentGamepadConnectedNameListCount]; for (int i = 0; i < currentGamepadConnectedNameListCount; i++) { currentGamepadConnectedNameArray [i] = currentGamepadConnectedNameList [i]; } if (numberOfGamepads != currentGamepadConnectedNameArray.Length) { setGamePadList (); } if (allowKeyboardAndGamepad) { usingKeyBoard = true; } if (usingGamepad) { if (!previouslyUsingGamepad) { // print ("Gamepad added"); previouslyUsingGamepad = true; if (editInputMenuOpened) { reloadInputMenu (); } } } else { if (previouslyUsingGamepad) { // print ("Gamepad removed"); previouslyUsingGamepad = false; if (editInputMenuOpened) { reloadInputMenu (); } } } } } if (usingGamepad && ignoreGamepad) { currentGamepadConnectedNameArray = new String [0]; setGamePadList (); } if (usingTouchControls && usingGamepad) { ignoreGamepad = true; usingKeyBoard = true; } //if the player is changin this input field, search for any keyboard press if (editingInput) { if (usingGamepad) { bool checkPressedKey = false; string currentPressedKey = ""; foreach (KeyCode vKey in validKeyCodes) { //set the value of the key pressed in the input field if (Input.GetKeyDown (vKey)) { currentPressedKey = vKey.ToString (); if (!currentPressedKey.Contains ("Alpha")) { checkPressedKey = true; } } } currentAxisValue = Input.GetAxis ("Left Trigger " + "1"); if (currentAxisValue != 0) { currentPressedKey = "14"; checkPressedKey = true; } currentAxisValue = Input.GetAxis ("Right Trigger " + "1"); if (currentAxisValue != 0) { currentPressedKey = "15"; checkPressedKey = true; } currentAxisValue = Input.GetAxis ("DPad X" + "1"); if (currentAxisValue != 0) { if (currentAxisValue < 0) { currentPressedKey = "10"; } else { currentPressedKey = "11"; } checkPressedKey = true; } currentAxisValue = Input.GetAxis ("DPad Y" + "1"); if (currentAxisValue != 0) { if (currentAxisValue < 0) { currentPressedKey = "12"; } else { currentPressedKey = "13"; } checkPressedKey = true; } if (checkPressedKey) { string keyName = ""; int keyNumber = -1; string [] numbers = Regex.Split (currentPressedKey, @"\D+"); foreach (string value in numbers) { int number = 0; if (int.TryParse (value, out number)) { // print (value + " " + value.Length); keyNumber = number; } } if (keyNumber > -1) { keyName = Enum.GetName (typeof (joystickButtons), keyNumber); currentEditButtonInputToRebind.currentActionKeyString = keyName; currentEditButtonInputToRebind.actionKeyText.text = getLocalizedText (keyName); if (showPressedKeyWhenEditingInput) { print (keyName); } newKeyAssigned = true; //stop the checking of the keyboard editingInput = false; } return; } } else { foreach (KeyCode vKey in validKeyCodes) { //set the value of the key pressed in the input field if (Input.GetKeyDown (vKey)) { if (showPressedKeyWhenEditingInput) { print (vKey.ToString ()); } bool canAssignNewInput = true; if (checkInputKeyDuplicatedOnRebindAction) { string currentActionKey = vKey.ToString (); string currentActionName = multiAxesList [currentEditButtonInputToRebind.multiAxesIndex].axes [currentEditButtonInputToRebind.axesIndex].Name; for (int i = 0; i < multiAxesList.Count; i++) { if (canAssignNewInput && (!checkInputKeyDuplicatedOnlyOnSameInputCategory || currentEditButtonInputToRebind.multiAxesIndex == i)) { List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; if (canAssignNewInput) { //print (currentAxes.keyButton + " " + currentActionKey); if (currentAxes.keyButton.Equals (currentActionKey)) { if (currentAxes.Name != currentActionName) { canAssignNewInput = false; print ("Key " + currentActionKey + " already assigned on the action " + currentAxes.Name); } } } } } } if (canAssignNewInput && checkInputKeyDuplicatedOnlyOnSameInputCategory) { print ("No key " + currentActionKey + " assigned to other action on the category " + multiAxesList [currentEditButtonInputToRebind.multiAxesIndex].axesName + ".\n" + "New key assigned to action " + currentActionName); } } if (canAssignNewInput) { currentEditButtonInputToRebind.currentActionKeyString = vKey.ToString (); currentEditButtonInputToRebind.actionKeyText.text = getLocalizedText (vKey.ToString ()); //stop the checking of the keyboard editingInput = false; newKeyAssigned = true; return; } } } } } if (showDebugKeyPressed) { foreach (KeyCode vKey in validKeyCodes) { if (Input.GetKeyDown (vKey)) { Debug.Log ("KeyCode Pressed: " + vKey); } } } } public void updatePlayerInputManagerList () { for (int i = 0; i < playerInputManagerList.Count; i++) { if (playerInputManagerList [i] != null) { playerInputManagerList [i].findInputManagerAndUpdateComponent (); } } if (pauseManager == null && playerInputManagerList.Count > 0) { menuPause temporalMenuPause = charactersManager.getPauseManagerFromPlayerByIndex (0); if (temporalMenuPause != null) { setMainPlayerInfo (playerInputManagerList [0], temporalMenuPause); updateComponent (); } } } void checkPlayerInputManagerList () { bool checkIfEmptyInputElements = checkNullElementsOnPlayerInputManagerList (); if (checkIfEmptyInputElements) { print ("checking"); charactersManager.checkPlayerElementsOnScene (); playerInputManagerList.Clear (); for (int i = 0; i < charactersManager.playerList.Count; i++) { playerInputManagerList.Add (charactersManager.playerList [i].playerInput); } pauseManager = charactersManager.getPauseManagerFromPlayerByIndex (0); if (playerInputManagerList.Count >= 1) { playerInputManager currentPlayerInputManager = playerInputManagerList [0]; if (currentPlayerInputManager != null) { GameObject currentInputPanelListTextGameObject = currentPlayerInputManager.getCurrentInputPanelListText (); if (currentInputPanelListTextGameObject != null) { currentInputPanelListText = currentInputPanelListTextGameObject.GetComponent (); } editInputPanelPrefab = currentPlayerInputManager.getEditInputPanelPrefab (); editInputMenu = currentPlayerInputManager.getEditInputMenu (); } } } } public void setMainPlayerInfo (playerInputManager newPlayerInputManager, menuPause newMenuPause) { if (!playerInputManagerList.Contains (newPlayerInputManager)) { playerInputManagerList.Add (newPlayerInputManager); } pauseManager = newMenuPause; GameObject currentInputPanelListTextGameObject = newPlayerInputManager.getCurrentInputPanelListText (); if (currentInputPanelListTextGameObject != null) { currentInputPanelListText = currentInputPanelListTextGameObject.GetComponent (); } editInputPanelPrefab = newPlayerInputManager.getEditInputPanelPrefab (); editInputMenu = newPlayerInputManager.getEditInputMenu (); } public bool isUsingGamepad () { return usingGamepad; } public bool isUsingKeyBoard () { return usingKeyBoard; } public bool isUsingTouchControls () { return usingTouchControls; } public bool isUsingTouchControlsOnGameManager () { return mainGameManager.isUsingTouchControls (); } public bool isGameManagerPaused () { return gameManagerPaused; } public bool isAllowKeyboardAndGamepad () { return allowKeyboardAndGamepad; } public bool isAllowGamepadInTouchDevice () { return allowGamepadInTouchDevice; } public void setEditInputMenuOpenedState (bool state) { editInputMenuOpened = state; } bool inputListMenuPanelInstantiated; //Update current input panel to edit public void openInputMenu () { if (!showActionKeysOnMenu) { return; } if (!inputListMenuPanelInstantiated) { //get the current list of axes defined in the inspector getCurrentAxesListFromInspector (); inputListMenuPanelInstantiated = true; } currentInputPanelListIndex = -1; setNextInputPanel (); updateCurrentInputPanel (currentInputPanelListIndex); setKeyNamesInActionsList (); } public void reloadInputMenu () { updateCurrentInputPanel (currentInputPanelListIndex); setKeyNamesInActionsList (); } public void setKeyNamesInActionsList () { for (int i = 0; i < multiAxesEditButtonInputList.Count; i++) { multiAxesEditButtonInput currentEditButton = multiAxesEditButtonInputList [i]; if (currentEditButton.multiAxesEditPanelActive) { for (int j = 0; j < currentEditButton.buttonsList.Count; j++) { editButtonInput currentEditButtonInput = currentEditButton.buttonsList [j]; if (currentEditButtonInput.editButtonInputActive) { string currentActionName = multiAxesList [currentEditButtonInput.multiAxesIndex].axes [currentEditButtonInput.axesIndex].Name; currentEditButtonInput.actionNameText.text = getLocalizedText (currentActionName); if (usingGamepad) { currentEditButtonInput.currentActionKeyString = currentEditButtonInput.gamepadActionKey; currentEditButtonInput.actionKeyText.text = getLocalizedText (currentEditButtonInput.gamepadActionKey); } else { currentEditButtonInput.currentActionKeyString = currentEditButtonInput.keyboardActionKey; currentEditButtonInput.actionKeyText.text = getLocalizedText (currentEditButtonInput.keyboardActionKey); } } } } } } public void updateCurrentInputPanel (int index) { ScrollRect currentScrollRect = null; for (int i = 0; i < multiAxesEditButtonInputList.Count; i++) { if (i == index) { if (!multiAxesEditButtonInputList [i].multiAxesEditPanel.activeSelf) { multiAxesEditButtonInputList [i].multiAxesEditPanel.SetActive (true); } currentScrollRect = multiAxesEditButtonInputList [i].multiAxesEditPanelScrollRect; } else { if (multiAxesEditButtonInputList [i].multiAxesEditPanel.activeSelf) { multiAxesEditButtonInputList [i].multiAxesEditPanel.SetActive (false); } } } if (currentInputPanelListText != null) { currentInputPanelListText.text = getLocalizedText (multiAxesEditButtonInputList [index].multiAxesEditPanel.name); } //get the scroller in the edit input menu if (editInputMenu != null) { mainInputMenuScrollerLocated = scroller != null; if (mainInputMenuScrollerLocated) { scroller = editInputMenu.GetComponentInChildren (); mainInputMenuScrollerLocated = scroller != null; } if (mainInputMenuScrollerLocated) { resetScroll (scroller); } ////set the scroller in the top position //scroller.value = 1; if (currentScrollRect != null) { resetPanelSlotsRectTransform (currentScrollRect.transform, currentScrollRect); } } } public void resetScroll (Scrollbar scrollBarToReset) { StartCoroutine (resetScrollCoroutine (scrollBarToReset)); } IEnumerator resetScrollCoroutine (Scrollbar scrollBarToReset) { yield return new WaitForEndOfFrame (); yield return new WaitForEndOfFrame (); scrollBarToReset.value = 1; } public void resetPanelSlotsRectTransform (Transform panelTransform, ScrollRect panelScrollRect) { StartCoroutine (resetRectTransformCoroutine (panelTransform, panelScrollRect)); } IEnumerator resetRectTransformCoroutine (Transform panelTransform, ScrollRect panelScrollRect) { LayoutRebuilder.ForceRebuildLayoutImmediate (panelTransform.GetComponent ()); yield return new WaitForEndOfFrame (); yield return new WaitForEndOfFrame (); if (panelScrollRect != null) { panelScrollRect.verticalNormalizedPosition = 1; } } public void setNextInputPanel () { currentInputPanelListIndex++; if (currentInputPanelListIndex > multiAxesList.Count - 1) { currentInputPanelListIndex = 0; } int max = 0; bool exit = false; while (!exit) { if (multiAxesEditButtonInputList [currentInputPanelListIndex].multiAxesEditPanelActive) { exit = true; } else { max++; if (max > 100) { exit = true; } currentInputPanelListIndex++; if (currentInputPanelListIndex > multiAxesList.Count - 1) { currentInputPanelListIndex = 0; } } } updateCurrentInputPanel (currentInputPanelListIndex); } public void setPreviousInputPanel () { currentInputPanelListIndex--; if (currentInputPanelListIndex < 0) { currentInputPanelListIndex = multiAxesList.Count - 1; } int max = 0; bool exit = false; while (!exit) { if (multiAxesEditButtonInputList [currentInputPanelListIndex].multiAxesEditPanelActive) { exit = true; } else { max++; if (max > 100) { exit = true; } currentInputPanelListIndex--; if (currentInputPanelListIndex < 0) { currentInputPanelListIndex = multiAxesList.Count - 1; } } } updateCurrentInputPanel (currentInputPanelListIndex); } public void destroyRebindMenusAndActionsPanels () { if (!Application.isPlaying) { GKC_Utils.unpackPrefabObjectByCheckingTransformRoot (gameObject); } for (int i = 0; i < multiAxesEditButtonInputList.Count; i++) { if (multiAxesEditButtonInputList [i].multiAxesEditPanel != null) { DestroyImmediate (multiAxesEditButtonInputList [i].multiAxesEditPanel); } } multiAxesEditButtonInputList.Clear (); updateComponent (); } public void instantiateRebindMenusAndActionsPanels (bool updateComponentActive) { if (multiAxesEditButtonInputList.Count > 0) { destroyRebindMenusAndActionsPanels (); } int amountOfMenuPanels = multiAxesList.Count; int amountOfMenuActionsPerPanel = 0; if (!createRebindInputMenuWithCurrentAxes) { amountOfMenuPanels = rebindInputMenuPanelsAmount; amountOfMenuActionsPerPanel = rebindInputMenuActionsPerPanelAmount; } if (amountOfMenuPanels == 0) { print ("WARNING: Make sure to configure an amount of panels or use the current multi axes list amount"); return; } if (editInputPanelPrefab == null) { return; } for (int i = 0; i < amountOfMenuPanels; i++) { GameObject newEditInputPanel = (GameObject)Instantiate (editInputPanelPrefab, editInputPanelPrefab.transform.position, Quaternion.identity, editInputPanelPrefab.transform.parent); newEditInputPanel.transform.localScale = Vector3.one; RectTransform newRectTransform = newEditInputPanel.GetComponent (); RectTransform rectTransformPrefab = editInputPanelPrefab.GetComponent (); newRectTransform.anchorMin = rectTransformPrefab.anchorMin; newRectTransform.anchorMax = rectTransformPrefab.anchorMax; newRectTransform.anchoredPosition = rectTransformPrefab.anchoredPosition; newRectTransform.sizeDelta = rectTransformPrefab.sizeDelta; if (!newEditInputPanel.activeSelf) { newEditInputPanel.SetActive (true); } newEditInputPanel.name = "Input Panel " + (i + 1); editInputPanelInfo currentEditInputPanelInfo = newEditInputPanel.GetComponent (); List buttonsList = new List (); GameObject bottom = currentEditInputPanelInfo.bottomGameObject; if (createRebindInputMenuWithCurrentAxes) { amountOfMenuActionsPerPanel = multiAxesList [i].axes.Count; } //get all the keys field inside the edit input menu for (int j = 0; j < amountOfMenuActionsPerPanel; j++) { //every key field in the edit input button has a editButtonInput component, so create every of them GameObject newInputButton = (GameObject)Instantiate (currentEditInputPanelInfo.editButtonInputGameObject, currentEditInputPanelInfo.editButtonInputGameObject.transform.position, Quaternion.identity, currentEditInputPanelInfo.buttonsParent); if (newInputButton.activeSelf) { newInputButton.SetActive (false); } newInputButton.name = "Input Button " + (j + 1); editButtonInput currentEditButtonInput = newInputButton.GetComponent (); currentEditButtonInput.editButtonGameObject = newInputButton; newInputButton.transform.localScale = Vector3.one; buttonsList.Add (currentEditButtonInput); if (currentEditInputPanelInfo.editButtonInputGameObject.activeSelf) { currentEditInputPanelInfo.editButtonInputGameObject.SetActive (false); } } multiAxesEditButtonInput newMultiAxesEditButtonInput = new multiAxesEditButtonInput (); newMultiAxesEditButtonInput.multiAxesEditPanel = newEditInputPanel; newMultiAxesEditButtonInput.multiAxesEditPanelScrollRect = currentEditInputPanelInfo.editInputPanelGameObject.GetComponent (); newMultiAxesEditButtonInput.buttonsList = buttonsList; multiAxesEditButtonInputList.Add (newMultiAxesEditButtonInput); if (newEditInputPanel.activeSelf) { newEditInputPanel.SetActive (false); } //set the empty element of the list in the bottom of the list bottom.transform.SetAsLastSibling (); bottom.SetActive (false); } if (updateComponentActive) { print ("Rebind Input Panels and actions buttons created in editor"); updateComponent (); } } void getCurrentAxesListFromInspector () { if (multiAxesEditButtonInputList.Count == 0) { createRebindInputMenuWithCurrentAxes = true; instantiateRebindMenusAndActionsPanels (false); } if (editInputMenu != null && !editInputMenu.activeSelf) { editInputMenu.SetActive (true); } if (editInputPanelPrefab != null) { editInputPanelPrefab.SetActive (false); } if (multiAxesEditButtonInputList.Count > 0) { for (int i = 0; i < multiAxesList.Count; i++) { if (multiAxesList [i].currentlyActive) { multiAxesEditButtonInput currentMultiAxesEditButtonInput = multiAxesEditButtonInputList [i]; currentMultiAxesEditButtonInput.multiAxesEditPanelActive = multiAxesList [i].multiAxesEditPanelActive; currentMultiAxesEditButtonInput.multiAxesEditPanel.name = multiAxesList [i].axesName; if (currentMultiAxesEditButtonInput.multiAxesEditPanel.activeSelf != currentMultiAxesEditButtonInput.multiAxesEditPanelActive) { currentMultiAxesEditButtonInput.multiAxesEditPanel.SetActive (currentMultiAxesEditButtonInput.multiAxesEditPanelActive); } List currentAxesList = multiAxesList [i].axes; //get all the keys field inside the edit input menu for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; currentAxes.keyButton = currentAxes.key.ToString (); if (currentAxes.actionEnabled) { //every key field in the edit input button has a editButtonInput component, so create every of them currentMultiAxesEditButtonInput.buttonsList [j].name = currentAxes.Name; editButtonInput currentEditButtonInput = currentMultiAxesEditButtonInput.buttonsList [j]; currentEditButtonInput.editButtonInputActive = true; currentEditButtonInput.actionNameText.text = getLocalizedText (currentAxes.Name); currentEditButtonInput.actionKeyText.text = getLocalizedText (currentAxes.keyButton); currentEditButtonInput.currentActionKeyString = currentAxes.keyButton; currentEditButtonInput.keyboardActionKey = currentAxes.keyButton; if (currentAxes.joystickButton != joystickButtons.None) { currentEditButtonInput.gamepadActionKey = currentAxes.joystickButton.ToString (); } currentEditButtonInput.multiAxesIndex = i; currentEditButtonInput.axesIndex = j; if (currentAxes.showActionInRebindPanel) { if (!currentEditButtonInput.editButtonGameObject.activeSelf) { currentEditButtonInput.editButtonGameObject.SetActive (true); } } } } } } } if (editInputMenu != null && editInputMenu.activeSelf) { editInputMenu.SetActive (false); } //set in every key field in the edit input menu with the stored key input for every field for (int i = 0; i < multiAxesEditButtonInputList.Count; i++) { multiAxesEditButtonInput currentEditButton = multiAxesEditButtonInputList [i]; if (currentEditButton.multiAxesEditPanelActive) { for (int j = 0; j < multiAxesEditButtonInputList [i].buttonsList.Count; j++) { editButtonInput currentEditButtonInput = currentEditButton.buttonsList [j]; if (currentEditButtonInput.editButtonInputActive) { if (i <= multiAxesList.Count - 1 && j < multiAxesList [i].axes.Count - 1) { currentEditButtonInput.currentActionKeyString = multiAxesList [i].axes [j].keyButton; currentEditButtonInput.actionKeyText.text = getLocalizedText (multiAxesList [i].axes [j].keyButton); } } } } } } public void saveButtonsInput () { //for every key field in the edit input menu, save its value and change them in the inputManager inspector aswell if (Application.isPlaying) { for (int i = 0; i < multiAxesEditButtonInputList.Count; i++) { multiAxesEditButtonInput currentEditButton = multiAxesEditButtonInputList [i]; if (currentEditButton.multiAxesEditPanelActive) { for (int j = 0; j < currentEditButton.buttonsList.Count; j++) { editButtonInput currentEditButtonInput = currentEditButton.buttonsList [j]; if (currentEditButtonInput.editButtonInputActive) { string currentKeyAction = currentEditButtonInput.currentActionKeyString; if (usingGamepad) { if (!currentKeyAction.Equals ("")) { currentEditButtonInput.gamepadActionKey = currentKeyAction; changeGamepadKeyValue (currentKeyAction, currentEditButtonInput.multiAxesIndex, currentEditButtonInput.axesIndex); } } else { currentEditButtonInput.keyboardActionKey = currentKeyAction; changeKeyValue (currentKeyAction, currentEditButtonInput.multiAxesIndex, currentEditButtonInput.axesIndex); } } } } } } //create a list of axes to store it List temporalMultiAxesList = new List (); for (int i = 0; i < multiAxesList.Count; i++) { List temporalAxesList = new List (); List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; Axes axe = new Axes (); axe.Name = currentAxes.Name; axe.actionEnabled = currentAxes.actionEnabled; axe.key = currentAxes.key; axe.keyButton = currentAxes.key.ToString (); axe.joystickButton = currentAxes.joystickButton; axe.touchButtonIndex = currentAxes.touchButtonIndex; axe.touchButtonPanelIndex = currentAxes.touchButtonPanelIndex; axe.showActionInRebindPanel = currentAxes.showActionInRebindPanel; temporalAxesList.Add (axe); } multiAxes newMultiAxes = new multiAxes (multiAxesList [i]); newMultiAxes.axesName = multiAxesList [i].axesName; newMultiAxes.axes = temporalAxesList; temporalMultiAxesList.Add (newMultiAxes); } //save the input list BinaryFormatter bf = new BinaryFormatter (); FileStream file = File.Create (getDataPath (saveFileName)); bf.Serialize (file, temporalMultiAxesList); file.Close (); print ("Input Saved in path" + getDataPath (saveFileName)); } public string getDataPath (string fileNameToUse) { string dataPath = ""; if (useRelativePath) { dataPath = saveFileFolderName; } else { dataPath = Application.persistentDataPath + "/" + saveFileFolderName; } if (useCustomInputFilePathName) { if (!Application.isPlaying) { dataPath = customInputFilePathName; } } if (!Directory.Exists (dataPath)) { Directory.CreateDirectory (dataPath); } dataPath += "/" + fileNameToUse; return dataPath; } public void loadButtonsInput () { List temporalMultiAxesList = new List (); //if the configuration is loaded from a file, get a new axes list with the stored values if (loadOption == loadType.loadFile) { //print (saveFileName); //print (File.Exists (getDataPath (saveFileName))); //if the file of buttons exists, get that list if (!touchPlatform && File.Exists (getDataPath (saveFileName))) { BinaryFormatter bf = new BinaryFormatter (); FileStream file = File.Open (getDataPath (saveFileName), FileMode.Open); temporalMultiAxesList = (List)bf.Deserialize (file); file.Close (); multiAxesList.Clear (); for (int i = 0; i < temporalMultiAxesList.Count; i++) { List temporalAxesList = new List (); for (int j = 0; j < temporalMultiAxesList [i].axes.Count; j++) { temporalAxesList.Add (temporalMultiAxesList [i].axes [j]); } // print (temporalMultiAxesList [i].axesName + " " + temporalMultiAxesList [i].multiAxesEditPanelActive); multiAxes newMultiAxes = new multiAxes (temporalMultiAxesList [i]); // print (newMultiAxes.axesName + " " + newMultiAxes.multiAxesEditPanelActive); newMultiAxes.axesName = temporalMultiAxesList [i].axesName; newMultiAxes.axes = temporalAxesList; multiAxesList.Add (newMultiAxes); } } //else, get the list created in the inspector else { for (int i = 0; i < multiAxesList.Count; i++) { List temporalAxesList = new List (); List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { temporalAxesList.Add (currentAxesList [j]); } multiAxes newMultiAxes = new multiAxes (multiAxesList [i]); newMultiAxes.axesName = multiAxesList [i].axesName; newMultiAxes.axes = temporalAxesList; temporalMultiAxesList.Add (newMultiAxes); } saveButtonsInputFromInspector (saveFileName); } } //else the new axes list is the axes in the input manager inspector else { for (int i = 0; i < multiAxesList.Count; i++) { List currentAxesList = multiAxesList [i].axes; multiAxes newMultiAxes = new multiAxes (multiAxesList [i]); newMultiAxes.axesName = multiAxesList [i].axesName; newMultiAxes.axes = currentAxesList; temporalMultiAxesList.Add (newMultiAxes); } } for (int i = 0; i < multiAxesList.Count; i++) { List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; int currentPanelIndex = currentAxes.touchButtonPanelIndex; int currentButtonIndex = currentAxes.touchButtonIndex; if (currentPanelIndex > 0) { if (touchButtonsInfoList.Count > currentPanelIndex - 1) { if (touchButtonsInfoList [currentPanelIndex - 1].touchButtonList.Count > currentButtonIndex) { touchButtonListener currentTouchButtonListener = touchButtonsInfoList [currentPanelIndex - 1].touchButtonList [currentButtonIndex]; currentAxes.currentTouchButtonIndex = touchButtonList.IndexOf (currentTouchButtonListener); touchButtonListener touchButtonListenerToCheck = touchButtonList [currentAxes.currentTouchButtonIndex]; if (touchButtonListenerToCheck != null) { GameObject currentTouchButtonToCheck = touchButtonListenerToCheck.gameObject; if (currentTouchButtonToCheck != null && isInTouchButtonToDisableList (currentTouchButtonToCheck)) { if (currentTouchButtonToCheck.activeSelf) { currentTouchButtonToCheck.SetActive (false); } } } else { currentAxes.touchButtonPanelIndex = 0; } } else { print ("WARNING: The axes list " + multiAxesList [i].axesName + " is trying to use a touch button which is not correct, " + "in the touch panel " + touchButtonsInfoList [currentPanelIndex - 1].Name + ", make sure to check the touch button input option in the action" + currentAxes.Name); } } else { print ("WARNING: The axes list " + multiAxesList [i].axesName + " is trying to use a touch panel which is not correct," + " make sure to check the touch button input option in the action" + currentAxes.Name); } } currentAxes.keyButton = currentAxes.key.ToString (); } } numberOfMultiAxes = multiAxesList.Count; multiAxesIndexList = new int [numberOfMultiAxes]; for (int i = 0; i < numberOfMultiAxes; i++) { multiAxesIndexList [i] = multiAxesList [i].axes.Count; } numberOfTouchControls = touchButtonList.Count; } //save the input list in the inspector to a file public void saveButtonsInputFromInspector (string fileNameToUse) { //create a list of axes to store it List temporalMultiAxesList = new List (); for (int i = 0; i < multiAxesList.Count; i++) { List temporalAxesList = new List (); List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; Axes axe = new Axes (); axe.Name = currentAxes.Name; axe.actionEnabled = currentAxes.actionEnabled; axe.key = currentAxes.key; axe.keyButton = currentAxes.key.ToString (); axe.joystickButton = currentAxes.joystickButton; axe.touchButtonIndex = currentAxes.touchButtonIndex; axe.touchButtonPanelIndex = currentAxes.touchButtonPanelIndex; axe.showActionInRebindPanel = currentAxes.showActionInRebindPanel; temporalAxesList.Add (axe); } //print (multiAxesList [i].axesName + " " + multiAxesList [i].multiAxesEditPanelActive); multiAxes newMultiAxes = new multiAxes (multiAxesList [i]); //print (newMultiAxes.axesName + " " + newMultiAxes.multiAxesEditPanelActive); newMultiAxes.axesName = multiAxesList [i].axesName; newMultiAxes.axes = temporalAxesList; temporalMultiAxesList.Add (newMultiAxes); } //save the input list BinaryFormatter bf = new BinaryFormatter (); FileStream file = File.Create (getDataPath (fileNameToUse)); bf.Serialize (file, temporalMultiAxesList); file.Close (); print ("Current Input Saved in path" + getDataPath (fileNameToUse)); } //load the input list from the file to the inspector public void loadButtonsInputFromInspector (string fileNameToUse) { List temporalMultiAxesList = new List (); if (File.Exists (getDataPath (fileNameToUse))) { BinaryFormatter bf = new BinaryFormatter (); FileStream file = File.Open (getDataPath (fileNameToUse), FileMode.Open); temporalMultiAxesList = (List)bf.Deserialize (file); file.Close (); } else { print ("File located in " + fileNameToUse + " doesn't exist, make sure the file is created previously to load it in the editor"); return; } //print (axesList.Count); multiAxesList.Clear (); //set the touch button for every axes, if it had it for (int i = 0; i < temporalMultiAxesList.Count; i++) { List temporalAxesList = new List (); for (int j = 0; j < temporalMultiAxesList [i].axes.Count; j++) { temporalAxesList.Add (temporalMultiAxesList [i].axes [j]); } multiAxes newMultiAxes = new multiAxes (temporalMultiAxesList [i]); newMultiAxes.axesName = temporalMultiAxesList [i].axesName; newMultiAxes.axes = temporalAxesList; multiAxesList.Add (newMultiAxes); } print ("Input File Loaded from " + fileNameToUse); } public void getGameManagerSettings () { saveFileFolderName = mainGameManager.saveInputFileFolderName; saveFileName = mainGameManager.saveInputFileName + " " + mainGameManager.versionNumber + mainGameManager.fileExtension; defaultSaveFileName = mainGameManager.defaultInputSaveFileName + " " + mainGameManager.versionNumber + mainGameManager.fileExtension; useRelativePath = mainGameManager.useRelativePath; mainGameManager.setCurrentPersistentDataPath (); updateComponent (); } public void setCurrentInputToDefault () { getGameManagerSettings (); loadButtonsInputFromInspector (defaultSaveFileName); updateInputInspector (); } public void loadButtonsInspectorFromSaveFile () { getGameManagerSettings (); if (useCustomInputFileName && !Application.isPlaying) { string newNameFile = saveFileName; if (customInputFileName != null && customInputFileName != "") { newNameFile = customInputFileName + mainGameManager.fileExtension; } loadButtonsInputFromInspector (newNameFile); } else { loadButtonsInputFromInspector (saveFileName); } updateInputInspector (); } public void saveCurrentInputAsDefault () { getGameManagerSettings (); saveButtonsInputFromInspector (defaultSaveFileName); updateComponent (); } public void saveButtonsInputToSaveFile () { getGameManagerSettings (); if (useCustomInputFileName && !Application.isPlaying) { string newNameFile = saveFileName; if (customInputFileName != null && customInputFileName != "") { newNameFile = customInputFileName + mainGameManager.fileExtension; } saveButtonsInputFromInspector (newNameFile); } else { saveButtonsInputFromInspector (saveFileName); } updateComponent (); } public void showCustomInputFileList () { if (customInputFileListAssigned) { customInputFileListAssigned = false; customInputFileList = new string [0]; return; } if (!Directory.Exists (customInputFilePathName)) { Debug.Log ("WARNING: " + customInputFilePathName + " path doesn't exist, make sure the path is from an existing folder in the project"); return; } string [] search_results = null; customInputFileListAssigned = false; search_results = System.IO.Directory.GetFiles (customInputFilePathName, "*.txt"); print (search_results.Length); if (search_results.Length > 0) { customInputFileList = new string [search_results.Length]; int currentInputFileIndex = 0; foreach (string file in search_results) { string nameFile = file; if (nameFile.Contains (customInputFilePathName)) { nameFile = nameFile.Replace (customInputFilePathName, ""); } if (nameFile.Contains (mainGameManager.fileExtension)) { nameFile = nameFile.Replace (mainGameManager.fileExtension, ""); } nameFile = Regex.Replace (nameFile, "[^0-9A-Za-z ,]", ""); customInputFileList [currentInputFileIndex] = nameFile; print (nameFile); currentInputFileIndex++; } customInputFileListAssigned = true; } else { Debug.Log ("Input File not found in path " + customInputFilePathName); customInputFileList = new string [0]; } } public void changeKeyValue (string keyButton, int multiAxesIndex, int axesIndex) { Axes currentAxes = multiAxesList [multiAxesIndex].axes [axesIndex]; // print (currentAxes.Name + " " + keyButton); KeyCode newKeyCode = (KeyCode)System.Enum.Parse (typeof (KeyCode), keyButton); currentAxes.key = newKeyCode; currentAxes.keyButton = currentAxes.key.ToString (); } public void changeGamepadKeyValue (string keyButton, int multiAxesIndex, int axesIndex) { Axes currentAxes = multiAxesList [multiAxesIndex].axes [axesIndex]; // print (currentAxes.Name + " " + keyButton); currentAxes.joystickButton = (joystickButtons)Enum.Parse (typeof (joystickButtons), keyButton); } //get the key button value for an input field, using the action of the button public string getButtonKey (string actionName) { // print (actionName); for (int i = 0; i < multiAxesList.Count; i++) { List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; if (currentAxes.Name.Equals (actionName)) { if (((usingGamepad && !usingKeyBoard) || lastButtonPressedOnGamepad) && currentAxes.joystickButton != joystickButtons.None) { return currentAxes.joystickButton.ToString (); } else { return currentAxes.keyButton; } } } } print ("WARNING: no input key found for the action called " + actionName); return ""; } //if the input field has been pressed, call a coroutine, to avoid the input field get the mouse press as new value public void startEditingInput (GameObject button) { if (!editingInput) { StartCoroutine (startEditingInputCoroutine (button)); } } //set the text of the input field to ... and start to check the keyboard press IEnumerator startEditingInputCoroutine (GameObject button) { yield return null; currentEditButtonInputToRebind = button.GetComponent (); currentEditButtonInputPreviouseValue = currentEditButtonInputToRebind.actionKeyText.text; currentEditButtonInputToRebind.actionKeyText.text = "..."; editingInput = true; newKeyAssigned = false; } public bool isEditingInput () { return editingInput; } //any change done in the input field is undone public void cancelEditingInput () { editingInput = false; newKeyAssigned = false; if (currentEditButtonInputToRebind) { // print (currentEditButtonInputPreviouseValue); currentEditButtonInputToRebind.actionKeyText.text = currentEditButtonInputPreviouseValue; currentEditButtonInputToRebind = null; } } string getLocalizedText (string textContent) { if (gameLanguageSelector.isCheckLanguageActive ()) { textContent = UIElementsLocalizationManager.GetLocalizedValue (textContent); } return textContent; } public void checkIfSaveInputAfterRebind () { if (newKeyAssigned) { saveButtonsInput (); newKeyAssigned = false; } } public void getValidKeyCodes () { validKeyCodes = (KeyCode [])System.Enum.GetValues (typeof (KeyCode)); } public string getKeyPressed (buttonType type, bool canBeUsedOnGamePaused) { if ((!gameManagerPaused || canBeUsedOnGamePaused) && (!usingTouchControls || allowGamepadInTouchDevice)) { foreach (KeyCode vKey in validKeyCodes) { switch (type) { //this key is for holding case buttonType.getKey: if (Input.GetKey (vKey)) { return vKey.ToString (); } break; case buttonType.getKeyDown: //this key is for press once if (Input.GetKeyDown (vKey)) { return vKey.ToString (); } break; case buttonType.getKeyUp: //this key is for release if (Input.GetKeyUp (vKey)) { return vKey.ToString (); } break; } } } return ""; } public bool checkJoystickButton (string joystickString, buttonType type) { if (!usingTouchControls || allowGamepadInTouchDevice) { if ((!usingKeyBoard || allowKeyboardAndGamepad)) { if (usingGamepad) { switch (type) { //this key is for holding case buttonType.getKeyDown: if (Input.GetKeyDown (joystickString)) { return true; } break; case buttonType.getKeyUp: if (Input.GetKeyUp (joystickString)) { return true; } break; } } } } return false; } public bool checkPlayerInputButtonFromMultiAxesList (int multiAxesIndex, int axesIndex, buttonType type, int controllerNumber, bool canBeUsedOnPausedGame, bool useOnlyKeyboard) { if (usingTouchControls) { return getTouchButtonFromMultiAxesList (multiAxesIndex, axesIndex, type); } #if REWIRED if (useRewired) { return getJoystickButtonFromMultiAxesList(multiAxesIndex, axesIndex, type, controllerNumber, canBeUsedOnPausedGame); } #endif if ((!usingKeyBoard || allowKeyboardAndGamepad) && !useOnlyKeyboard) { if (usingGamepad) { if (getJoystickButtonFromMultiAxesList (multiAxesIndex, axesIndex, type, controllerNumber, canBeUsedOnPausedGame)) { if (!lastButtonPressedOnGamepad) { // print ("pressing gamepad"); GKC_Utils.eventOnPressingGamepadInput (controllerNumber); lastButtonPressedOnGamepad = true; } lastKeyPressedOnKeyboard = false; return true; } } } if (usingKeyBoard || allowKeyboardAndGamepad || useOnlyKeyboard) { if (getKeyboardButtonFromMultiAxesList (multiAxesIndex, axesIndex, type, canBeUsedOnPausedGame)) { if (!lastKeyPressedOnKeyboard) { // print ("pressing keyboard"); GKC_Utils.eventOnPressingKeyboardInput (controllerNumber); lastKeyPressedOnKeyboard = true; } lastButtonPressedOnGamepad = false; return true; } } return false; } //function called in the script where pressing that button will make an action in the game, for example jump, crouch, shoot, etc... //every button sends its action and the type of pressing public bool getKeyboardButtonFromMultiAxesList (int multiAxesIndex, int axesIndex, buttonType type, bool canBeUsedOnPausedGame) { //if the game is not paused, and the current control is the keyboard if ((canBeUsedOnPausedGame || !gameManagerPaused) && (!usingTouchControls || allowGamepadInTouchDevice)) { if (multiAxesIndex >= numberOfMultiAxes) { if (showMissingInputWarningMessagesEnabled) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed. " + "\n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC." + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } return false; } if (multiAxesIndex < 0 || axesIndex < 0) { if (showMissingInputWarningMessagesEnabled) { if (multiAxesIndex >= 0) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed in the Group of actions" + " called " + multiAxesList [multiAxesIndex].axesName + " \n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } else { print ("WARNING: The input manager is trying to access to a multi axes which has changed or has been removed. " + "\n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } } return false; } if (axesIndex >= multiAxesIndexList [multiAxesIndex]) { if (showMissingInputWarningMessagesEnabled) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed in the Group of actions" + " called " + multiAxesList [multiAxesIndex].axesName + " \n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } return false; } if (!multiAxesList [multiAxesIndex].currentlyActive) { return false; } currentKeyButtonToCheck = multiAxesList [multiAxesIndex].axes [axesIndex]; //check that the key pressed has being defined as an action if (!currentKeyButtonToCheck.actionEnabled) { return false; } currentKeyCodeToCheck = currentKeyButtonToCheck.key; switch (type) { //this key is for holding case buttonType.getKey: if (Input.GetKey (currentKeyCodeToCheck)) { if (showKeyboardPressed) { print ("Get Key: " + currentKeyButtonToCheck.keyButton); } if (showKeyboardPressedAction) { print ("Action Name On Key: " + currentKeyButtonToCheck.Name); } return true; } break; //this key is for press once case buttonType.getKeyDown: if (Input.GetKeyDown (currentKeyCodeToCheck)) { if (showKeyboardPressed) { print ("Get Key Down: " + currentKeyButtonToCheck.keyButton); } if (showKeyboardPressedAction) { print ("Action Name On Key Down: " + currentKeyButtonToCheck.Name); } return true; } break; //this key is for release case buttonType.getKeyUp: if (Input.GetKeyUp (currentKeyCodeToCheck)) { if (showKeyboardPressed) { print ("Get Key Up: " + currentKeyButtonToCheck.keyButton); } if (showKeyboardPressedAction) { print ("Action Name On Key Up: " + currentKeyButtonToCheck.Name); } return true; } break; //mouse wheel case buttonType.negMouseWheel: //check if the wheel of the mouse has been used, and in what direction if (Input.GetAxis ("Mouse ScrollWheel") < 0) { return true; } break; case buttonType.posMouseWheel: //check if the wheel of the mouse has been used, and in what direction if (Input.GetAxis ("Mouse ScrollWheel") > 0) { return true; } break; } } return false; } public bool isKeyboardButtonPressed (int controllerNumber, string multiAxesName, string axesName) { int multiAxesIndex = multiAxesList.FindIndex (s => s.axesName.ToLower ().Equals (multiAxesName.ToLower ())); if (multiAxesIndex > -1) { int axesIndex = multiAxesList [multiAxesIndex].axes.FindIndex (s => s.Name.ToLower ().Equals (axesName.ToLower ())); if (axesIndex > -1) { currentKeyButtonToCheck = multiAxesList [multiAxesIndex].axes [axesIndex]; if (usingTouchControls) { if (currentKeyButtonToCheck.touchButtonPanelIndex > 0) { currentTouchButtonIndexToCheck = currentKeyButtonToCheck.currentTouchButtonIndex; if (numberOfTouchControls > currentTouchButtonIndexToCheck) { currentTouchButtonListener = touchButtonList [currentTouchButtonIndexToCheck]; if (currentTouchButtonListener.pressed) { return true; } } } } else { currentKeyCodeToCheck = currentKeyButtonToCheck.key; if (Input.GetKey (currentKeyCodeToCheck)) { return true; } if ((!usingKeyBoard || allowKeyboardAndGamepad) && usingGamepad) { keyIndexPressed = (int)currentKeyButtonToCheck.joystickButton; if (keyIndexPressed == -1) { return false; } currentJoystickButtonIsAxis = (keyIndexPressed >= 10 && keyIndexPressed <= 15); if (currentJoystickButtonIsAxis) { return getAxisValue (controllerNumber, keyIndexPressed, multiAxesIndex, axesIndex, (int)buttonType.getKey); } if (controllerNumber <= 0) { return false; } currentJoystickButtonKeyString = gamepadList [controllerNumber - 1].joystickButtonStringList [keyIndexPressed]; if (Input.GetKey (currentJoystickButtonKeyString)) { return true; } } } } } return false; } int currentTouchCount; int currentTouchIndex; public bool getTouchButtonFromMultiAxesList (int multiAxesIndex, int axesIndex, buttonType type) { //if the game is not paused, and the current control is a touch device if (!gameManagerPaused && usingTouchControls) { if (multiAxesIndex >= numberOfMultiAxes) { if (showMissingInputWarningMessagesEnabled) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed. " + "\n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC." + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } return false; } if (multiAxesIndex < 0 || axesIndex < 0) { if (showMissingInputWarningMessagesEnabled) { if (multiAxesIndex >= 0) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed in the Group of actions" + " called " + multiAxesList [multiAxesIndex].axesName + " \n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } else { print ("WARNING: The input manager is trying to access to a multi axes which has changed or has been removed. " + "\n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } } return false; } if (axesIndex >= multiAxesIndexList [multiAxesIndex]) { if (showMissingInputWarningMessagesEnabled) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed in the Group of actions" + " called " + multiAxesList [multiAxesIndex].axesName + " \n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } return false; } if (!multiAxesList [multiAxesIndex].currentlyActive) { return false; } currentTouchButtonToCheck = multiAxesList [multiAxesIndex].axes [axesIndex]; if (!currentTouchButtonToCheck.actionEnabled) { return false; } if (currentTouchButtonToCheck.touchButtonPanelIndex > 0) { currentTouchButtonIndexToCheck = currentTouchButtonToCheck.currentTouchButtonIndex; if (numberOfTouchControls > currentTouchButtonIndexToCheck) { currentTouchButtonListener = touchButtonList [currentTouchButtonIndexToCheck]; //check for a began touch if (type == buttonType.getKeyDown) { if (currentTouchButtonListener.pressedDown) { currentTouchCount = Input.touchCount; if (!touchPlatform) { currentTouchCount++; } for (currentTouchIndex = 0; currentTouchIndex < currentTouchCount; currentTouchIndex++) { if (!touchPlatform) { currentTouch = touchJoystick.convertMouseIntoFinger (); } else { currentTouch = Input.GetTouch (currentTouchIndex); } if (currentTouch.phase == TouchPhase.Began) { //if the button is pressed (OnPointerDown), return true //print ("getKeyDown"); return true; } } } } //check for a hold touch if (type == buttonType.getKey) { if (currentTouchButtonListener.pressed) { currentTouchCount = Input.touchCount; if (!touchPlatform) { currentTouchCount++; } for (currentTouchIndex = 0; currentTouchIndex < currentTouchCount; currentTouchIndex++) { if (!touchPlatform) { currentTouch = touchJoystick.convertMouseIntoFinger (); } else { currentTouch = Input.GetTouch (currentTouchIndex); } if (currentTouch.phase == TouchPhase.Stationary || currentTouch.phase == TouchPhase.Moved) { //if the button is pressed OnPointerDown, and is not released yet (OnPointerUp), return true //print ("getKey"); return true; } } } } //check for a release touch if (type == buttonType.getKeyUp) { if (currentTouchButtonListener.pressedUp) { currentTouchCount = Input.touchCount; if (!touchPlatform) { currentTouchCount++; } for (currentTouchIndex = 0; currentTouchIndex < currentTouchCount; currentTouchIndex++) { if (!touchPlatform) { currentTouch = touchJoystick.convertMouseIntoFinger (); } else { currentTouch = Input.GetTouch (currentTouchIndex); } if (currentTouch.phase == TouchPhase.Ended) { //if the button is released (OnPointerUp), return true //print ("getKeyUp"); return true; } } } } } } } return false; } public bool useMultipleGamepadDictionary; public bool getJoystickButtonFromMultiAxesList (int multiAxesIndex, int axesIndex, buttonType type, int controllerNumber, bool canBeUsedOnPausedGame) { //if the game is not paused, and the current control is the keyboard if ((canBeUsedOnPausedGame || !gameManagerPaused) && (!usingTouchControls || allowGamepadInTouchDevice)) { #if REWIRED if (!useRewired) { #endif if (controllerNumber == 0 || controllerNumber > numberOfGamepads) { return false; } #if REWIRED } #endif if (multiAxesIndex >= numberOfMultiAxes) { if (showMissingInputWarningMessagesEnabled) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed. " + "\n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC." + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } return false; } if (multiAxesIndex < 0 || axesIndex < 0) { if (showMissingInputWarningMessagesEnabled) { if (multiAxesIndex >= 0) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed in the Group of actions" + " called " + multiAxesList [multiAxesIndex].axesName + " \n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } else { print ("WARNING: The input manager is trying to access to a multi axes which has changed or has been removed. " + "\n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } } return false; } if (axesIndex >= multiAxesIndexList [multiAxesIndex]) { if (showMissingInputWarningMessagesEnabled) { print ("WARNING: The input manager is trying to access to an action which has changed or has been removed in the Group of actions" + " called " + multiAxesList [multiAxesIndex].axesName + " \n Please, check the Player Input Manager to configure properly this group of actions according to the " + "settings in the main custom Input Manager of GKC" + "\n Use the Update Input List button on Player Input Manager and make sure to remove any removed action from it where the Axe field appears as empty.\n\n"); } return false; } if (!multiAxesList [multiAxesIndex].currentlyActive) { return false; } currentJoystickButtonToCheck = multiAxesList [multiAxesIndex].axes [axesIndex]; //check that the key pressed has being defined as an action if (!currentJoystickButtonToCheck.actionEnabled) { return false; } keyIndexPressed = (int)currentJoystickButtonToCheck.joystickButton; #if REWIRED if (!useRewired) { #endif if (keyIndexPressed == -1) { return false; } currentJoystickButtonIsAxis = (keyIndexPressed >= 10 && keyIndexPressed <= 15); if (currentJoystickButtonIsAxis) { return getAxisValue (controllerNumber, keyIndexPressed, multiAxesIndex, axesIndex, type); } if (useMultipleGamepadDictionary) { currentJoystickButtonKeyString = getKeyString (controllerNumber, keyIndexPressed); } else { currentJoystickButtonKeyString = gamepadList [controllerNumber - 1].joystickButtonStringList [keyIndexPressed]; } #if REWIRED } #endif switch (type) { //this key is for holding case buttonType.getKey: #if REWIRED if (useRewired) { if (currentJoystickButtonToCheck.rewiredAction < 0) return false; if (currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Positive || currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Both) { if (_rewiredPlayers[controllerNumber - 1].GetButton(currentJoystickButtonToCheck.rewiredAction)) { if (showGamepadPressed) { print (controllerNumber + " Get Key: " + ReInput.mapping.GetAction(currentJoystickButtonToCheck.rewiredAction).name); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key: " + currentJoystickButtonToCheck.Name); } return true; } } if (currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Negative || currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Both) { if (_rewiredPlayers[controllerNumber - 1].GetNegativeButton(currentJoystickButtonToCheck.rewiredAction)) { if (showGamepadPressed) { print (controllerNumber + " Get Key: " + ReInput.mapping.GetAction(currentJoystickButtonToCheck.rewiredAction).name); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key: " + currentJoystickButtonToCheck.Name); } return true; } } return false; } #endif if (Input.GetKey (currentJoystickButtonKeyString)) { if (showGamepadPressed) { print (controllerNumber + " Get Key: " + currentJoystickButtonKeyString); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key: " + currentJoystickButtonToCheck.Name); } return true; } break; case buttonType.getKeyDown: //this key is for press once #if REWIRED if (useRewired) { if (currentJoystickButtonToCheck.rewiredAction < 0) return false; if (currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Positive || currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Both) { if (_rewiredPlayers[controllerNumber - 1].GetButtonDown(currentJoystickButtonToCheck.rewiredAction)) { if (showGamepadPressed) { print (controllerNumber + " Get Key Down: " + ReInput.mapping.GetAction(currentJoystickButtonToCheck.rewiredAction).name); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key Down: " + currentJoystickButtonToCheck.Name); } return true; } } if (currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Negative || currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Both) { if (_rewiredPlayers[controllerNumber - 1].GetNegativeButtonDown(currentJoystickButtonToCheck.rewiredAction)) { if (showGamepadPressed) { print (controllerNumber + " Get Key Down: " + ReInput.mapping.GetAction(currentJoystickButtonToCheck.rewiredAction).name); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key Down: " + currentJoystickButtonToCheck.Name); } return true; } } return false; } #endif if (Input.GetKeyDown (currentJoystickButtonKeyString)) { if (showGamepadPressed) { print (controllerNumber + " Get Key Down: " + currentJoystickButtonKeyString); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key Down: " + currentJoystickButtonToCheck.Name); } return true; } break; case buttonType.getKeyUp: //this key is for release #if REWIRED if (useRewired) { if (currentJoystickButtonToCheck.rewiredAction < 0) return false; if (currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Positive || currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Both) { if (_rewiredPlayers[controllerNumber - 1].GetButtonUp(currentJoystickButtonToCheck.rewiredAction)) { if (showGamepadPressed) { print (controllerNumber + " Get Key Up: " + ReInput.mapping.GetAction(currentJoystickButtonToCheck.rewiredAction).name); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key Up: " + currentJoystickButtonToCheck.Name); } return true; } } if (currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Negative || currentJoystickButtonToCheck.axisContribution == Axes.AxisContribution.Both) { if (_rewiredPlayers[controllerNumber - 1].GetNegativeButtonUp(currentJoystickButtonToCheck.rewiredAction)) { if (showGamepadPressed) { print (controllerNumber + " Get Key Up: " + ReInput.mapping.GetAction(currentJoystickButtonToCheck.rewiredAction).name); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key Up: " + currentJoystickButtonToCheck.Name); } return true; } } return false; } #endif if (Input.GetKeyUp (currentJoystickButtonKeyString)) { if (showGamepadPressed) { print (controllerNumber + " Get Key Up: " + currentJoystickButtonKeyString); } if (showGamepadPressedAction) { print (controllerNumber + " Action On Key Up: " + currentJoystickButtonToCheck.Name); } return true; } break; } } return false; } string currentAxisString; public bool getAxisValue (int numberPlayer, int keyPressed, int multiAxesIndex, int axesIndex, buttonType type) { //TRIGGERS if (keyPressed == 14) { currentAxisString = gamepadList [numberPlayer - 1].axisButtonStringList [0]; currentAxisValue = Input.GetAxis (currentAxisString); switch (type) { //this key is for holding case buttonType.getKey: if (currentAxisValue > 0) { if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } break; case buttonType.getKeyDown: if (currentAxisValue > 0) { if (!getGamePadLeftTriggersInfoDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadLeftTriggersInfo (numberPlayer, true, multiAxesIndex, axesIndex); setGamepadLeftTriggersInfoDown (numberPlayer, true, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Down: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } else { if (getGamePadLeftTriggersInfoDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadLeftTriggersInfoDown (numberPlayer, false, multiAxesIndex, axesIndex); } } break; case buttonType.getKeyUp: if (currentAxisValue == 0) { if (getGamePadLeftTriggersInfo (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadLeftTriggersInfo (numberPlayer, false, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Up: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } break; } } if (keyPressed == 15) { currentAxisString = gamepadList [numberPlayer - 1].axisButtonStringList [1]; currentAxisValue = Input.GetAxis (currentAxisString); switch (type) { //this key is for holding case buttonType.getKey: if (currentAxisValue > 0) { if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } break; case buttonType.getKeyDown: if (currentAxisValue > 0) { if (!getGamePadRightTriggersInfoDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadRightTriggersInfo (numberPlayer, true, multiAxesIndex, axesIndex); setGamepadRightTriggersInfoDown (numberPlayer, true, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Down: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } else { if (getGamePadRightTriggersInfoDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadRightTriggersInfoDown (numberPlayer, false, multiAxesIndex, axesIndex); } } break; case buttonType.getKeyUp: if (currentAxisValue == 0) { if (getGamePadRightTriggersInfo (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadRightTriggersInfo (numberPlayer, false, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } break; } } //DPAD X if (keyPressed == 10) { currentAxisString = gamepadList [numberPlayer - 1].axisButtonStringList [2]; currentAxisValue = Input.GetAxis (currentAxisString); switch (type) { //this key is for holding case buttonType.getKey: if (currentAxisValue < 0) { if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } break; case buttonType.getKeyDown: if (currentAxisValue < 0) { if (!getGamePadDPadXInfoNegativeDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadXInfoNegative (numberPlayer, true, multiAxesIndex, axesIndex); setGamepadDPadXInfoNegativeDown (numberPlayer, true, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Down: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } else { if (getGamePadDPadXInfoNegativeDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadXInfoNegativeDown (numberPlayer, false, multiAxesIndex, axesIndex); } } break; case buttonType.getKeyUp: if (currentAxisValue == 0) { if (getGamePadDPadXInfoNegative (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadXInfoNegative (numberPlayer, false, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Up: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } break; } } if (keyPressed == 11) { currentAxisString = gamepadList [numberPlayer - 1].axisButtonStringList [2]; currentAxisValue = Input.GetAxis (currentAxisString); switch (type) { //this key is for holding case buttonType.getKey: if (currentAxisValue > 0) { if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } break; case buttonType.getKeyDown: if (currentAxisValue > 0) { if (!getGamePadDPadXInfoPositiveDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadXInfoPositive (numberPlayer, true, multiAxesIndex, axesIndex); setGamepadDPadXInfoPositiveDown (numberPlayer, true, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Down: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } else { if (getGamePadDPadXInfoPositiveDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadXInfoPositiveDown (numberPlayer, false, multiAxesIndex, axesIndex); } } break; case buttonType.getKeyUp: if (currentAxisValue == 0) { if (getGamePadDPadXInfoPositive (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadXInfoPositive (numberPlayer, false, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Up: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } break; } } //DPAD Y if (keyPressed == 12) { currentAxisString = gamepadList [numberPlayer - 1].axisButtonStringList [3]; currentAxisValue = Input.GetAxis (currentAxisString); switch (type) { //this key is for holding case buttonType.getKey: if (currentAxisValue < 0) { if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } break; case buttonType.getKeyDown: if (currentAxisValue < 0) { if (!getGamePadDPadYInfoNegativeDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadYInfoNegative (numberPlayer, true, multiAxesIndex, axesIndex); setGamepadDPadYInfoNegativeDown (numberPlayer, true, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Down: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } else { if (getGamePadDPadYInfoNegativeDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadYInfoNegativeDown (numberPlayer, false, multiAxesIndex, axesIndex); } } break; case buttonType.getKeyUp: if (currentAxisValue == 0) { if (getGamePadDPadYInfoNegative (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadYInfoNegative (numberPlayer, false, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Up: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } break; } } if (keyPressed == 13) { currentAxisString = gamepadList [numberPlayer - 1].axisButtonStringList [3]; currentAxisValue = Input.GetAxis (currentAxisString); switch (type) { //this key is for holding case buttonType.getKey: if (currentAxisValue > 0) { if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } break; case buttonType.getKeyDown: if (currentAxisValue > 0) { if (!getGamePadDPadYInfoPositiveDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadYInfoPositive (numberPlayer, true, multiAxesIndex, axesIndex); setGamepadDPadYInfoPositiveDown (numberPlayer, true, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Down: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } else { if (getGamePadDPadYInfoPositiveDown (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadYInfoPositiveDown (numberPlayer, false, multiAxesIndex, axesIndex); } } break; case buttonType.getKeyUp: if (currentAxisValue == 0) { if (getGamePadDPadYInfoPositive (numberPlayer, multiAxesIndex, axesIndex)) { setGamepadDPadYInfoPositive (numberPlayer, false, multiAxesIndex, axesIndex); if (showGamepadPressed) { print (keyPressed + "-" + numberPlayer); } if (showGamepadPressedAction) { print (numberPlayer + " Action On Key Up: " + multiAxesList [multiAxesIndex].axes [axesIndex].Name); } return true; } } break; } } return false; } //Set and get triggerS state public void setGamepadLeftTriggersInfo (int numberPlayer, bool left, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingLeftTrigger = left; } public void setGamepadRightTriggersInfo (int numberPlayer, bool right, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingRightTrigger = right; } public void setGamepadLeftTriggersInfoDown (int numberPlayer, bool left, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].leftTriggerDown = left; } public void setGamepadRightTriggersInfoDown (int numberPlayer, bool right, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].rightTriggerDown = right; } public bool getGamePadLeftTriggersInfo (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingLeftTrigger; } public bool getGamePadRightTriggersInfo (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingRightTrigger; } public bool getGamePadLeftTriggersInfoDown (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].leftTriggerDown; } public bool getGamePadRightTriggersInfoDown (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].rightTriggerDown; } //Set and get dpad X state public bool getGamePadDPadXInfoPositive (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadXPositive; } public void setGamepadDPadXInfoPositive (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadXPositive = DPad; } public bool getGamePadDPadXInfoPositiveDown (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadXPositiveDown; } public void setGamepadDPadXInfoPositiveDown (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadXPositiveDown = DPad; } public bool getGamePadDPadXInfoNegative (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadXNegative; } public void setGamepadDPadXInfoNegative (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadXNegative = DPad; } public bool getGamePadDPadXInfoNegativeDown (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadXNegativeDown; } public void setGamepadDPadXInfoNegativeDown (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadXNegativeDown = DPad; } //Set and get dpad Y state public bool getGamePadDPadYInfoPositive (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadYPositive; } public void setGamepadDPadYInfoPositive (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadYPositive = DPad; } public bool getGamePadDPadYInfoPositiveDown (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadYPositiveDown; } public void setGamepadDPadYInfoPositiveDown (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadYPositiveDown = DPad; } public bool getGamePadDPadYInfoNegative (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadYNegative; } public void setGamepadDPadYInfoNegative (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].usingDPadYNegative = DPad; } public bool getGamePadDPadYInfoNegativeDown (int numberPlayer, int multiAxesIndex, int axesIndex) { return gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadYNegativeDown; } public void setGamepadDPadYInfoNegativeDown (int numberPlayer, bool DPad, int multiAxesIndex, int axesIndex) { gamepadList [numberPlayer - 1].multiGamepadAxisInfoList [multiAxesIndex].gamepadAxisInfoList [axesIndex].DPadYNegativeDown = DPad; } public void setRegister () { // First use the platform to determine which register to search switch (Application.platform) { case RuntimePlatform.WindowsPlayer | RuntimePlatform.WindowsEditor: register = JoystickData.register_windows; break; case RuntimePlatform.OSXPlayer | RuntimePlatform.OSXEditor: register = JoystickData.register_osx; break; case RuntimePlatform.LinuxPlayer: register = JoystickData.register_linux; break; } register = JoystickData.register_default; } // string keyStringFormat = "{0}{1}{2}{3}"; string getKeyString (int joystickNumber, int keyIndex) { if (!registerInitialized) { setRegister (); registerInitialized = true; } joystickName = "default"; if (!joystickNamesInitialized) { joystickNames = Input.GetJoystickNames (); joystickNamesInitialized = true; } if (joystickNumber > joystickNames.Length) { return ""; } joystickName = joystickNames [joystickNumber - 1]; if (!register.ContainsKey (joystickName)) { joystickName = "default"; // While we are here, make sure there the requested button is in the default joystick config of the default register if (!register [joystickName].ContainsKey ((JoystickData.ButtonTypes)keyIndex)) { // The requested button doesn't exist on the default joystick configuration! This is bad! return ""; } } buttonConfig = register [joystickName]; retString = "joystick " + joystickNumber + " button " + buttonConfig [(JoystickData.ButtonTypes)keyIndex]; // retString = string.Format (keyStringFormat, "joystick ", joystickNumber, " button ", buttonConfig [(JoystickData.ButtonTypes)keyIndex]); return retString; } //change the current controls to keyboard or mobile public void setKeyboardControls (bool state) { mainGameManager.setUseTouchControlsState (!state); pauseManager.setUseTouchControlsState (!state); useTouchControls = !state; for (int i = 0; i < playerInputManagerList.Count; i++) { playerInputManagerList [i].changeControlsType (!state); } } public void setKeyboardControlsFromEditor (bool state) { mainGameManager.setUseTouchControlsStateFromEditor (!state); pauseManager.setUseTouchControlsStateFromEditor (!state); useTouchControls = !state; for (int i = 0; i < playerInputManagerList.Count; i++) { playerInputManagerList [i].changeControlsType (!state); } updateInputInspector (); } public void setUseTouchControlsState (bool state) { useTouchControls = state; } public void updateInputInspector () { if (!Application.isPlaying) { print ("Input Manager Inspector updated"); updateComponent (); GKC_Utils.updateDirtyScene ("Update Input Manager Inspector", gameObject); } } public bool isInTouchButtonToDisableList (GameObject touchButtonGameObject) { if (buttonsDisabledAtStart.Contains (touchButtonGameObject)) { return true; } return false; } public void setGamePadList () { gamepadList.Clear (); int currentGamepadConnectedNameArrayLength = currentGamepadConnectedNameArray.Length; int multiAxesListCount = multiAxesList.Count; for (int i = 0; i < currentGamepadConnectedNameArrayLength; i++) { gamepadInfo newGamepad = new gamepadInfo (); newGamepad.gamepadNumber = (i + 1); newGamepad.gamepadName = currentGamepadConnectedNameArray [i]; for (int j = 0; j < multiAxesListCount; j++) { multiGamepadAxisInfo newMultiGamepadAxisInfo = new multiGamepadAxisInfo (); multiAxes temporaMultiAxes = multiAxesList [j]; newMultiGamepadAxisInfo.Name = temporaMultiAxes.axesName; int axesCount = temporaMultiAxes.axes.Count; for (int k = 0; k < axesCount; k++) { gamepadAxisInfo newGamepadAxisInfo = new gamepadAxisInfo (); newGamepadAxisInfo.Name = temporaMultiAxes.axes [k].Name; newMultiGamepadAxisInfo.gamepadAxisInfoList.Add (newGamepadAxisInfo); } newGamepad.multiGamepadAxisInfoList.Add (newMultiGamepadAxisInfo); } for (int j = 0; j < 20; j++) { newGamepad.joystickButtonStringList.Add ("joystick " + (i + 1) + " button " + j); } newGamepad.axisButtonStringList.Add ("Left Trigger " + (i + 1)); newGamepad.axisButtonStringList.Add ("Right Trigger " + (i + 1)); newGamepad.axisButtonStringList.Add ("DPad X" + (i + 1)); newGamepad.axisButtonStringList.Add ("DPad Y" + (i + 1)); gamepadList.Add (newGamepad); // Debug.Log (currentGamepadConnectedNameArray [i]); } numberOfGamepads = gamepadList.Count; if (numberOfGamepads == 0) { usingKeyBoard = true; usingGamepad = false; //print ("keyboard"); } if (numberOfGamepads >= 1) { usingKeyBoard = false; usingGamepad = true; //print ("gamepad"); } if (numberOfGamepads <= 1) { onlyOnePlayer = true; //print ("one player"); } } //set the current pause state of the game public void setPauseState (bool state) { gameCurrentlyPaused = state; } public void enableTouchButtonByName (string touchButtonName) { enableOrDisableTouchButtonByName (true, touchButtonName); } public void disableTouchButtonByName (string touchButtonName) { enableOrDisableTouchButtonByName (false, touchButtonName); } public void enableOrDisableTouchButtonByName (bool state, string touchButtonName) { for (int i = 0; i < touchButtonList.Count; i++) { if (touchButtonList [i].gameObject.name.Equals (touchButtonName)) { if (touchButtonList [i].gameObject.activeSelf != state) { touchButtonList [i].gameObject.SetActive (state); } return; } } } public bool isTouchPlatform () { return touchPlatform; } public int currentNumberOfTouchButtonsPressed; public void increaseCurrentNumberOfTouchButtonsPressed () { currentNumberOfTouchButtonsPressed++; // print ("increase " + currentNumberOfTouchButtonsPressed); } public void decreaseCurrentNumberOfTouchButtonsPressed () { currentNumberOfTouchButtonsPressed--; if (currentNumberOfTouchButtonsPressed < 0) { currentNumberOfTouchButtonsPressed = 0; } // print ("decrease " + currentNumberOfTouchButtonsPressed); } public int getCurrentNumberOfTouchButtonsPressed () { return currentNumberOfTouchButtonsPressed; } public void checkButtonPressedOnGamepadOrKeyboard (bool checkKeyboard) { if (checkKeyboard) { lastButtonPressedOnGamepad = false; lastKeyPressedOnKeyboard = true; } else { lastButtonPressedOnGamepad = true; lastKeyPressedOnKeyboard = false; } } #if REWIRED private void OnControllerChange(Rewired.Player player, Controller controller) { switch (controller.type) { case ControllerType.Joystick: GKC_Utils.eventOnPressingGamepadInput (player.id + 1); lastButtonPressedOnGamepad = true; lastKeyPressedOnKeyboard = false; break; case ControllerType.Mouse: case ControllerType.Keyboard: GKC_Utils.eventOnPressingKeyboardInput (player.id + 1); lastButtonPressedOnGamepad = false; lastKeyPressedOnKeyboard = true; break; } } #endif public void enableMultiAxesInputByName (string multiAxesName) { enableOrDisableMultiAxesInputByName (true, multiAxesName); } public void disableMultiAxesInputByName (string multiAxesName) { enableOrDisableMultiAxesInputByName (false, multiAxesName); } public void enableOrDisableMultiAxesInputByName (bool state, string multiAxesName) { int multiAxesIndex = multiAxesList.FindIndex (s => s.axesName.ToLower ().Equals (multiAxesName.ToLower ())); if (multiAxesIndex > -1) { multiAxesList [multiAxesIndex].currentlyActive = state; } } //EDITOR FUNCTIONS //add a new axe to the list public void addNewAxe (int axeListIndex) { Axes newAxe = new Axes (); newAxe.Name = "New Action"; newAxe.joystickButton = joystickButtons.None; multiAxesList [axeListIndex].axes.Add (newAxe); updateComponent (); } public void addNewAxesList () { multiAxes newMultiAxes = new multiAxes (); newMultiAxes.axesName = "New Axes List"; multiAxesList.Add (newMultiAxes); updateComponent (); } public void removeAxesList (int multiAxesIndex) { if (multiAxesList.Count > multiAxesIndex) { string removeMultiAxesName = multiAxesList [multiAxesIndex].axesName; multiAxesList.RemoveAt (multiAxesIndex); print ("IMPORTANT: Multi Axes List " + removeMultiAxesName.ToUpper () + " has been removed." + "\n Make sure to update the axes list in the Player Input Manager inspector of the main player"); updateComponent (); } } public int getAxesListIndexByName (string axesName) { for (int i = 0; i < multiAxesList.Count; i++) { if (multiAxesList [i].axesName.Equals (axesName)) { return i; } } return -1; } public void removeAxesElement (int multiAxesIndex, int axesIndex) { if (multiAxesList.Count > multiAxesIndex && multiAxesList [multiAxesIndex].axes.Count > axesIndex) { multiAxesList [multiAxesIndex].axes.RemoveAt (axesIndex); print ("IMPORTANT: Axes elements in the group of actions called " + multiAxesList [multiAxesIndex].axesName + " has changed." + "\n Make sure to update the axes list in the Player Input Manager inspector of the main player"); updateComponent (); } } public void removeTouchPanel (int touchPanelIndex) { string touchPanelName = touchButtonsInfoList [touchPanelIndex].Name; touchButtonsInfoList.RemoveAt (touchPanelIndex); print ("Touch panel " + touchPanelName + " removed. Updating all touch panel list\n\n"); touchPanelIndex++; for (int i = 0; i < multiAxesList.Count; i++) { List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; if (currentAxes.touchButtonPanelIndex > 0) { if (currentAxes.touchButtonPanelIndex == touchPanelIndex) { currentAxes.touchButtonPanelIndex = 0; currentAxes.touchButtonIndex = 0; print ("The touch panel and button assigned to the action " + currentAxes.Name + " has been removed, " + "make sure to set a new touch button for that action"); } else { int newTouchPanelIndex = getTouchPanelIndexByName (currentAxes.touchButtonPanel); // print ("panel " + currentAxes.touchButtonPanel + " indice obtenido " + newTouchPanelIndex); if (newTouchPanelIndex > -1) { newTouchPanelIndex++; if (currentAxes.touchButtonPanelIndex != newTouchPanelIndex) { currentAxes.touchButtonPanelIndex = newTouchPanelIndex; print (currentAxes.Name.ToUpper () + " action updated with touch panel index " + newTouchPanelIndex); } } else { print ("WARNING: Touch Panel called " + currentAxes.touchButtonPanel.ToUpper () + " hasn't been found, make sure to configure an action " + "with that name in the main input manager"); currentAxes.touchButtonPanelIndex = 0; currentAxes.touchButtonIndex = 0; } } } } } updateTouchButtonListString (); updateComponent (); } public void removeTouchButton (int touchPanelIndex, int touchButtonIndex) { touchButtonsInfo currentTouchButtonsInfo = touchButtonsInfoList [touchPanelIndex]; string touchButtonName = currentTouchButtonsInfo.touchButtonList [touchButtonIndex].name; currentTouchButtonsInfo.touchButtonList.RemoveAt (touchButtonIndex); print ("Touch button " + touchButtonName + " removed. Updating " + currentTouchButtonsInfo.Name + " touch panel list\n\n"); touchPanelIndex++; for (int i = 0; i < multiAxesList.Count; i++) { List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; // print (currentAxes.Name + " " + currentAxes.touchButtonPanelIndex + " " + currentAxes.touchButtonIndex); if (currentAxes.touchButtonPanelIndex == touchPanelIndex) { if (currentAxes.touchButtonIndex == touchButtonIndex) { currentAxes.touchButtonPanelIndex = 0; currentAxes.touchButtonIndex = 0; print ("The touch button assigned to the action " + currentAxes.Name + " has been removed, make sure to set a new touch" + " button for that action"); } else { int newTouchButtonIndex = getTouchButtonIndexByName (currentAxes.touchButtonPanel, currentAxes.touchButtonName); if (newTouchButtonIndex > -1) { if (currentAxes.touchButtonIndex != newTouchButtonIndex) { currentAxes.touchButtonIndex = newTouchButtonIndex; print (currentAxes.Name.ToUpper () + " action updated with touch button index " + newTouchButtonIndex); } } else { print ("WARNING: Touch Button called " + currentAxes.touchButtonName.ToUpper () + " hasn't been found, make sure to configure an action " + "with that name in the main input manager"); currentAxes.touchButtonPanelIndex = 0; currentAxes.touchButtonIndex = 0; } } } } } updateTouchButtonListString (); updateComponent (); } public void getTouchButtonList () { getTouchButtonListByPlayerInputManager (playerInputManagerList [0]); } void getTouchButtonListByPlayerInputManager (playerInputManager currentPlayerInputManager) { bool isPlaying = Application.isPlaying; if (!isPlaying) { checkPlayerInputManagerList (); } touchButtonList.Clear (); currentPlayerInputManager.setTouchPanelActiveState (true); touchButtonsInfoList.Clear (); currentPlayerInputManager.setTouchPanelActiveState (true); List touchPanelsInfoList = currentPlayerInputManager.getTouchPanelsList (); for (int i = 0; i < touchPanelsInfoList.Count; i++) { touchButtonsInfo newTouchButtonsInfo = new touchButtonsInfo (); newTouchButtonsInfo.Name = touchPanelsInfoList [i].Name; Component [] components = touchPanelsInfoList [i].touchPanel.GetComponentsInChildren (typeof (touchButtonListener)); foreach (touchButtonListener child in components) { newTouchButtonsInfo.touchButtonList.Add (child); child.setButtonIconComponent (); touchButtonList.Add (child); } touchButtonsInfoList.Add (newTouchButtonsInfo); } if (!usingTouchControls) { currentPlayerInputManager.setTouchPanelActiveState (false); } if (!isPlaying) { pauseManager.updateTouchButtonsComponents (); updateComponent (); } } public void setNewTouchButtonListByPlayerInputManager (playerInputManager currentPlayerInputManager) { touchButtonList = currentPlayerInputManager.getTouchButtonList (); touchButtonsInfoList = currentPlayerInputManager.getTouchButtonsInfoList (); } public void setTouchButtonVisibleState (bool state) { for (int i = 0; i < touchButtonList.Count; i++) { if (touchButtonList [i] != null) { if (!buttonsToIgnoreSetVisibleStateList.Contains (touchButtonList [i])) { touchButtonList [i].setButtonColorVisibleState (state); } } } for (int i = 0; i < playerInputManagerList.Count; i++) { playerInputManagerList [i].setJoystickColorVisibleState (state); } } public void resetButtonStateOnTouchButtonList () { for (int i = 0; i < touchButtonList.Count; i++) { if (touchButtonList [i] != null) { touchButtonList [i].resetButtonState (); } } } public bool checkNullElementsOnPlayerInputManagerList () { if (playerInputManagerList.Count == 0) { return true; } for (int i = 0; i < playerInputManagerList.Count; i++) { if (playerInputManagerList [i] == null) { return true; } } return false; } public void toggleTouchButtonsVisibleState () { touchButtonsCurrentlyVisible = !touchButtonsCurrentlyVisible; setTouchButtonVisibleState (touchButtonsCurrentlyVisible); } public void getTouchButtonListString () { getTouchButtonList (); updateTouchButtonListString (); updateTouchButtonList (); print ("Touch panels and buttons stored properly"); } public void selectMainTouchButtonPanelOnEditor () { if (playerInputManagerList.Count > 0 && playerInputManagerList [0] != null) { GKC_Utils.setActiveGameObjectInEditor (playerInputManagerList [0].getTouchPanel ()); } } public void updateTouchButtonListString () { touchButtonListString = new string [touchButtonsInfoList.Count + 1]; touchButtonListString [0] = "None"; for (int i = 0; i < touchButtonsInfoList.Count; i++) { string newName = touchButtonsInfoList [i].Name; touchButtonListString [i + 1] = newName; } touchButtonsStringInfoList.Clear (); touchButtonsStringInfoList.Add (new touchButtonsStringInfo ()); for (int i = 0; i < touchButtonsInfoList.Count; i++) { touchButtonsStringInfo newTouchButtonsStringInfo = new touchButtonsStringInfo (); newTouchButtonsStringInfo.Name = touchButtonsInfoList [i].Name; newTouchButtonsStringInfo.touchButtonListString = new string [touchButtonsInfoList [i].touchButtonList.Count]; for (int j = 0; j < touchButtonsInfoList [i].touchButtonList.Count; j++) { string newName = touchButtonsInfoList [i].touchButtonList [j].gameObject.name; newTouchButtonsStringInfo.touchButtonListString [j] = newName; } touchButtonsStringInfoList.Add (newTouchButtonsStringInfo); } updateComponent (); } public void updateTouchButtonList () { for (int i = 0; i < multiAxesList.Count; i++) { List currentAxesList = multiAxesList [i].axes; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; if (currentAxes.touchButtonPanelIndex > 0) { int newTouchPanelIndex = getTouchPanelIndexByName (currentAxes.touchButtonPanel); if (newTouchPanelIndex > -1) { newTouchPanelIndex++; if (currentAxes.touchButtonPanelIndex != newTouchPanelIndex) { currentAxes.touchButtonPanelIndex = newTouchPanelIndex; } int newTouchButtonIndex = getTouchButtonIndexByName (currentAxes.touchButtonPanel, currentAxes.touchButtonName); if (newTouchButtonIndex > -1) { if (currentAxes.touchButtonIndex != newTouchButtonIndex) { currentAxes.touchButtonIndex = newTouchButtonIndex; print ("Multi axes " + multiAxesList [i].axesName + " " + currentAxes.Name.ToUpper () + " updated with index " + newTouchButtonIndex + " for " + currentAxes.touchButtonName); } } else { print ("WARNING: Touch Button called " + currentAxes.touchButtonName.ToUpper () + " hasn't been found, make sure to configure an action " + "with that name in the main input manager"); currentAxes.touchButtonPanelIndex = 0; currentAxes.touchButtonIndex = 0; } } else { print ("WARNING: Touch Panel called " + currentAxes.touchButtonPanel.ToUpper () + " hasn't been found, make sure to configure an action " + "with that name in the main input manager"); currentAxes.touchButtonPanelIndex = 0; currentAxes.touchButtonIndex = 0; } } } } updateComponent (); } public int getTouchPanelIndexByName (string touchPanelName) { for (int i = 0; i < touchButtonsInfoList.Count; i++) { if (touchButtonsInfoList [i].Name.Equals (touchPanelName)) { return i; } } return -1; } public int getTouchButtonIndexByName (string touchPanelName, string touchButtonName) { for (int i = 0; i < touchButtonsInfoList.Count; i++) { touchButtonsInfo currentTouchButtonsInfo = touchButtonsInfoList [i]; if (currentTouchButtonsInfo.Name.Equals (touchPanelName)) { for (int j = 0; j < currentTouchButtonsInfo.touchButtonList.Count; j++) { if (currentTouchButtonsInfo.touchButtonList [j].name.Equals (touchButtonName)) { return j; } } } } return -1; } public void showCurrentInputActionList (bool showOnlyKeys, bool showOnlyJoystick) { currentInputActionList.Clear (); currentInputActionList.Add ("TOTAL INPUT LIST AMOUNT: " + multiAxesList.Count + "\n\n\n"); int numberOfActions = 0; int numberOfActionsFound = 0; for (int i = 0; i < multiAxesList.Count; i++) { string newStringToAdd = ""; newStringToAdd += multiAxesList [i].axesName.ToUpper () + "\n"; List currentAxesList = multiAxesList [i].axes; int numberOfActionsFoundInFilter = 0; for (int j = 0; j < currentAxesList.Count; j++) { Axes currentAxes = currentAxesList [j]; if (keyFilterActive) { if (currentAxes.key == actionKeyToFilter) { newStringToAdd += " -" + currentAxes.Name + "\n"; numberOfActionsFoundInFilter++; numberOfActionsFound++; } } else if (joystickFilterActive) { if (currentAxes.joystickButton == joystickButtonToFilter) { newStringToAdd += " -" + currentAxes.Name + "\n"; numberOfActionsFoundInFilter++; numberOfActionsFound++; } } else { if (showOnlyKeys) { newStringToAdd += " -" + currentAxes.key.ToString () + "\n"; } else if (showOnlyJoystick) { newStringToAdd += " -" + currentAxes.joystickButton.ToString () + "\n"; } else { newStringToAdd += " -" + currentAxes.Name + " ------> "; newStringToAdd += currentAxes.key.ToString ().ToUpper () + " ------> "; newStringToAdd += currentAxes.joystickButton.ToString ().ToUpper () + " "; newStringToAdd += "\n"; } } numberOfActions++; } if ((keyFilterActive || joystickFilterActive) && numberOfActionsFoundInFilter == 0) { newStringToAdd = newStringToAdd.Replace ((multiAxesList [i].axesName.ToUpper () + "\n"), ""); } else { newStringToAdd += "\n\n"; } if (newStringToAdd != "") { currentInputActionList.Add (newStringToAdd); } } if (keyFilterActive || joystickFilterActive) { if (numberOfActionsFound == 0) { currentInputActionList.Add ("\n\n NO ACTIONS FOUND\n\n"); } else { currentInputActionList.Add ("\n\n TOTAL ACTIONS FOUND: " + numberOfActionsFound + "\n\n"); } } currentInputActionList.Add ("\n\nTOTAL ACTIONS AMOUNT: " + numberOfActions + "\n\n"); updateComponent (); } public void showCurrentInputActionListByKeyFilter () { keyFilterActive = true; joystickFilterActive = false; showCurrentInputActionList (false, false); keyFilterActive = false; updateComponent (); } public void showCurrentInputActionListByJoystickFilter () { joystickFilterActive = true; keyFilterActive = false; showCurrentInputActionList (false, false); joystickFilterActive = false; updateComponent (); } public void clearInputActionListText () { currentInputActionList.Clear (); updateComponent (); } void updateComponent () { GKC_Utils.updateComponent (this); } [System.Serializable] public class Axes { public string Name; public bool actionEnabled = true; public bool showActionInRebindPanel = true; public string keyButton; public joystickButtons joystickButton; public int touchButtonPanelIndex; public int touchButtonIndex = 0; public string touchButtonName; public string touchButtonPanel; public int currentTouchButtonIndex; public KeyCode key = KeyCode.A; #if REWIRED [ActionIdProperty(typeof(RewiredConsts.Action))] public int rewiredAction = -1; public enum AxisContribution { Positive, Negative, Both } public AxisContribution axisContribution; #endif // public string joystickButtonKeyString; // public bool joystickButtonKeyAssigned; //some constructors for a key input, incluing name, key button and touch button public Axes () { Name = ""; keyButton = ""; actionEnabled = true; } public Axes (string n, string key) { Name = n; keyButton = key; actionEnabled = true; } } public enum joystickButtons { A = 0, B = 1, X = 2, Y = 3, LeftBumper = 4, RightBumper = 5, Back = 6, Start = 7, LeftStickClick = 8, RightStickClick = 9, LeftDPadX = 10, RightDPadX = 11, TopDPadY = 12, BottomDPadY = 13, LeftTrigger = 14, RightTrigger = 15, None = -1 } [System.Serializable] public class gamepadInfo { public int gamepadNumber; public string gamepadName; public List multiGamepadAxisInfoList = new List (); public List joystickButtonStringList = new List (); public List axisButtonStringList = new List (); } [System.Serializable] public class multiGamepadAxisInfo { public string Name; public List gamepadAxisInfoList = new List (); } [System.Serializable] public class gamepadAxisInfo { public string Name; public bool usingRightTrigger; public bool usingLeftTrigger; public bool rightTriggerDown; public bool leftTriggerDown; public bool usingDPadXPositive; public bool DPadXPositiveDown; public bool usingDPadXNegative; public bool DPadXNegativeDown; public bool usingDPadYPositive; public bool DPadYPositiveDown; public bool usingDPadYNegative; public bool DPadYNegativeDown; } [System.Serializable] public class multiAxes { public string axesName; public bool currentlyActive = true; public List axes = new List (); public bool multiAxesEditPanelActive = true; public multiAxes () { } public multiAxes (multiAxes newAxes) { axesName = newAxes.axesName; currentlyActive = newAxes.currentlyActive; axes = newAxes.axes; multiAxesEditPanelActive = newAxes.multiAxesEditPanelActive; } } [System.Serializable] public class multiAxesEditButtonInput { public List buttonsList = new List (); public GameObject multiAxesEditPanel; public bool multiAxesEditPanelActive; public ScrollRect multiAxesEditPanelScrollRect; } [System.Serializable] public class touchButtonsInfo { public string Name; public List touchButtonList = new List (); } [System.Serializable] public class touchButtonsStringInfo { public string Name; public string [] touchButtonListString; } }