using Rewired; using System; using System.Collections.Generic; using UnityEngine; namespace Fie.Manager { [FieManagerExists(FieManagerExistSceneFlag.NEVER_DESTROY)] public sealed class FieInputManager : FieManagerBehaviour { public enum FieInputUIControlMode { KEYBOARD, GAME_PAD } public enum FieInputUIKeyType { NONE = 0, KEY_TYPE_UP = 1, KEY_TYPE_DOWN = 2, KEY_TYPE_LEFT = 4, KEY_TYPE_RIGHT = 8, KEY_TYPE_CANCEL = 0x10, KEY_TYPE_DECIDE = 0x20, KEY_TYPE_INTERACT = 0x40 } public delegate void FieUIInputDelegate(FieInputUIKeyType keyType); private const string fieInputPlayerPrefsBaseKey = "FieInputMap"; public const int MAXIMUM_LOCAL_PLAYERS = 1; private FieInputUIKeyType _currentKeyTypes; private FieInputUIControlMode _currentInputUIMode; private InputManager _inputManager; private Dictionary _players = new Dictionary(); public bool isEnableControll = true; public FieInputUIKeyType currentKeyTypes => _currentKeyTypes; public event FieUIInputDelegate uiInputEvent; protected override void StartUpEntity() { if (_inputManager == null) { _inputManager = UnityEngine.Object.FindObjectOfType(); if (_inputManager == null) { GameObject gameObject = Resources.Load("Prefabs/Manager/FieInputMapper") as GameObject; if (gameObject == null) { throw new Exception("Missing the input manager prefab."); } GameObject gameObject2 = UnityEngine.Object.Instantiate(gameObject, Vector3.zero, Quaternion.identity); if (gameObject2 == null) { throw new Exception("Fiald to instantiate the input manager object."); } _inputManager = gameObject2.GetComponent(); if (_inputManager == null) { throw new Exception("InputManager component dosen't exists in the imputmanager prefab."); } } } _inputManager.transform.parent = base.transform; LoadAllMaps(); for (int i = 0; i < 1; i++) { _players[i] = ReInput.players.GetPlayer(i); } } public void Update() { _currentKeyTypes = FieInputUIKeyType.NONE; if (GetPlayer().GetButtonDown("Up")) { _currentKeyTypes |= FieInputUIKeyType.KEY_TYPE_UP; } else if (GetPlayer().GetButtonDown("Down")) { _currentKeyTypes |= FieInputUIKeyType.KEY_TYPE_DOWN; } if (GetPlayer().GetButtonDown("Left")) { _currentKeyTypes |= FieInputUIKeyType.KEY_TYPE_LEFT; } else if (GetPlayer().GetButtonDown("Right")) { _currentKeyTypes |= FieInputUIKeyType.KEY_TYPE_RIGHT; } if (GetPlayer().GetButtonDown("Cancel")) { _currentKeyTypes |= FieInputUIKeyType.KEY_TYPE_CANCEL; } if (GetPlayer().GetButtonDown("Decide")) { _currentKeyTypes |= FieInputUIKeyType.KEY_TYPE_DECIDE; } if (_currentKeyTypes != 0 && this.uiInputEvent != null) { this.uiInputEvent(_currentKeyTypes); } if (GetPlayer().GetButtonTimePressed("Menu") > 3f) { Application.Quit(); } if (GetPlayer().GetButtonTimePressed("Restart") > 3f) { FieManagerFactory.I.Restart(); } } public Player GetPlayer(int playerId = 0) { return _players[playerId]; } public void SetUIControlMode(FieInputUIControlMode mode) { _currentInputUIMode = mode; } public FieInputUIControlMode GetUIControlMode() { return _currentInputUIMode; } private string GetBasePlayerPrefsKey(Player player) { string str = "FieInputMap"; return str + "|playerName=" + player.name; } private string GetControllerMapPlayerPrefsKey(Player player, ControllerMapSaveData saveData) { string basePlayerPrefsKey = GetBasePlayerPrefsKey(player); basePlayerPrefsKey += "|dataType=ControllerMap"; basePlayerPrefsKey = basePlayerPrefsKey + "|controllerMapType=" + saveData.mapTypeString; string text = basePlayerPrefsKey; basePlayerPrefsKey = text + "|categoryId=" + saveData.map.categoryId + "|layoutId=" + saveData.map.layoutId; basePlayerPrefsKey = basePlayerPrefsKey + "|hardwareIdentifier=" + saveData.controllerHardwareIdentifier; if (saveData.mapType == typeof(JoystickMap)) { basePlayerPrefsKey = basePlayerPrefsKey + "|hardwareGuid=" + ((JoystickMapSaveData)saveData).joystickHardwareTypeGuid.ToString(); } return basePlayerPrefsKey; } private string GetControllerMapXml(Player player, ControllerType controllerType, int categoryId, int layoutId, Controller controller) { string basePlayerPrefsKey = GetBasePlayerPrefsKey(player); basePlayerPrefsKey += "|dataType=ControllerMap"; basePlayerPrefsKey = basePlayerPrefsKey + "|controllerMapType=" + controller.mapTypeString; string text = basePlayerPrefsKey; basePlayerPrefsKey = text + "|categoryId=" + categoryId + "|layoutId=" + layoutId; basePlayerPrefsKey = basePlayerPrefsKey + "|hardwareIdentifier=" + controller.hardwareIdentifier; if (controllerType == ControllerType.Joystick) { Joystick joystick = (Joystick)controller; basePlayerPrefsKey = basePlayerPrefsKey + "|hardwareGuid=" + joystick.hardwareTypeGuid.ToString(); } if (!PlayerPrefs.HasKey(basePlayerPrefsKey)) { return string.Empty; } return PlayerPrefs.GetString(basePlayerPrefsKey); } private List GetAllControllerMapsXml(Player player, bool userAssignableMapsOnly, ControllerType controllerType, Controller controller) { List list = new List(); IList mapCategories = ReInput.mapping.MapCategories; for (int i = 0; i < mapCategories.Count; i++) { InputMapCategory inputMapCategory = mapCategories[i]; if (!userAssignableMapsOnly || inputMapCategory.userAssignable) { IList list2 = ReInput.mapping.MapLayouts(controllerType); for (int j = 0; j < list2.Count; j++) { InputLayout inputLayout = list2[j]; string controllerMapXml = GetControllerMapXml(player, controllerType, inputMapCategory.id, inputLayout.id, controller); if (!(controllerMapXml == string.Empty)) { list.Add(controllerMapXml); } } } } return list; } private string GetJoystickCalibrationMapPlayerPrefsKey(JoystickCalibrationMapSaveData saveData) { string str = "FieInputMap"; str += "|dataType=CalibrationMap"; str = str + "|controllerType=" + saveData.controllerType.ToString(); str = str + "|hardwareIdentifier=" + saveData.hardwareIdentifier; return str + "|hardwareGuid=" + saveData.joystickHardwareTypeGuid.ToString(); } private string GetJoystickCalibrationMapXml(Joystick joystick) { string str = "FieInputMap"; str += "|dataType=CalibrationMap"; str = str + "|controllerType=" + joystick.type.ToString(); str = str + "|hardwareIdentifier=" + joystick.hardwareIdentifier; str = str + "|hardwareGuid=" + joystick.hardwareTypeGuid.ToString(); if (!PlayerPrefs.HasKey(str)) { return string.Empty; } return PlayerPrefs.GetString(str); } private string GetInputBehaviorPlayerPrefsKey(Player player, InputBehavior saveData) { string basePlayerPrefsKey = GetBasePlayerPrefsKey(player); basePlayerPrefsKey += "|dataType=InputBehavior"; return basePlayerPrefsKey + "|id=" + saveData.id; } private string GetInputBehaviorXml(Player player, int id) { string basePlayerPrefsKey = GetBasePlayerPrefsKey(player); basePlayerPrefsKey += "|dataType=InputBehavior"; basePlayerPrefsKey = basePlayerPrefsKey + "|id=" + id; if (!PlayerPrefs.HasKey(basePlayerPrefsKey)) { return string.Empty; } return PlayerPrefs.GetString(basePlayerPrefsKey); } public void SaveAllMaps() { IList allPlayers = ReInput.players.AllPlayers; for (int i = 0; i < allPlayers.Count; i++) { Player player = allPlayers[i]; PlayerSaveData saveData = player.GetSaveData(userAssignableMapsOnly: true); InputBehavior[] inputBehaviors = saveData.inputBehaviors; foreach (InputBehavior inputBehavior in inputBehaviors) { string inputBehaviorPlayerPrefsKey = GetInputBehaviorPlayerPrefsKey(player, inputBehavior); PlayerPrefs.SetString(inputBehaviorPlayerPrefsKey, inputBehavior.ToXmlString()); } foreach (ControllerMapSaveData allControllerMapSaveDatum in saveData.AllControllerMapSaveData) { string controllerMapPlayerPrefsKey = GetControllerMapPlayerPrefsKey(player, allControllerMapSaveDatum); PlayerPrefs.SetString(controllerMapPlayerPrefsKey, allControllerMapSaveDatum.map.ToXmlString()); } } foreach (Joystick joystick in ReInput.controllers.Joysticks) { JoystickCalibrationMapSaveData calibrationMapSaveData = joystick.GetCalibrationMapSaveData(); string joystickCalibrationMapPlayerPrefsKey = GetJoystickCalibrationMapPlayerPrefsKey(calibrationMapSaveData); PlayerPrefs.SetString(joystickCalibrationMapPlayerPrefsKey, calibrationMapSaveData.map.ToXmlString()); } PlayerPrefs.Save(); } public void LoadAllMaps() { IList allPlayers = ReInput.players.AllPlayers; for (int i = 0; i < allPlayers.Count; i++) { Player player = allPlayers[i]; IList inputBehaviors = ReInput.mapping.GetInputBehaviors(player.id); for (int j = 0; j < inputBehaviors.Count; j++) { string inputBehaviorXml = GetInputBehaviorXml(player, inputBehaviors[j].id); if (inputBehaviorXml != null && !(inputBehaviorXml == string.Empty)) { inputBehaviors[j].ImportXmlString(inputBehaviorXml); } } List allControllerMapsXml = GetAllControllerMapsXml(player, userAssignableMapsOnly: true, ControllerType.Keyboard, ReInput.controllers.Keyboard); List allControllerMapsXml2 = GetAllControllerMapsXml(player, userAssignableMapsOnly: true, ControllerType.Mouse, ReInput.controllers.Mouse); bool flag = false; List> list = new List>(); foreach (Joystick joystick in player.controllers.Joysticks) { List allControllerMapsXml3 = GetAllControllerMapsXml(player, userAssignableMapsOnly: true, ControllerType.Joystick, joystick); list.Add(allControllerMapsXml3); if (allControllerMapsXml3.Count > 0) { flag = true; } } if (allControllerMapsXml.Count > 0) { player.controllers.maps.ClearMaps(ControllerType.Keyboard, userAssignableOnly: true); } player.controllers.maps.AddMapsFromXml(ControllerType.Keyboard, 0, allControllerMapsXml); if (flag) { player.controllers.maps.ClearMaps(ControllerType.Joystick, userAssignableOnly: true); } int num = 0; foreach (Joystick joystick2 in player.controllers.Joysticks) { player.controllers.maps.AddMapsFromXml(ControllerType.Joystick, joystick2.id, list[num]); num++; } if (allControllerMapsXml2.Count > 0) { player.controllers.maps.ClearMaps(ControllerType.Mouse, userAssignableOnly: true); } player.controllers.maps.AddMapsFromXml(ControllerType.Mouse, 0, allControllerMapsXml2); } foreach (Joystick joystick3 in ReInput.controllers.Joysticks) { joystick3.ImportCalibrationMapFromXmlString(GetJoystickCalibrationMapXml(joystick3)); } } } }