Example #1
0
        /// <summary>
        /// Функция для преобразования строки по типу "+jump; -attack; -attack2" в коллекцию из трех команд.
        /// </summary>
        /// <param name="commandsStr"></param>
        /// <returns></returns>
        public static CommandCollection SplitCommands(string commandsStr)
        {
            // Разбиваем строку по двоеточиям
            string[]          commands   = commandsStr.Split(';').Select(part => part.Trim()).ToArray();
            CommandCollection collection = new CommandCollection();

            // Заполняем коллекцию экземплярами одиночных команд
            foreach (string part in commands)
            {
                collection.Add(new SingleCmd(part));
            }
            return(collection);
        }
Example #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);
            }
        }