예제 #1
0
        protected override MutableObject Mutate(MutableObject mutable)
        {
            var groupId = GroupId.GetFirstValue(mutable);

            Dictionary <T, int> localShare;

            if (groupId != "")
            {
                if (!DataShare.ContainsKey(groupId))
                {
                    DataShare.Add(groupId, new Dictionary <T, int>());
                }

                localShare = DataShare[groupId];
            }
            else
            {
                localShare = new Dictionary <T, int>();
            }

            foreach (var entry in AxisKey.GetEntries(mutable))
            {
                var key = AxisKey.GetValue(entry);

                if (!localShare.ContainsKey(key))
                {
                    localShare[key] = 0;
                }

                IndexAxis.SetValue(localShare[key], entry);
                localShare[key]++;
            }

            return(mutable);
        }
예제 #2
0
    public static AxisKey XboxAxis(XboxAxis axis)
    {
        AxisKey ak = new AxisKey();
        ak.Type = ControlKeyType.Xbox;
        ak.xboxAxisType = XboxAxisType.axis;
        ak.keys.Add(axis.ToString());

        return ak;
    }
예제 #3
0
    public static AxisKey PC(KeyCode neg, KeyCode pos)
    {
        AxisKey ak = new AxisKey();
        ak.Type = ControlKeyType.PC;

        ak.keys.Add(neg.ToString());
        ak.keys.Add(pos.ToString());

        return ak;
    }
예제 #4
0
    public static AxisKey XboxAxis(XboxAxis axis)
    {
        AxisKey ak = new AxisKey();

        ak.Type         = ControlKeyType.Xbox;
        ak.xboxAxisType = XboxAxisType.axis;
        ak.keys.Add(axis.ToString());

        return(ak);
    }
예제 #5
0
        protected override void OnProcessOutputSchema(MutableObject newSchema)
        {
            var entryList = AxisKey.GetEntries(newSchema);

            foreach (var entry in entryList)
            {
                IndexAxis.SetValue(0, entry);
            }

            Router.TransmitAllSchema(newSchema);
        }
예제 #6
0
    public static AxisKey PC(KeyCode neg, KeyCode pos)
    {
        AxisKey ak = new AxisKey();

        ak.Type = ControlKeyType.PC;

        ak.keys.Add(neg.ToString());
        ak.keys.Add(pos.ToString());

        return(ak);
    }
예제 #7
0
        protected override MutableObject Mutate(MutableObject mutable)
        {
            foreach (var entry in AxisKey.GetEntries(mutable))
            {
                TargetField.SetValue(OutputStack.TransformValue(
                                         ConversionFunc(
                                             InputStack.TransformValue(AxisKey.GetValue(entry)), entry)),
                                     entry);
            }

            return(mutable);
        }
예제 #8
0
        protected override MutableObject Mutate(MutableObject mutable)
        {
            foreach (var entry in AxisKey.GetEntries(mutable))
            {
                TargetField.SetValue(OutputStack.TransformValue(
                                         string.Compare(InputStack.TransformValue(AxisKey.GetValue(entry)),
                                                        InputStack.TransformValue(ToMatch.GetValue(entry)),
                                                        StringComparison.InvariantCultureIgnoreCase) == 0),
                                     entry);
            }

            return(mutable);
        }
예제 #9
0
        protected override MutableObject Mutate(MutableObject mutable)
        {
            var entries = AxisKey.GetEntries(mutable);

            var foundStrings = new HashSet <T>();

            // identify the set of unique keys
            foreach (var entry in entries)
            {
                var axisKey = InputStack.TransformValue(AxisKey.GetValue(entry));

                if (!foundStrings.Contains(axisKey))
                {
                    foundStrings.Add(axisKey);
                }
            }

            // DO NOT sort the keys
            //var sortedKeys = foundStrings.ToList();
            //sortedKeys.Sort();

            // index the values
            var axisValues = GroupId.GetFirstValue(mutable) == "" ?
                             new Dictionary <T, int>()
                : DataShare.ContainsKey(GroupId.GetFirstValue(mutable)) ?
                             DataShare[GroupId.GetFirstValue(mutable)]
                : new Dictionary <T, int>();

            int i = 0;

            foreach (var key in foundStrings) //sortedKeys
            {
                axisValues[key] = OutputStack.TransformValue(i++);
            }

            // finally, write the new axis value into each entry
            entries = AxisKey.GetEntries(mutable);
            foreach (var entry in entries)
            {
                IndexAxis.SetValue(
                    axisValues[InputStack.TransformValue(AxisKey.GetValue(entry))],
                    entry);
            }

            if (GroupId.GetFirstValue(mutable) != "")
            {
                DataShare[GroupId.GetFirstValue(mutable)] = axisValues;
            }

            return(mutable);
        }
예제 #10
0
    public static AxisKey XboxDpad(HorVert horintalOrVertical)
    {
        AxisKey ak = new AxisKey();
        ak.Type = ControlKeyType.Xbox;
        ak.xboxAxisType = XboxAxisType.dpad;

        if(horintalOrVertical == HorVert.Horizontal)
        {
            ak.keys.Add(XboxDPad.Left.ToString());
            ak.keys.Add(XboxDPad.Right.ToString());
        }
        else
        {
            ak.keys.Add(XboxDPad.Down.ToString());
            ak.keys.Add(XboxDPad.Up.ToString());
        }

        return ak;
    }
예제 #11
0
    public static AxisKey XboxDpad(HorVert horintalOrVertical)
    {
        AxisKey ak = new AxisKey();

        ak.Type         = ControlKeyType.Xbox;
        ak.xboxAxisType = XboxAxisType.dpad;

        if (horintalOrVertical == HorVert.Horizontal)
        {
            ak.keys.Add(XboxDPad.Left.ToString());
            ak.keys.Add(XboxDPad.Right.ToString());
        }
        else
        {
            ak.keys.Add(XboxDPad.Down.ToString());
            ak.keys.Add(XboxDPad.Up.ToString());
        }

        return(ak);
    }
예제 #12
0
    public static ControlScheme CreateScheme <T>(UpdateTypeE updateType = UpdateTypeE.FixedUpdate, bool xboxLeftStick = true, bool xboxDPad = true, bool arrows = true, bool wasd = true) where T : struct, IConvertible
    {
        if (!typeof(T).IsEnum)
        {
            throw new ArgumentException("T must be an enumerated type");
        }

        ControlScheme controlScheme = new ControlScheme();

        controlScheme.Name       = typeof(T).ToString();
        controlScheme.UpdateType = updateType;
        controlScheme.SetActionsFromEnum <T>();

        controlScheme.Horizontal = new Axis(controlScheme, "Horizontal");
        controlScheme.Vertical   = new Axis(controlScheme, "Vertical");

        if (xboxLeftStick)
        {
            controlScheme.Horizontal.AxisKeys.Add(AxisKey.XboxAxis(XboxCtrlrInput.XboxAxis.LeftStickX));
            controlScheme.Vertical.AxisKeys.Add(AxisKey.XboxAxis(XboxCtrlrInput.XboxAxis.LeftStickY));
        }
        if (xboxDPad)
        {
            controlScheme.Horizontal.AxisKeys.Add(AxisKey.XboxDpad(AxisKey.HorVert.Horizontal));
            controlScheme.Vertical.AxisKeys.Add(AxisKey.XboxDpad(AxisKey.HorVert.Vertical));
        }
        if (wasd)
        {
            controlScheme.Horizontal.AxisKeys.Add(AxisKey.PC(KeyCode.A, KeyCode.D));
            controlScheme.Vertical.AxisKeys.Add(AxisKey.PC(KeyCode.S, KeyCode.W));
        }
        if (arrows)
        {
            controlScheme.Horizontal.AxisKeys.Add(AxisKey.PC(KeyCode.LeftArrow, KeyCode.RightArrow));
            controlScheme.Vertical.AxisKeys.Add(AxisKey.PC(KeyCode.DownArrow, KeyCode.UpArrow));
        }

        return(controlScheme);
    }
예제 #13
0
        public float GetAxis(AxisKey keyName)
        {
            if (controlsDict == null || controlsDict.Count == 0) {
                UpdateControlDictionary();
                if (controlsDict.Count == 0) {
                    Debug.LogWarning("No Input Axes set up. Returning 0.0f for all control queries");
                    return 0.0f;
                }
            }

            //return controlsDict[keyName].GetAxis();
            return controlsDict[keyName].axisValue;
        }
예제 #14
0
    public override void OnInspectorGUI()
    {
        #region Original

        if (SavedFoldoutShared("OriginalGUI"))
        {
            EditorGUI.indentLevel++;
            base.OnInspectorGUI();
            EditorGUI.indentLevel--;
            EditorGUILayout.Space();
        }

        #endregion

        //Prep
        ControlScheme ct = (ControlScheme)target;

        EditorGUILayout.Space();

        #region Action selection and setting

        // Set & select a new action list
        EditorGUILayout.BeginHorizontal();
        selectedIndex = EditorGUILayout.Popup(selectedIndex, AllEnumsNames);
        if (GUILayout.Button("ResetActions"))
        {
            ct.SetActionsFromEnum(AllEnums[selectedIndex]);
        }
        EditorGUILayout.EndHorizontal();

        #endregion

        #region PlayerID & Xbox ID
        // PlayerID
        EditorGUILayout.BeginHorizontal();
        {
            EditorGUILayout.LabelField("PlayerID", GUILayout.Width(60.0f));
            ct.playerID = EditorGUILayout.IntField(ct.playerID, GUILayout.Width(20.0f));
            EditorGUILayout.LabelField("XboxSupport: " + ct.XboxSupport.ToString());
        }
        EditorGUILayout.EndHorizontal();

        if (xboxSupport)
        {
            EditorGUILayout.BeginHorizontal();
            {
                EditorGUILayout.LabelField("ControllerID", GUILayout.Width(80.0f));
                ct.controllerID = EditorGUILayout.IntField(ct.controllerID, GUILayout.Width(20.0f));
                EditorGUILayout.LabelField("LastInput: " + ct.InputType.ToString());
            }
            EditorGUILayout.EndHorizontal();
        }

        #endregion

        #region Horizontal

        if (SavedFoldoutShared("Horizontal Axis"))
        {
            int  delete = -1;
            bool add    = false;
            for (int i = 0; i < ct.Horizontal.AxisKeys.Count; i++)
            {
                GUILayout.BeginHorizontal();
                if (i == 0 && GUILayout.Button("+", GUILayout.Width(20.0f)))
                {
                    add = true;
                }
                else if (i != 0 && GUILayout.Button("x", GUILayout.Width(20.0f)))
                {
                    delete = i;
                }
                ct.Horizontal.AxisKeys[i].OnGui();
                GUILayout.EndHorizontal();
            }
            if (delete >= 0)
            {
                ct.Horizontal.AxisKeys.RemoveAt(delete);
            }
            if (add)
            {
                ct.Horizontal.AxisKeys.Add(AxisKey.PC(KeyCode.LeftArrow, KeyCode.RightArrow));
            }
        }

        #endregion

        #region Vertical

        if (SavedFoldoutShared("Vertical Axis"))
        {
            int  delete = -1;
            bool add    = false;
            for (int i = 0; i < ct.Vertical.AxisKeys.Count; i++)
            {
                GUILayout.BeginHorizontal();
                if (i == 0 && GUILayout.Button("+", GUILayout.Width(20.0f)))
                {
                    add = true;
                }
                else if (i != 0 && GUILayout.Button("x", GUILayout.Width(20.0f)))
                {
                    delete = i;
                }
                ct.Vertical.AxisKeys[i].OnGui();
                GUILayout.EndHorizontal();
            }
            if (delete >= 0)
            {
                ct.Vertical.AxisKeys.RemoveAt(delete);
            }
            if (add)
            {
                ct.Vertical.AxisKeys.Add(AxisKey.PC(KeyCode.DownArrow, KeyCode.UpArrow));
            }
        }

        #endregion

        #region Actions

        if (SavedFoldoutShared("Actions"))
        {
            for (int i = 0; i < ct.Actions.Count; i++)
            {
                EditorGUI.indentLevel++;
                // For each action - Show a foldout
                if (SavedFoldoutShared(ct.Actions[i].Name))
                {
                    int  delete = -1;
                    bool add    = false;
                    EditorGUI.indentLevel++;
                    if (ct.Actions[i].Keys.Count == 0 && GUILayout.Button("Add a key"))
                    {
                        add = true;
                    }

                    for (int j = 0; j < ct.Actions[i].Keys.Count; j++)
                    {
                        GUILayout.BeginHorizontal();

                        if (j == 0 && GUILayout.Button("+", GUILayout.Width(20.0f)))
                        {
                            add = true;
                        }
                        else if (j != 0 && GUILayout.Button("x", GUILayout.Width(20.0f)))
                        {
                            delete = j;
                        }
                        ct.Actions[i].Keys[j].OnGui();

                        GUILayout.EndHorizontal();
                    }
                    EditorGUI.indentLevel--;
                    if (delete >= 0)
                    {
                        ct.Actions[i].Keys.RemoveAt(delete);
                    }
                    if (add)
                    {
                        ct.Actions[i].Keys.Add(ControlKey.PCKey(KeyCode.KeypadEnter));
                    }
                }
                EditorGUI.indentLevel--;
            }
        }

        #endregion

        if (GUI.changed)
        {
            xboxSupport = ((ControlScheme)(target)).XboxSupport;
            ScriptableObjectHelper.RefreshAsset(ct);
        }
    }