예제 #1
0
        public static string Down(CommandKey key)
        {
            var elapsedTime = stopwatch.ElapsedMilliseconds;

            //debugStopwatch.Restart();
            if (elapsedTime > 500)
            {
                keyBuffer.Clear();
            }

            if (keyBuffer.Count() == 0)
            {
                keyBuffer.Add(key);
            }
            else
            {
                var waitKey = new CommandKey("WT");
                waitKey.SetWaitMillis(elapsedTime);

                if ((int)waitKey.WaitFrame <= 1)
                {
                    var lastKey = keyBuffer.Last();

                    if (lastKey.IsMoveKey() && key.IsMoveKey())
                    {
                        if (Commands.CanMerge(lastKey, key))
                        {
                            keyBuffer.RemoveAt(keyBuffer.Count() - 1);
                            keyBuffer.Add(Commands.Merge(lastKey, key));
                        }
                        else
                        {
                            keyBuffer.Add(key);
                        }
                    }
                    else
                    {
                        //keyBuffer.Add(Commands.PLUS);
                        keyBuffer.Add(waitKey);
                        keyBuffer.Add(key);
                    }
                }
                else
                {
                    keyBuffer.Add(waitKey);
                    keyBuffer.Add(key);
                }
            }

            var log = string.Join("", keyBuffer);

            stopwatch.Restart();

            //Console.WriteLine(string.Join("", keyBuffer));

            //debugStopwatch.Stop();
            //Console.WriteLine(debugStopwatch.ElapsedMilliseconds);
            return(log);
        }
예제 #2
0
        public static List <CommandKey> CreateCommandKeys(string line)
        {
            var commandKeyList = new List <CommandKey>();
            var commandSplit   = splitPattern.Split(line.Trim()).Where(str => str.Length > 0);

            foreach (var s in commandSplit)
            {
                var m = waitPattern.Match(s);
                if (m.Success)
                {
                    var    waitKey = new CommandKey("WT");
                    int    waitNum = int.Parse(m.Groups[1].Value);
                    string degree  = m.Groups[2].Value.ToUpper();

                    if (degree.Equals("F"))
                    {
                        waitKey.SetWaitFrame(waitNum);
                    }
                    else
                    {
                        waitKey.SetWaitMillis(waitNum);
                    }
                    commandKeyList.Add(waitKey);
                }
                else
                {
                    var chars  = s.ToCharArray();
                    var inputs = new StringBuilder();

                    for (int i = 0; i < s.Length; i++)
                    {
                        if (Commands.GetAvailableChars().Contains(chars[i]))
                        {
                            inputs.Append(chars[i]);

                            var chain = inputs.ToString();
                            if (Commands.GetDefinedKeyCodes().Contains(chain))
                            {
                                commandKeyList.Add(Commands.Find(chain));
                                inputs.Clear();
                            }
                        }
                    }
                }
            }
            return(commandKeyList);
        }