/// <summary>
        /// Raises the GU event.
        /// </summary>
        private void OnGUI()
        {
            GUI.skin = guiSkin;

            GUI.Window(1, windowRect, CreateWindow, new GUIContent());
            //GUI.Window(1, new Rect(0, 0, Screen.width, Screen.height), CreateWindow,new GUIContent());



            //if event is of key or mouse
            if (Event.current.isKey)
            {
                if (Event.current.keyCode == KeyCode.Return)
                {
                    _selectedStateHash  = 0;
                    _previousStateInput = null;
                    //this.Repaint ();
                }
                else if (Event.current.keyCode == KeyCode.Escape)
                {
                    if (_selectedStateHash != 0)
                    {
                        _stateInputCombinations [_selectedStateHash].combinations [_isPrimary] = _previousStateInput;
                        _previousStateInput = null;
                        _selectedStateHash  = 0;
                    }
                }
            }

            //Approach dependent of GUI so not applicable if you have 3D GUI
            //if (_selectedStateHash != 0)
            //	InputEx.processGUIEvent (Event.current);//process input from keyboard & mouses
        }
示例#2
0
        private static void DrawBindings(InputCombination comb, SerializedProperty combProp, string labelName, string propertyName)
        {
            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(labelName);
            SerializedProperty defaultCombProp  = combProp.FindPropertyRelative(propertyName);
            GUIContent         addButtonContent = new GUIContent("+");
            float addButtonWidth = EditorStyles.miniButton.CalcSize(addButtonContent).x;

            if (GUILayout.Button(addButtonContent, GUILayout.Width(addButtonWidth)))
            {
                comb.AddCode();
            }
            GUILayout.EndHorizontal();
            EditorGUI.indentLevel++;
            int indentLevel2             = EditorGUI.indentLevel;
            List <InputCode>   inputs    = comb.inputs;
            SerializedProperty codesProp = defaultCombProp.FindPropertyRelative("inputs");

            for (int j = 0; j < codesProp.arraySize && j < inputs.Count; j++)
            {
                GUILayout.BeginHorizontal();
                InputCode          code     = inputs[j];
                SerializedProperty codeProp = codesProp.GetArrayElementAtIndex(j);
                EditorGUILayout.PropertyField(codeProp, GUIContent.none);
                GUIContent removeButtonContent = new GUIContent("-");
                float      removeButtonWidth   = EditorStyles.miniButton.CalcSize(removeButtonContent).x;
                if (GUILayout.Button(removeButtonContent, GUILayout.Width(removeButtonWidth)))
                {
                    comb.RemoveAtIndex(j);
                    codesProp = defaultCombProp.FindPropertyRelative("inputs");
                }
                GUILayout.EndHorizontal();
            }
        }
        /// <summary>
        /// Tos the input combination.
        /// </summary>
        /// <param name="combos">Combos.</param>
        /// <param name="input">Input.</param>
        void toInputCombination(InputCombination combos, InputAction input)
        {
            if (combos.numActions + 1 > maxCombosNum || (combos.numActions == 1 && combos.GetActionAt(0).getCode(_playerSelected.Device) == 0))
            {
                combos.Clear();
            }

            combos.Add(input);
        }
示例#4
0
    private void testInput()
    {
        var combination = new InputCombination <MouseButton>(MouseButton.leftButton, KeyState.wasPressedThisFrame);

        InputMgr.Instance.RegistMouseCallBack(combination, () => { print("单击"); });

        var combination2 = new InputCombination <MouseButton>(MouseButton.leftButton, KeyState.wasDoublePressedThisFrame);

        InputMgr.Instance.RegistMouseCallBack(combination2, () => { print("双击"); });
    }
        /// <summary>
        /// Resolves empty or None input or restricts input to max num of combinaition(maxCombosNum)
        /// </summary>
        /// <param name="combos">Combos. ex. w+Mouse1(x2)+Joystick1Button3(-)</param>
        /// <param name="input">Input.</param>
        void toInputCombination(InputCombination combos, InputAction input)
        {
            if (combos.numActions + 1 > maxCombosNum || (combos.numActions == 1 && combos.GetActionAt(0).getCode(_deviceByProfile) == 0))
            {
                combos.Clear();
            }

            combos.Add(input);

            //Debug.Log(input);
        }
示例#6
0
        IEnumerator BindMouseEvent()
        {
            var result = ResourceMgr.Instance.LoadAssetAsync("cursor_effect_1");

            yield return(new WaitUntil(() => { return result.IsDone; }));

            PoolMgr.Instance.TryGetPool("cursor_effect_1", out UnityPool pool);
            pool.onGetObjectInPool += (obj) => obj.SetActive(true);
            pool.onPutObject       += (obj) => obj.SetActive(false);
            var param = new InputCombination <MouseButton>(MouseButton.leftButton, KeyState.wasPressedThisFrame);

            m_MainPageMouseCBID = InputMgr.Instance.RegistMouseCallBack(param, () => ClickCB(pool));
        }
        public void ToStringFromStringTest()
        {
            var combination = new InputCombination(new Keys[] { Keys.Control, Keys.Left, Keys.F2 },
                                                   new MouseButtons[] { MouseButtons.Left, MouseButtons.Middle });

            var combinationString = combination.ToString();

            Assert.AreEqual(combinationString, "Keyboard.Control + Keyboard.Left + Keyboard.F2 + Mouse.Left + Mouse.Middle");

            var newCombination = new InputCombination(combinationString);

            Assert.AreEqual(combination, newCombination);
        }
示例#8
0
	void Start()
	{
		LevelManager.Instance.CurrentTimeline.GetComponent<TimeLine>().TimePeriodStarted += OnTimePeriodStart;
		LevelManager.Instance.CurrentTimeline.GetComponent<TimeLine>().TimePeriodEnded += OnTimePeriodEnd;
		LevelManager.Instance.CurrentTimeline.GetComponent<TimeLine>().TimerEnded += OnTimerEnd;

		GameObject gao = new GameObject();
		gao.AddComponent<InputCombination>();
		gao.GetComponent<InputCombination>().Populate(EGamePadButton.None);
		_expectedCombination = gao.GetComponent<InputCombination>();

		if (!_mesh.GetComponent<Renderer>())
			_mesh.AddComponent<Renderer>();

		if (UnityEngine.Random.Range(0, 1) == 0)
			_mesh.GetComponent<Renderer>().material.mainTexture = Resources.Load<Texture>("D_Chara_01");
		else
			_mesh.GetComponent<Renderer>().material.mainTexture = Resources.Load<Texture>("D_Chara_02");
	}
        /// <summary>
        /// Replaces the designator.
        /// </summary>
        /// <param name="oldValue">Old value.</param>
        /// <param name="newValue">New value.</param>
        void replaceDesignator(string oldValue, string newValue)
        {
            foreach (var KeyCombinationStringPair in InputMapper._stateInputCombinations)
            {
                InputCombination combos = KeyCombinationStringPair.Value.combinations [0];


                if (combos != null)
                {
                    combos.combinationString = combos.combinationString.Replace(oldValue, newValue);
                }

                combos = KeyCombinationStringPair.Value.combinations [1];

                if (combos != null)
                {
                    combos.combinationString = combos.combinationString.Replace(oldValue, newValue);
                }
            }
        }
示例#10
0
	public void YOLOTranscendSQUAD(float detectionRadius, int gatesToLive)
	{
		/*
		_inputCombinationGao = Instantiate(new GameObject());
		_inputCombinationGao.transform.SetParent(this.gameObject.transform);
		_inputCombinationGao.AddComponent<InputCombination>();
		_inputCombinationGao.GetComponent<InputCombination>().Populate(dissidentCombination.ToArray());
		_dissidentCombination = _inputCombinationGao.GetComponent<InputCombination>();
        */

		DeactivatePose();

		_detectionRadius = detectionRadius;
        _isRebel = true;
		_gatesToLive = gatesToLive;

		_expectedCombination = _expectedCombination.Randomize();

		ActivatePose();
	}
        /// <summary>
        /// Fill StringBuilde with StateName=Hash,...values
        /// </summary>
        /// <returns></returns>
        StringBuilder HashStateInputsToStringBuilder()
        {
            Dictionary <int, InputState> stateInputsCurrent;
            List <int>    inputStatesToBeRemoved;
            List <string> profilesToBeRemoved;
            StringBuilder statesStringBuilder;

            statesStringBuilder = new StringBuilder();

            Dictionary <int, bool> stateInputsCombined = new Dictionary <int, bool> ();
            int numPlayers = settings.Players.Length;

            for (int i = 0; i < numPlayers; i++)
            {
                profilesToBeRemoved = new List <string> ();

                foreach (var DeviceProfileHashStateInput in settings.Players[i].DeviceProfileStateInputs)
                {
                    stateInputsCurrent = DeviceProfileHashStateInput.Value;

                    if (stateInputsCurrent.Count == 0)
                    {
                        profilesToBeRemoved.Add(DeviceProfileHashStateInput.Key);
                        continue;
                    }


                    inputStatesToBeRemoved = new List <int> ();



                    //Filter
                    foreach (var HashStateInput in stateInputsCurrent)
                    {
                        //fill String Builder with unique StateInputs
                        if (!stateInputsCombined.ContainsKey(HashStateInput.Key))
                        {
                            stateInputsCombined [HashStateInput.Key] = true;

                            statesStringBuilder.Append("\t" + HashStateInput.Value.name.Replace(" ", "_") + "=" + HashStateInput.Key + ",\n\r");
                        }



                        InputCombination combos = HashStateInput.Value.combinations [0];

                        if (combos != null && combos.GetActionAt(0).codeString == "None")
                        {
                            combos.Clear();

                            inputStatesToBeRemoved.Add(HashStateInput.Key);
                        }


                        combos = HashStateInput.Value.combinations [1];

                        if (combos != null && combos.GetActionAt(0).codeString == "None")
                        {
                            combos.Clear();
                            HashStateInput.Value.combinations [1] = null;
                        }
                    }

                    //remove those with "None" as Primary combination
                    foreach (var key in inputStatesToBeRemoved)
                    {
                        stateInputsCurrent.Remove(key);
                    }
                }



                //remove empty profiles
                foreach (var key in profilesToBeRemoved)
                {
                    settings.Players [i].DeviceProfileStateInputs.Remove(key);
                }
            }                                    //end for Players



            return(statesStringBuilder);
        }
        //////////////////////               CREATE STATE GUI             ///////////////////////

        /// <summary>
        /// Creates the state GUI.
        /// </summary>
        /// <param name="name">State Name.</param>
        /// <param name="hash">State Hash.</param>
        void createInputStateGUI(string name, int hash)
        {
            InputCombination[] combinations;
            string             currentCombinationString;

            GUILayout.BeginHorizontal();


            GUILayout.Label(name, _stateNameLabelStyle);


            if (_selectedStateHash != hash)
            {
                if (InputMapper._stateInputCombinations.ContainsKey(hash))
                {
                    combinations = InputMapper._stateInputCombinations [hash].combinations;


                    if (combinations [0] == null)
                    {
                        combinations [0] = new InputCombination("None");
                    }

                    if (GUILayout.Button(combinations [0].combinationString))
                    {
                        _selectedStateHash  = hash;
                        _previousStateInput = null;
                        _isPrimary          = 0;
                        EditorGUIUtility.keyboardControl = 0;
                    }

                    if (combinations [1] == null)
                    {
                        combinations [1] = new InputCombination("None");
                    }

                    if (GUILayout.Button(combinations [1].combinationString))
                    {
                        _selectedStateHash  = hash;
                        _previousStateInput = null;
                        _isPrimary          = 1;
                        EditorGUIUtility.keyboardControl = 0;
                    }



                    //DELETE
                    if (GUILayout.Button("-", _addRemoveButtonStyle))
                    {
                        //delete
                        _deleteStateWithHash = hash;
                        //this.Repaint();
                    }
                }
                else
                {
                    if (GUILayout.Button("None"))
                    {
                        InputState state = _stateInputCombinations [hash] = new InputState(name, hash);
                        state.Add(new InputCombination((int)KeyCode.None), 0);



                        _selectedStateHash  = hash;
                        _previousStateInput = null;
                        _isPrimary          = 0;
                        EditorGUIUtility.keyboardControl = 0;
                    }


                    if (GUILayout.Button("None"))
                    {
                        InputState state = _stateInputCombinations [hash] = new InputState(name, hash);
                        state.Add(new InputCombination((int)KeyCode.None), 1);


                        _selectedStateHash  = hash;
                        _previousStateInput = null;
                        _isPrimary          = 1;
                        EditorGUIUtility.keyboardControl = 0;
                    }
                }
            }
            else
            {
                if (InputMapper._stateInputCombinations.ContainsKey(hash))
                {
                    combinations = InputMapper._stateInputCombinations [hash].combinations;


                    currentCombinationString = combinations [_isPrimary].combinationString;

                    if (_previousStateInput == null)
                    {
                        _previousStateInput = combinations [_isPrimary].Clone();
                    }
                }
                else
                {
                    currentCombinationString = "None";
                }


                GUILayout.Label(currentCombinationString);                                                 //, _inputLabelStyle);



                this.Repaint();
            }

            //


            GUILayout.EndHorizontal();



            EditorGUILayout.Separator();
        }
示例#13
0
	private void OnStart(InputCombination button, float timePeriod, EventArgs e)
	{
		Debug.Log("Time period started");
	}
示例#14
0
	protected virtual void OnTimePeriodStart(InputCombination button, float timePeriod, EventArgs e)
	{
		_inTimePeriod = true;
        if (!_isRebel) _expectedCombination = button;
		_timePeriod = UnityEngine.Random.Range(0f, timePeriod);
	}
示例#15
0
	protected virtual void OnPeriodStart(InputCombination button, float timePeriod, EventArgs e)
	{
		TimerStartHandler handler = TimePeriodStarted;

		if (handler != null)
			handler(button, timePeriod, e);
	}
示例#16
0
 protected override void OnTimePeriodStart(InputCombination button, float timePeriod, EventArgs e)
 {
     _inTimePeriod = true;
     _expectedCombination = button;
     _timePeriod = 0f;
 }
示例#17
0
	private void OnTimerEnd(EventArgs e)
	{
		// release their state of animations
        DeactivatePose();

        if (_isRebel)
        {
            _gatesToLive--;
			if (_expectedCombination)
				_expectedCombination = _expectedCombination.Randomize();
            if (_gatesToLive <= 0)
                YOLOBringMeBackToLifeSQUAD();
        }
	}
        ///////////////////////////             OnGUI                ////////////////////////
        /// <summary>
        /// Raises the GU event.
        /// </summary>
        void OnGUI()
        {
            int numLayers;
            int numStates;
            int i = 0;
            int j = 0;

            UnityEditor.Animations.AnimatorStateMachine    stateMachine;
            UnityEditor.Animations.AnimatorState           state;
            UnityEditor.Animations.AnimatorControllerLayer layer;
            UnityEditor.Animations.AnimatorController      ac;


            if (_deleteStateWithHash != 0)
            {
                _stateInputCombinations.Remove(_deleteStateWithHash);
                _deleteStateWithHash = 0;
            }



            if (_spaceDesignator != null)
            {
                EditorGUILayout.LabelField("Settings");
                EditorGUILayout.Separator();

                ////// MAX NUM COMBOS  /////
                maxCombosNum = EditorGUILayout.IntField("Combos per input:", maxCombosNum, _settingsStyle);

                EditorGUILayout.Separator();

                ////// DESIGNATORS /////
                EditorGUILayout.LabelField("Click Designators");

                ///////// DOUBLE ////////////
                _doubleClickDesignator = EditorGUILayout.TextField("Double click designator", _doubleClickDesignator, _settingsStyle);
                InputManager.Settings.doubleDesignator = _doubleClickDesignator.Length > 0 ? _doubleClickDesignator : _prevlongClickDesignator;



                if (_prevdoubleClickDesignator != null && _doubleClickDesignator.Length > 0 && _prevdoubleClickDesignator != _doubleClickDesignator)
                {
                    replaceDesignator(_prevdoubleClickDesignator, _doubleClickDesignator);
                }
                _prevdoubleClickDesignator = _doubleClickDesignator;

                //////////////  LONG //////////
                _longClickDesignator = EditorGUILayout.TextField("Long click designator", _longClickDesignator, _settingsStyle);

                InputManager.Settings.longDesignator = _longClickDesignator.Length > 0 ? _longClickDesignator : _prevlongClickDesignator;

                if (_prevlongClickDesignator != null && _longClickDesignator.Length > 0 && _prevlongClickDesignator != _longClickDesignator)
                {
                    replaceDesignator(_prevlongClickDesignator, _longClickDesignator);
                }
                _prevlongClickDesignator = _longClickDesignator;

                ///////////// SPACE /////////////
                _spaceDesignator = EditorGUILayout.TextField("Combination separator", _spaceDesignator, _settingsStyle);
                if (_spaceDesignator.Length > 1)
                {
                    _spaceDesignator = _spaceDesignator [0].ToString();                                                             //restrict to 1 char
                }
                InputManager.Settings.spaceDesignator = _spaceDesignator.Length > 0 ? _spaceDesignator : _prevSpaceDesinator.ToString();

                if (_spaceDesignator.Length > 0 && _prevSpaceDesinator != _spaceDesignator [0])
                {
                    replaceDesignator(_prevSpaceDesinator.ToString(), _spaceDesignator [0].ToString());
                }

                _prevSpaceDesinator = _spaceDesignator [0];


                EditorGUILayout.Separator();

                /////  SENSITIVITY  ////
                EditorGUILayout.LabelField("Sensitivity");
                InputManager.Settings.singleClickSensitivity       = _singleClickSensitivity = EditorGUILayout.FloatField("Single click sensitivity", _singleClickSensitivity, _settingsStyle);
                InputManager.Settings.doubleClickSensitivity       = _doubleClickSensitivity = EditorGUILayout.FloatField("Double click sensitivity", _doubleClickSensitivity, _settingsStyle);
                InputManager.Settings.longClickSensitivity         = _longClickSensitivity = EditorGUILayout.FloatField("Long click sensitivity", _longClickSensitivity, _settingsStyle);
                InputManager.Settings.combinationsClickSensitivity = _combosClickSensitivity = EditorGUILayout.FloatField("Combos click sensitivity", _combosClickSensitivity, _settingsStyle);
                EditorGUILayout.Separator();


                //////////// PLAYERS //////////////
                EditorGUILayout.BeginHorizontal();


                InputPlayer player = null;
                _playerNumber = EditorGUILayout.IntField("Number of Players", _playerNumber);

                if (_playerNumber < 1)
                {
                    _playerNumber = 1;
                }


                //create Players
                if (settings.Players == null || _playerNumber != settings.Players.Length)
                {
                    InputPlayer[] players = new InputPlayer[_playerNumber];

                    for (i = 0; i < _playerNumber; i++)
                    {
                        //don't delete previous players just add new
                        if (settings.Players != null && settings.Players.Length > i)
                        {
                            players [i] = settings.Players [i];
                        }
                        else
                        {
                            players [i] = new InputPlayer();
                        }
                    }


                    settings.Players = players;

                    //set last player as current
                    _playerIndexSelected = _playerNumber - 1;

                    //reset profile to default
                    _profileSelectedIndex = 0;
                }

                //create player display options
                if (_playerDisplayOptions == null || _playerNumber != _playerDisplayOptions.Length)
                {
                    _playerDisplayOptions = new string [_playerNumber];
                    for (i = 0; i < _playerNumber; i++)
                    {
                        _playerDisplayOptions [i] = "Player" + i;
                    }
                }



                _playerIndexSelected = EditorGUILayout.Popup(_playerIndexSelected, _playerDisplayOptions);


                if (_playerNumber > 1 && GUILayout.Button("Clone To All"))
                {
                    if (EditorUtility.DisplayDialog("Clone to All!",
                                                    "Are you sure to clone selected player overwriting other player's settings?", "Yes", "Cancel"))
                    {
                        InputPlayer sample = settings.Players [_playerIndexSelected];

                        for (i = 0; i < _playerNumber; i++)
                        {
                            if (i != _playerIndexSelected)
                            {
                                settings.Players [i] = sample.Clone();
                            }
                        }
                    }
                }


                EditorGUILayout.EndHorizontal();



                //////////// Profiles /////////////

                EditorGUILayout.BeginHorizontal();

                EditorGUILayout.LabelField("Profiles");


                List <IDevice> devices = InputManager.GetDevices <IDevice> ();

                if (devices.Count > 0)
                {
                    List <string> pList = devices.Where(item => item.profile != null).Select(item => item.profile.Name).Distinct().ToList();
                    pList.Insert(0, "default");

                    _profilesDevicesDisplayOptions = pList.ToArray();
                }
                else
                {
                    _profileSelectedIndex          = 0;
                    _profilesDevicesDisplayOptions = new string[] { "default" };
                }



                _profileSelectedIndex = EditorGUILayout.Popup(_profileSelectedIndex, _profilesDevicesDisplayOptions);


                //by selecting profile we are setting Device type expectation
                _deviceByProfile = devices.Where(item => item.profile != null).FirstOrDefault(item => item.profile.Name == _profilesDevicesDisplayOptions [_profileSelectedIndex]);



                player = settings.Players [_playerIndexSelected];

                Dictionary <int, InputState> stateInputsCurrent = null;

                //init stateInput Dictionary if player numbers is increased
                if (_profilesDevicesDisplayOptions.Length > _profileSelectedIndex)
                {
                    if (!player.DeviceProfileStateInputs.ContainsKey(_profilesDevicesDisplayOptions [_profileSelectedIndex]))
                    {
                        player.DeviceProfileStateInputs [_profilesDevicesDisplayOptions [_profileSelectedIndex]] = new Dictionary <int, InputState> ();
                    }


                    stateInputsCurrent = player.DeviceProfileStateInputs [_profilesDevicesDisplayOptions [_profileSelectedIndex]];
                }
                else
                {
                    _profileSelectedIndex = 0;
                    stateInputsCurrent    = player.DeviceProfileStateInputs ["default"];
                }


                if (_profileSelectedIndex > 0)
                {
                    if (GUILayout.Button("Clone default") &&
                        EditorUtility.DisplayDialog("Clone Default!",
                                                    "Are you sure to clone Default input settings to " + _profilesDevicesDisplayOptions [_profileSelectedIndex] + " device specific settings?", "Yes", "Cancel")

                        )
                    {
                        Dictionary <int, InputState> stateInputsDefault = player.DeviceProfileStateInputs ["default"];
                        foreach (var HashInputStatePair in stateInputsDefault)
                        {
                            if (!stateInputsCurrent.ContainsKey(HashInputStatePair.Key))
                            {
                                stateInputsCurrent.Add(HashInputStatePair.Key, HashInputStatePair.Value.Clone());
                            }
                        }
                    }
                }


                _stateInputCombinations = stateInputsCurrent;



                EditorGUILayout.EndHorizontal();
                EditorGUILayout.Separator();



                //////////  ANY/Complex Action Types(doubles,long...)  /FULL AXIS Checkers ///////
                EditorGUILayout.BeginHorizontal();
                //	_isDeviceAny = GUILayout.Toggle (_isDeviceAny, "Any(Uncheck 4Testing Only");
                _isComplexActionTypesAllowed = GUILayout.Toggle(_isComplexActionTypesAllowed, "Allow DOUBLE/LONG(HOLD)");
                _isDeviceAxisPositionFull    = GUILayout.Toggle(_isDeviceAxisPositionFull, "Full Axis");
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();
            }


            /////////////// GENERATING ENUM SETTINGS  ///////////
            _enumSettingsFoldout = EditorGUILayout.Foldout(_enumSettingsFoldout, "States Enum Properties");

            if (_enumSettingsFoldout)
            {
                EditorGUILayout.BeginVertical();

                //settingsXML = EditorGUILayout.ObjectField (settingsXML, typeof(TextAsset), true) as TextAsset;
                _namespace    = EditorGUILayout.TextField("Namespace:", _namespace);
                _enumName     = EditorGUILayout.TextField("Enum:", _enumName);
                _enumFileName = EditorGUILayout.TextField("File name:", _enumFileName);
                EditorGUILayout.EndVertical();
            }

            EditorGUILayout.Separator();

            /////////////////   XML  ////////////////////
            EditorGUILayout.LabelField("Input XML/BIN");
            EditorGUILayout.BeginHorizontal();
            settingsFile = EditorGUILayout.ObjectField(settingsFile, typeof(UnityEngine.Object), true);

            //reload if xml changed
            if (_lastSettingsFile != settingsFile)
            {
                _settingsLoaded = false;
            }

            _lastSettingsFile = settingsFile;


            if (_selectedStateHash == 0 && GUILayout.Button("Open"))
            {
                string path;

                if (_isBinary)
                {
                    path = EditorUtility.OpenFilePanel("Open XML Input Settings file", "", "bin");
                }
                else
                {
                    path = EditorUtility.OpenFilePanel("Open XML Input Settings file", "", "xml");
                }

                if (path.Length > 0)
                {
                    loadAsset(path);
                }


                return;
            }


            ///////////////   SAVE ////////////////////

            if (_selectedStateHash == 0 && GUILayout.Button("Save"))
            {
                EditorGUIUtility.keyboardControl = 0;
                _selectedStateHash = 0;


                if (!Directory.Exists(Application.streamingAssetsPath))
                {
                    Directory.CreateDirectory(Application.streamingAssetsPath);
                }

                if (settingsFile != null)
                {
                    string path = AssetDatabase.GetAssetPath(settingsFile);

                    if (Path.GetExtension(path) == ".xml")
                    {
                        saveInputSettings(Path.Combine(Application.streamingAssetsPath, settingsFile.name + ".xml"));
                    }
                    else
                    {
                        saveInputSettings(Path.Combine(Application.streamingAssetsPath, settingsFile.name + ".bin"));
                    }
                }
                else
                {
                    if (_isBinary)
                    {
                        saveInputSettings(EditorUtility.SaveFilePanel("Save Input Settings", Application.streamingAssetsPath, "InputSettings", "bin"));
                    }
                    else
                    {
                        saveInputSettings(EditorUtility.SaveFilePanel("Save Input Settings", Application.streamingAssetsPath, "InputSettings", "xml"));
                    }
                    return;
                }
            }

            if (settingsFile == null)
            {
                _isBinary = GUILayout.Toggle(_isBinary, "Binary");
            }

            /////////// RELOAD ////////////////
            if (GUILayout.Button("Reload"))
            {
                _settingsLoaded = false;
            }
            EditorGUILayout.EndHorizontal();


            EditorGUILayout.Separator();

            //loadingSettings selected thru ObjectField browser or drag and drop
            if ((!_settingsLoaded && settingsFile != null))
            {
                _settingsLoaded = loadInputSettings(settingsFile);
            }



            /////////  ANIMATOR CONTROLER //////////
            _lastController = controller;


            EditorGUILayout.LabelField("Animator Controller States");

            EditorGUILayout.BeginHorizontal();
            controller = EditorGUILayout.ObjectField(controller, typeof(UnityEditor.Animations.AnimatorController), true) as UnityEditor.Animations.AnimatorController;


            EditorGUILayout.EndHorizontal();



            EditorGUILayout.Separator();



            /////////  Create AnimaitonController states GUI //////////
            if (controller != null)
            {
                ac = controller as UnityEditor.Animations.AnimatorController;


                numLayers = ac.layers.Length;

                if (_showLayer == null || _showLayer.Length != numLayers)
                {
                    _showLayer = new bool[controller.layers.Length];
                }


                for (i = 0; i < numLayers; i++)
                {
                    layer = ac.layers [i];



                    _showLayer [i] = EditorGUILayout.Foldout(_showLayer [i], layer.name);

                    if (_showLayer [i])
                    {
                        stateMachine = layer.stateMachine;

                        numStates = stateMachine.states.Length;

                        scrollPosition = GUILayout.BeginScrollView(scrollPosition, false, false);

                        for (j = 0; j < numStates; j++)
                        {
                            state = stateMachine.states [j].state;
                            createInputStateGUI(state.name, Animator.StringToHash(state.name));
                            //createInputStateGUI (state.name, state.uniqueNameHash);
                        }

                        GUILayout.EndScrollView();
                    }
                }


                EditorGUILayout.Separator();
            }

            ///////////////////// NEW CUSTOM STATE STATE //////////////////////
            EditorGUILayout.LabelField("Custom States");


            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("New state name:", _stateNameLabelStyle);
            _newCustomStateName = EditorGUILayout.TextField(_newCustomStateName, _stateNameLabelStyle);

            if (_newCustomStateName != _prevNewCustomStateName)
            {
                _warrningAddStateLabel = "";
            }

            _prevNewCustomStateName = _newCustomStateName;

            if (GUILayout.Button("+", _addRemoveButtonStyle))
            {
                EditorGUIUtility.keyboardControl = 0;
                _selectedStateHash = 0;

                if (_newCustomStateName != null && _newCustomStateName.Length > 0)
                {
                    int hash = Animator.StringToHash(_newCustomStateName);
                    if (!_stateInputCombinations.ContainsKey(hash))                                                               //not already there
                    {
                        _stateInputCombinations [hash] = new InputState(_newCustomStateName, hash);                               // string[]{"None","None"};
                        _stateInputCombinations [hash].Add(new InputCombination("None"));
                        _stateInputCombinations [hash].Add(new InputCombination("None"));


                        _newCustomStateName = "";                                                                        //reset
                    }
                    else
                    {
                        _warrningAddStateLabel = "Already exist!";
                    }
                }
                else
                {
                    _warrningAddStateLabel = "Empty state name!";
                }
            }


            GUI.color = Color.red;
            EditorGUILayout.LabelField(_warrningAddStateLabel);
            EditorGUILayout.EndHorizontal();
            GUI.color = Color.white;


            EditorGUILayout.BeginHorizontal();
            scrollPosition2 = EditorGUILayout.BeginScrollView(scrollPosition2, false, false);
            //Debug.Log ("Loop..." + _stateInputCombinations.Count+" inputmngr "+InputManager.Settings.stateInputs.Count);
            if (_stateInputCombinations != null)
            {
                foreach (var KeyValuePair in _stateInputCombinations)
                {
                    if (!existInController(KeyValuePair.Key))
                    {
                        createInputStateGUI(KeyValuePair.Value.name, KeyValuePair.Key);
                    }
                }
            }
            GUILayout.EndScrollView();
            EditorGUILayout.EndHorizontal();

            //}



            //if event is of key or mouse
            if (Event.current.isKey)
            {
                if (Event.current.keyCode == KeyCode.Return)
                {
                    _selectedStateHash  = 0;
                    _previousStateInput = null;
                    this.Repaint();
                }
                else if (Event.current.keyCode == KeyCode.Escape)
                {
                    if (_selectedStateHash != 0)
                    {
                        _stateInputCombinations [_selectedStateHash].combinations [_isPrimary] = _previousStateInput;
                        _previousStateInput = null;
                        _selectedStateHash  = 0;
                    }
                }
            }

            if (_selectedStateHash != 0)
            {
                InputManager.processGUIEvent(Event.current);                                                 //process input from keyboard & mouses
            }
        }
	private void OnTimePeriodStart(InputCombination button, float timePeriod, EventArgs e)
	{

	}
        /// <summary>
        /// Creates the Input State GUI.
        /// </summary>
        /// <param name="hash">State Hash.</param>
        /// <param name="stateName">State name.</param>
        /// <param name="combinations">State Combinations.</param>
        void createInputStateGUI(int hash, string stateName, InputCombination[] combinations)
        {
            string currentCombinationString;


            GUILayout.BeginHorizontal();

            //string stateName=((CharacterInputControllerClass.States)hash).ToString();



            //(AnimatorEnum)hash
            //GUILayout.Label(stateName.Remove(0,stateName.IndexOf("Layer")+6).Replace("_"," "),_stateNameLabelStyle);
            GUILayout.Label(stateName, _stateNameLabelStyle);


            if (_selectedStateHash != hash)
            {
                //!!! USE HERE YOUR CUSTOM METHOD TO SHOW DISPLAY

                if (GUILayout.Button(InputCode.beautify(combinations [0].combinationString), _inputButtonStyle))
                {
                    _selectedStateHash  = hash;
                    _previousStateInput = null;
                    _isPrimary          = 0;
                }

                if (combinations.Length > 1 && combinations [1] != null)
                {
                    //!!! USE HERE YOUR CUSTOM METHOD TO SHOW DISPLAY
                    if (GUILayout.Button(InputCode.beautify(combinations [1].combinationString), _inputButtonStyle))
                    {
                        _selectedStateHash  = hash;
                        _previousStateInput = null;
                        _isPrimary          = 1;
                    }
                }
            }
            else
            {
                currentCombinationString = combinations [_isPrimary].combinationString;

                if (_previousStateInput == null)
                {
                    _previousStateInput = combinations [_isPrimary].Clone();
                }

                //!!! USE HERE YOUR CUSTOM METHOD TO SHOW DISPLAY
                currentCombinationString = InputCode.beautify(currentCombinationString);
                GUILayout.Label(currentCombinationString);

#if UNITY_ANDROID || UNITY_IPHONE
                if (GUILayout.Button("Submit", _submitButtonStyle))
                {
                    _selectedStateHash  = 0;
                    _previousStateInput = null;
                    return;
                }
#endif

                //this.Repaint ();
            }



            //Debug.Log ("_selectedStateHash after" + _selectedStateHash);



            GUILayout.EndHorizontal();



            GUILayout.Space(20);
        }