コード例 #1
0
        public virtual string ConvertMaskToName(Bitset mask, bool hasAxis = false, int axisIndex = 0)
        {
            string result = "";
            bool isFirst = true;

            for (int i = 0; i < GetButtonsCount(); i++)
            {
                if (mask.Get(i))
                {
                    if (!isFirst)
                    {
                        result += " + ";
                    }
                    else
                    {
                        isFirst = false;
                    }

                    result += GetButtonName(i);
                }
            }

            if (hasAxis)
            {
                if (!isFirst)
                {
                    result += " + ";
                }

                result += GetAxisName(axisIndex);
            }

            return result;
        }
コード例 #2
0
        public virtual string ConvertMaskToName(Bitset mask, bool hasAxis = false, int axisIndex = 0)
        {
            string result  = "";
            bool   isFirst = true;

            for (int i = 0; i < GetButtonsCount(); i++)
            {
                if (mask.Get(i))
                {
                    if (!isFirst)
                    {
                        result += " + ";
                    }
                    else
                    {
                        isFirst = false;
                    }

                    result += GetButtonName(i);
                }
            }

            if (hasAxis)
            {
                if (!isFirst)
                {
                    result += " + ";
                }

                result += GetAxisName(axisIndex);
            }

            return(result);
        }
コード例 #3
0
        public List <ContinuousAction> GetContinuousBinding(int axis, Bitset state)
        {
            List <KeyValuePair <Bitset, ContinuousAction> > matches = new List <KeyValuePair <Bitset, ContinuousAction> >();

            foreach (var continuousActionEntry in continuousActionsMap.Values)
            {
                if (continuousActionEntry.Bitset == null || continuousActionEntry.Axis != axis)
                {
                    continue;
                }

                bool match = true;
                for (int i = 0; i < state.m_NumBits; i++)
                {
                    if (continuousActionEntry.Bitset.Get(i))
                    {
                        if (!state.Get(i))
                        {
                            match = false;
                            break;
                        }
                    }
                }

                if (match)
                {
                    matches.Add(new KeyValuePair <Bitset, ContinuousAction>(continuousActionEntry.Bitset, continuousActionEntry.Action));
                }
            }

            if (matches.Count == 0)
            {
                return(null);
            }

            List <KeyValuePair <int, ContinuousAction> > matchResults = new List <KeyValuePair <int, ContinuousAction> >();

            for (int i = 0; i < matches.Count; i++)
            {
                int bits = 0;
                for (int q = 0; q < matches[i].Key.m_NumBits; q++)
                {
                    if (matches[i].Key.Get(q))
                    {
                        bits++;
                    }
                }

                var value = matches[i].Value;
                matchResults.Add(new KeyValuePair <int, ContinuousAction>(bits, value));
            }

            matchResults.Sort(CompareKeys);

            int minBits = matchResults[0].Key;
            List <ContinuousAction> actions = new List <ContinuousAction>();

            for (var i = 0; i < matchResults.Count; i++)
            {
                if (matchResults[i].Key >= minBits)
                {
                    actions.Add(matchResults[i].Value);
                }
            }

            return(actions);
        }
コード例 #4
0
        public List <DiscreteAction> GetDiscreteBinding(Bitset state)
        {
            List <KeyValuePair <Bitset, DiscreteAction> > matches = new List <KeyValuePair <Bitset, DiscreteAction> >();

            foreach (var discreteActionEntry in discreteActionsMap.Values)
            {
                bool match = true;
                for (int i = 0; i < state.m_NumBits; i++)
                {
                    if (discreteActionEntry.Bitset.Get(i))
                    {
                        if (!state.Get(i))
                        {
                            match = false;
                            break;
                        }
                    }
                }

                if (match)
                {
                    matches.Add(new KeyValuePair <Bitset, DiscreteAction>(discreteActionEntry.Bitset, discreteActionEntry.Action));
                }
            }

            List <KeyValuePair <int, DiscreteAction> > matchResults = new List <KeyValuePair <int, DiscreteAction> >();

            for (int i = 0; i < matches.Count; i++)
            {
                int bits = 0;
                for (int q = 0; q < state.m_NumBits; q++)
                {
                    if (matches[i].Key.Get(q))
                    {
                        bits++;
                    }
                }

                var value = matches[i].Value;
                matchResults.Add(new KeyValuePair <int, DiscreteAction>(bits, value));
            }

            if (matches.Count == 0)
            {
                return(null);
            }

            matchResults.Sort(CompareKeys2);

            int minBits = matchResults[matches.Count - 1].Key;
            List <DiscreteAction> actions = new List <DiscreteAction>();

            for (var i = 0; i < matches.Count; i++)
            {
                if (matchResults[i].Key >= minBits)
                {
                    actions.Add(matchResults[i].Value);
                }
            }

            return(actions);
        }
コード例 #5
0
        public List<DiscreteAction> GetDiscreteBinding(Bitset state)
        {
            List<KeyValuePair<Bitset, DiscreteAction>> matches = new List<KeyValuePair<Bitset, DiscreteAction>>();

            foreach (var maskActionPair in discreteActionsMap)
            {
                Bitset expectedState = maskActionPair.Value;
                bool match = true;

                for (int i = 0; i < state.m_NumBits; i++)
                {
                    if (expectedState.Get(i))
                    {
                        if (!state.Get(i))
                        {
                            match = false;
                            break;
                        }
                    }
                }

                if(match)
                {
                    matches.Add(new KeyValuePair<Bitset, DiscreteAction>(maskActionPair.Value, maskActionPair.Key));
                }
            }

            List<KeyValuePair<int, DiscreteAction>> matchResults = new List<KeyValuePair<int, DiscreteAction>>();
            for (int i = 0; i < matches.Count; i++)
            {
                int bits = 0;
                for (int q = 0; q < state.m_NumBits; q++)
                {
                    if (matches[i].Key.Get(q))
                    {
                        bits++;
                    }
                }

                var value = matches[i].Value;
                matchResults.Add(new KeyValuePair<int, DiscreteAction>(bits, value));
            }

            if (matches.Count == 0)
            {
                return null;
            }

            matchResults.Sort(CompareKeys2);

            int minBits = matchResults[matches.Count - 1].Key;
            List<DiscreteAction> actions = new List<DiscreteAction>();

            for (var i = 0; i < matches.Count; i++)
            {
                if (matchResults[i].Key >= minBits)
                {
                    actions.Add(matchResults[i].Value);
                }
            }

            return actions;
        }
コード例 #6
0
        public List<ContinuousAction> GetContinuousBinding(int axis, Bitset state)
        {
            List<KeyValuePair<Bitset, ContinuousAction>> matches = new List<KeyValuePair<Bitset, ContinuousAction>>();

            foreach (var continuousActionPair in continuousActionsMap)
            {
                if(continuousActionPair.Value.Value != axis)
                {
                    continue;
                }

                Bitset expectedState = continuousActionPair.Value.Key;
                bool match = true;

                for (int i = 0; i < state.m_NumBits; i++)
                {
                    if (expectedState.Get(i))
                    {
                        if (!state.Get(i))
                        {
                            match = false;
                            break;
                        }
                    }
                }

                if (match)
                {
                    matches.Add(new KeyValuePair<Bitset, ContinuousAction>(expectedState, continuousActionPair.Key));
                }
            }

            if (matches.Count == 0)
            {
                return null;
            }

            List<KeyValuePair<int, ContinuousAction>> matchResults = new List<KeyValuePair<int, ContinuousAction>>();
            for (int i = 0; i < matches.Count; i++)
            {
                int bits = 0;
                for (int q = 0; q < matches[i].Key.m_NumBits; q++)
                {
                    if(matches[i].Key.Get(q))
                    {
                        bits++;
                    }
                }

                var value = matches[i].Value;
                matchResults.Add(new KeyValuePair<int, ContinuousAction>(bits, value));
            }

            matchResults.Sort(CompareKeys);

            int minBits = matchResults[0].Key;
            List<ContinuousAction> actions = new List<ContinuousAction>();

            for (var i = 0; i < matchResults.Count; i++)
            {
                if (matchResults[i].Key >= minBits)
                {
                    actions.Add(matchResults[i].Value);
                }
            }

            return actions;
        }
コード例 #7
0
        public List <ContinuousAction> GetContinuousBinding(int axis, Bitset state)
        {
            List <KeyValuePair <Bitset, ContinuousAction> > matches = new List <KeyValuePair <Bitset, ContinuousAction> >();

            foreach (var continuousActionPair in continuousActionsMap)
            {
                if (continuousActionPair.Value.Value != axis)
                {
                    continue;
                }

                Bitset expectedState = continuousActionPair.Value.Key;
                bool   match         = true;

                for (int i = 0; i < state.m_NumBits; i++)
                {
                    if (expectedState.Get(i))
                    {
                        if (!state.Get(i))
                        {
                            match = false;
                            break;
                        }
                    }
                }

                if (match)
                {
                    matches.Add(new KeyValuePair <Bitset, ContinuousAction>(expectedState, continuousActionPair.Key));
                }
            }

            List <KeyValuePair <int, ContinuousAction> > matchResults = new List <KeyValuePair <int, ContinuousAction> >();

            for (int i = 0; i < matches.Count; i++)
            {
                int bits = 0;
                for (int q = 0; q < state.m_NumBits; q++)
                {
                    if (matches[i].Key.Get(q))
                    {
                        bits++;
                    }
                }

                var value = matches[i].Value;
                matchResults.Add(new KeyValuePair <int, ContinuousAction>(bits, value));
            }

            if (matches.Count == 0)
            {
                return(null);
            }

            matchResults.Sort(CompareKeys);

            int minBits = matchResults[matches.Count - 1].Key;
            List <ContinuousAction> actions = new List <ContinuousAction>();

            for (var i = 0; i < matches.Count; i++)
            {
                if (matchResults[i].Key >= minBits)
                {
                    actions.Add(matches[i].Value);
                }
            }

            return(actions);
        }