Пример #1
0
        private MenuTreeNode GetBuildNode()
        {
            var node = new MenuTreeNode("Все готово", GetBuildMarkup());

            node.ButtonReaction = (msgArg) =>
            {
                if (msgArg.Message.Text == "Создать карту")
                {
                    var chatId = msgArg.Message.Chat.Id;
                    bot.SendMessage(chatId, "Начался процесс создания. Он может идти длительное время", EmptyMurkup);

                    var generator = mapCreator.CreateGenerator();
                    var map       = generator.GenerateMap();
                    var heightMap = map.ToHeightImage();
                    var colorMap  = map.GenerateColor(mapCreator.Biome, mapCreator.Smoothness);

                    bot.SendPhoto(chatId, heightMap);
                    bot.SendPhoto(chatId, colorMap);
                    Thread.Sleep(2000);
                    if (!DataBaseReaderWriter.TryAddMap(map, chatId))
                    {
                        bot.SendMessage(chatId, "Сервер временно недоступен, ваша карта не будет сохранена. " +
                                        "Позже вы сможете сгенерировать ее заново используя эти же параметры", EmptyMurkup);
                    }
                    menu.Current = menu.Current.NextNodes.First();
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #2
0
        private MenuTreeNode GetRightBottomAngleHeightNode()
        {
            var node = new MenuTreeNode("Введите высоту правого нижнего угла - целое число от 0 до 255", EmptyMurkup);

            node.ButtonReaction = (msgArg) =>
            {
                byte angleValue;
                if (byte.TryParse(msgArg.Message.Text, out angleValue))
                {
                    mapCreator.RightBottom = angleValue;
                    menu.Current           = menu.Current.NextNodes.First();
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #3
0
        private MenuTreeNode GetConstBorderNode()
        {
            var node = new MenuTreeNode("Введите значение - целое число от 0 до 255", EmptyMurkup);

            node.ButtonReaction = (msgArg) =>
            {
                byte borderValue;
                if (byte.TryParse(msgArg.Message.Text, out borderValue))
                {
                    mapCreator.DefaultBorderValue = borderValue;
                    menu.Current = menu.Current.NextNodes.First();
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #4
0
        private MenuTreeNode GetSmoothNode()
        {
            var node = new MenuTreeNode("Введите интенсивность сглаживания - целое число от 0 до 5", EmptyMurkup);

            node.ButtonReaction = (msgArg) =>
            {
                int smoothness;
                if (int.TryParse(msgArg.Message.Text, out smoothness))
                {
                    mapCreator.Smoothness = Math.Abs(smoothness % 5);
                    menu.Current          = menu.Current.NextNodes.First();
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #5
0
        private MenuTreeNode GetSeedNode()
        {
            var info = "Укажите сид - целое число, влияющее на рандомизированные значения";
            var node = new MenuTreeNode(info, EmptyMurkup);

            node.ButtonReaction = (msgArg) =>
            {
                int seed;
                if (int.TryParse(msgArg.Message.Text, out seed))
                {
                    mapCreator.Seed = seed;
                    menu.Current    = menu.Current.NextNodes.First();
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #6
0
        private MenuTreeNode GetSizeNode()
        {
            var info = "Укажите размер карты, в пикселях. Размер должен соответствовать формуле 2^n + 1";
            var node = new MenuTreeNode(info, EmptyMurkup);

            node.ButtonReaction = (msgArg) =>
            {
                int size;
                if (TryGetSquareMapSize(out size, msgArg))
                {
                    mapCreator.MapSizeX = mapCreator.MapSizeY = size;
                    menu.Current        = menu.Current.NextNodes.First();
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #7
0
        private MenuTreeNode GetRoughnessNode()
        {
            var info = "Введите шерховатость карты - дробное значение. Например: 1,6. На больших картах низкое значение шерховатости " +
                       "приведет к преобладания равнинной местности, а высокое значение на маленьких - к слишком резким перепадам высоты";
            var node = new MenuTreeNode(info, EmptyMurkup);

            node.ButtonReaction = (msgArg) =>
            {
                float roughness;
                if (float.TryParse(msgArg.Message.Text, out roughness))
                {
                    mapCreator.Roughness = roughness;
                    menu.Current         = menu.Current.NextNodes.First();
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #8
0
        private MenuTreeNode GetAngleHeightNode()
        {
            var node = new MenuTreeNode("Желаете указать высоты краев?", YesNoMarkup);

            node.ButtonReaction = (msgArg) =>
            {
                switch (msgArg.Message.Text)
                {
                case "Да":
                    menu.Current = menu.Current.NextNodes[1];
                    break;

                case "Нет":
                    menu.Current = menu.Current.NextNodes[0];
                    break;
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #9
0
        private MenuTreeNode GetAskSmoothNode()
        {
            var node = new MenuTreeNode("Необходимо ли сглаживание?", YesNoMarkup);

            node.ButtonReaction = (msgArg) =>
            {
                switch (msgArg.Message.Text)
                {
                case "Да":
                    menu.Current = menu.Current.NextNodes[1];
                    break;

                case "Нет":
                    menu.Current = menu.Current.NextNodes[0];
                    break;
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #10
0
        private MenuTreeNode GetBorderValueNode()
        {
            var node = new MenuTreeNode("Как будет определяться высота точек по границе карты?", GetBorderMarkup());

            node.ButtonReaction = (msgArg) =>
            {
                switch (msgArg.Message.Text)
                {
                case "Ввести константу":
                    mapCreator.IsRandomBorder = false;
                    menu.Current = menu.Current.NextNodes[1];
                    break;

                case "Рандомно":
                    mapCreator.IsRandomBorder = true;
                    menu.Current = menu.Current.NextNodes[0];
                    break;
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #11
0
        private MenuTreeNode GetBiomeNode()
        {
            var info = "Укажите тип биома, в котором располагается местность";
            var node = new MenuTreeNode(info, GetBiomesButtons());

            node.ButtonReaction = (msgArg) =>
            {
                switch (msgArg.Message.Text)
                {
                case "Лес":
                    mapCreator.Biome = BiomeType.Лес;
                    menu.Current     = menu.Current.NextNodes.First();
                    break;

                case "Пустыня":
                    mapCreator.Biome = BiomeType.Пустыня;
                    menu.Current     = menu.Current.NextNodes.First();
                    break;
                }
                menu.Current.PrintCurrentMessage(bot, msgArg);
            };
            return(node);
        }
Пример #12
0
        private MenuTreeNode GetRoot()
        {
            var root = new MenuTreeNode("Приветствую тебя. Ты можешь:", GetMenuRootButtons());

            root.ButtonReaction = (msgArg) =>
            {
                switch (msgArg.Message.Text)
                {
                case "Создать новую карту":

                    menu.Current = menu.Root.NextNodes.First();
                    menu.Current.PrintCurrentMessage(bot, msgArg);
                    break;

                case "Вывести предыдущую созданную":
                    var chatId = msgArg.Message.Chat.Id;
                    DataBaseReaderWriter.TryGetMap(chatId, out Map map);
                    if (map == null)
                    {
                        bot.SendMessage(chatId, "Возникла ошибка чтения данных из базы. " +
                                        "Возможно вы еще не создавали карту либо возникла ошибка доступа к серверу", EmptyMurkup);
                        break;
                    }

                    bot.SendPhoto(chatId, map.ToHeightImage());
                    bot.SendPhoto(chatId, map.ColorMap.ToColorImage(map.SizeX, map.SizeY));

                    break;

                default:
                    root.PrintCurrentMessage(bot, msgArg);
                    break;
                }
            };
            return(root);
        }
Пример #13
0
 /// <summary>
 /// Добавляет узел в самый конец меню
 /// </summary>
 /// <param name="node">новый пункт меню</param>
 public void AddNode(MenuTreeNode node)
 {
     Tail.NextNodes.Add(node);
     Tail = node;
 }
Пример #14
0
 public MenuTree(MenuTreeNode root)
 {
     Root = Current = Tail = root;
 }