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); }
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); }