Exemplo n.º 1
0
        private bool IsPressed(CommandElement expectInput, int lastInput, int curInput)
        {
            int expect = expectInput.keyCode;

            if ((expectInput.keyModifier & (1 << (int)KeyMode.KeyMode_Detect_As_4Way)) != 0)
            {
                if ((lastInput & expect) != expect && (curInput & expect) == expect)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                if ((lastInput != expect) && (curInput == expect))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Exemplo n.º 2
0
        public void Parse(string content)
        {
            Utility.Assert(content != null, "cmd def file is null!");
            List <Token> tokens;
            Tokenizer    tokenizer = new Tokenizer();

            tokens = tokenizer.GetTokens(content);
            Utility.PrintTokens(tokens.ToArray());
            int defaultCommandTime = 15;
            int defaultBufferTime  = 1;

            int pos       = 0;
            int tokenSize = tokens.Count;

            while (pos < tokenSize)
            {
                Token t = tokens[pos++];
                if (t.value == "command.time")
                {
                    t = tokens[pos++];
                    Utility.Assert(t.value == "=", "should be = after command.time");
                    t = tokens[pos++];
                    Utility.Assert(int.TryParse(t.value, out defaultCommandTime), "command.time should be int");
                }
                else if (t.value == "command.buffer.time")
                {
                    t = tokens[pos++];
                    Utility.Assert(t.value == "=", "should be = after command.buffer.time");
                    t = tokens[pos++];
                    Utility.Assert(int.TryParse(t.value, out defaultBufferTime), "command.buffer.time should be int");
                }
                else if (t.value == "[")
                {
                    t = tokens[pos++];
                    Utility.Assert(t.value == "Command", "should be Command after [");
                    t = tokens[pos++];
                    Utility.Assert(t.value == "]", "should be ] after Command");
                    Command c = new Command();
                    c.mCommand     = new List <CommandElement>();
                    c.mCommandTime = defaultCommandTime;
                    c.mBufferTime  = defaultBufferTime;
                    while (pos < tokenSize)
                    {
                        t = tokens[pos++];
                        if (t.value == "[")
                        {
                            pos--;
                            break;
                        }
                        else if (t.value == "name")
                        {
                            Utility.Assert((t = tokens[pos++]).value == "=", "should be = after name");
                            c.mCommandName = (t = tokens[pos++]).value;
                        }
                        else if (t.value == "time")
                        {
                            Utility.Assert((t = tokens[pos++]).value == "=", "should be = after time");
                            int commandTime = defaultCommandTime;
                            Utility.Assert(int.TryParse((t = tokens[pos++]).value, out commandTime), "time should be int");
                            c.mCommandTime = commandTime;
                        }
                        else if (t.value == "buffer.time")
                        {
                            Utility.Assert((t = tokens[pos++]).value == "=", "should be =  after buffer.time");
                            Utility.Assert(int.TryParse((t = tokens[pos++]).value, out c.mBufferTime), "buffer.time should be int");
                        }
                        else if (t.value == "command")
                        {
                            Utility.Assert((t = tokens[pos++]).value == "=", "should be = after command");
                            CommandElement currentCommandElement = new CommandElement();
                            while (t.value != "\n")
                            {
                                t = tokens[pos++];
                                if (t.value == ",")
                                {
                                    c.mCommand.Add(currentCommandElement);
                                    currentCommandElement = new CommandElement();
                                }
                                else if (t.value == "U")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_UP);
                                }
                                else if (t.value == "D")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_DOWN);
                                }
                                else if (t.value == "B")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_LEFT);
                                }
                                else if (t.value == "F")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_RIGHT);
                                }
                                else if (t.value == "DB")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_DOWN) + Utility.GetKeycode(KeyNames.KEY_LEFT);
                                }
                                else if (t.value == "DF")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_DOWN) + Utility.GetKeycode(KeyNames.KEY_RIGHT);
                                }
                                else if (t.value == "UB")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_UP) + Utility.GetKeycode(KeyNames.KEY_LEFT);
                                }
                                else if (t.value == "UF")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_UP) + Utility.GetKeycode(KeyNames.KEY_RIGHT);
                                }
                                else if (t.value == "a")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_BUTTON_A);
                                }
                                else if (t.value == "b")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_BUTTON_B);
                                }
                                else if (t.value == "c")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_BUTTON_C);
                                }
                                else if (t.value == "x")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_BUTTON_X);
                                }
                                else if (t.value == "y")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_BUTTON_Y);
                                }
                                else if (t.value == "z")
                                {
                                    currentCommandElement.keyCode += Utility.GetKeycode(KeyNames.KEY_BUTTON_Z);
                                }
                                else if (t.value == "$")
                                {
                                    currentCommandElement.keyModifier += 1 << (int)KeyMode.KeyMode_Detect_As_4Way;
                                }
                                else if (t.value == "/")
                                {
                                    currentCommandElement.keyModifier += 1 << (int)KeyMode.KeyMode_Must_Be_Held;
                                }
                                else if (t.value == "~")
                                {
                                    currentCommandElement.keyModifier += 1 << (int)KeyMode.KeyMode_On_Release;
                                }
                            }//while
                            c.mCommand.Add(currentCommandElement);
                        }
                    }
                    mCommands.Add(c);
                }
                else
                {
                    continue;
                }
            }
        }