Ejemplo n.º 1
0
 public override void Assemble(Assembly.Assembler assembler)
 {
     int keycode = Key.KeyCode;
     int dindex = ScripterUtil.GetDirectionIndex(Key);
     if (Duration is ValRegEx)
     {
         if (Duration is ValReg32)
             throw new Assembly.AssembleException(ErrorMessage.NotSupported);
         var reg = Duration as ValRegEx;
         assembler.Add(Assembly.Instructions.AsmStoreOp.Create(reg.Index));
         assembler.Add(Assembly.Instructions.AsmStick_Standard.Create(keycode, dindex, 0));
         ReleasePrevious(assembler);
     }
     else if (Duration is ValInstant)
     {
         int duration = (Duration as ValInstant).Val;
         var ins = Assembly.Instructions.AsmStick_Standard.Create(keycode, dindex, duration);
         if (ins.Success)
         {
             assembler.Add(ins);
             ReleasePrevious(assembler);
         }
         else if (ins == Assembly.Instruction.Failed.OutOfRange)
         {
             assembler.Add(Assembly.Instructions.AsmStick_Hold.Create(keycode, dindex));
             ReleasePrevious(assembler);
             assembler.StickMapping[keycode] = assembler.Last() as Assembly.Instructions.AsmStick_Hold;
             assembler.Add(Assembly.Instructions.AsmWait.Create(duration));
             assembler.Add(Assembly.Instructions.AsmEmpty.Create());
             ReleasePrevious(assembler);
         }
     }
     else
         throw new Assembly.AssembleException(ErrorMessage.NotImplemented);
 }
Ejemplo n.º 2
0
        private static Statement StickParse(ParserArgument args)
        {
            Match m;

            m = Regex.Match(args.Text, @"^([lr]s)\s+(reset)$", RegexOptions.IgnoreCase);
            if (m.Success)
            {
                var keyname = m.Groups[1].Value;
                var key     = ScripterUtil.GetKey(keyname);
                if (key == null)
                {
                    return(null);
                }
                return(new StickUp(key, keyname));
            }
            m = Regex.Match(args.Text, @"^([lr]s{1,2})\s+([a-z0-9]+)$", RegexOptions.IgnoreCase);
            if (m.Success)
            {
                var keyname   = m.Groups[1].Value;
                var direction = m.Groups[2].Value;
                var key       = ScripterUtil.GetKey(keyname, direction);
                if (key == null)
                {
                    return(null);
                }
                return(new StickDown(key, keyname, direction));
            }
            m = Regex.Match(args.Text, $@"^([lr]s{{1,2}})\s+([a-z0-9]+)\s*,\s*({Formats.ValueEx})$", RegexOptions.IgnoreCase);
            if (m.Success)
            {
                var keyname   = m.Groups[1].Value;
                var direction = m.Groups[2].Value;
                var duration  = m.Groups[3].Value;
                var key       = ScripterUtil.GetKey(keyname, direction);
                if (key == null)
                {
                    return(null);
                }
                return(new StickPress(key, keyname, direction, args.Formatter.GetValueEx(duration)));
            }
            // mov
            return(MovParse(args));
        }
Ejemplo n.º 3
0
 public override void Assemble(Assembly.Assembler assembler)
 {
     assembler.Add(Assembly.Instructions.AsmStick_Hold.Create(Key.KeyCode, ScripterUtil.GetDirectionIndex(Key)));
     ReleasePrevious(assembler);
     assembler.StickMapping[Key.KeyCode] = assembler.Last() as Assembly.Instructions.AsmStick_Hold;
 }