示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="name">Название мета-скрипта без префиксов + и -</param>
        /// <param name="onKeyDown">Набор команд при нажатии кнопки. </param>
        /// <param name="onKeyRelease">Набор команд при отжатии кнопки.</param>
        public MetaCmd(string name, CommandCollection onKeyDown, CommandCollection onKeyRelease)
        {
            if (onKeyDown == null || onKeyRelease == null)
            {
                throw new InvalidOperationException("Обе коллекции не могут быть равны null");
            }

            this.AliasOnKeyDown = new AliasCmd($"+{name}", onKeyDown);
            this.Add(this.AliasOnKeyDown);
            this.AliasOnKeyRelease = new AliasCmd($"-{name}", onKeyRelease);
            this.Add(this.AliasOnKeyRelease);
        }
示例#2
0
        public CycleCmd(string name, IEnumerable <CommandCollection> commandLines, string[] cycleNames)
        {
            if (cycleNames != null && commandLines.Count() != cycleNames.Length)
            {
                throw new InvalidOperationException("Число имен итераций не совпадает с количеством итераций");
            }

            this.Name = new SingleCmd(name);
            int iterCount = commandLines.Count();

            if (cycleNames == null)
            {
                cycleNames = new string[commandLines.Count()];

                for (int i = 0; i < commandLines.Count(); i++)
                {
                    cycleNames[i] = GenerateAliasName(i);
                }
            }



            // Генерируем начало цикла
            AliasCmd headerAlias = new AliasCmd(name, new SingleCmd(cycleNames[0]));

            this.Add(headerAlias);

            // Генерируем циклические алиасы
            for (int i = 0; i < commandLines.Count(); i++)
            {
                // Копируем команды, которые будут выполняться в новый экземпляр
                CommandCollection currentBody = new CommandCollection(commandLines.ElementAt(i));

                // И к ним добавим команды управления циклом
                // Если команда последняя, то следующая команда - та, что первая в коллекции
                string nextIterationName = i == commandLines.Count() - 1 ? cycleNames[0] : cycleNames[i + 1];
                // Управляющий алиас, отвечающий за цикл
                AliasCmd transferAlias = new AliasCmd(this.Name.ToString(), new SingleCmd(nextIterationName));

                // Добавляем его в конец
                currentBody.Add(transferAlias);

                // Генерируем непосредственно строку с объявлением имени алиаса и его телом
                AliasCmd iterationAlias = new AliasCmd(cycleNames[i], currentBody);

                this.Add(iterationAlias);
            }
        }