Example #1
0
        public Dialog()
        {
            Acts qwe = new Acts("", del = () => { });

            nullList.Insert(0, qwe);
            TabAction = new Acts("-----Show more-----", del = () => { Next = Next == GlobalProperties.GetInfoHeight() - 4 ? 0 : GlobalProperties.GetInfoHeight() - 4; });
        }
Example #2
0
        public void Say(string Text)
        {
            int screenLength  = GlobalProperties.GetWidth() - Name.Length - 2;
            int screenLength1 = GlobalProperties.GetWidth();
            int lastLine      = (Text.Length - screenLength) % screenLength1;
            int minus;

            if (Text.Length > screenLength)
            {
                minus = lastLine > 0 ? lastLine : screenLength1;
                Program.prevLogData = null;
                Program.logData.Push(Text.Substring(Text.Length - minus));
                Program.logColors.Push(group.Color);
                Say(Text.Substring(0, Text.Length - minus));
            }
            else
            {
                Program.prevLogData = null;
                Program.logData.Push(Name + ": " + Text);
                Program.logColors.Push(group.Color);
            }
        }
Example #3
0
        public void DrawDialog(string Text) //Вывод диалога
        {
            if (Program.mainDialog.Actions != null && Program.mainDialog.Actions != Program.mainDialog.prevActions)
            {
                int Next = Program.mainDialog.Next;
                ClearInfoField();
                Console.SetCursorPosition(0, 2);
                Console.WriteLine(Text);

                if (Program.mainDialog.Actions.Count() < 5)
                {
                    Next = 0;
                }

                if (Program.mainDialog.Actions.Count() > 0)
                {
                    for (int i = 1 + Next; i <= Math.Min(Program.mainDialog.Actions.Count(), Next + GlobalProperties.GetInfoHeight() - 4); i++)
                    {
                        if (Program.mainDialog.Actions[i - 1].ActInfo != "")
                        {
                            Console.WriteLine("" + i + ". " + Program.mainDialog.Actions[i - 1].ActInfo);
                        }
                    }
                    if (Program.mainDialog.Actions.Count() >= 5)
                    {
                        Console.WriteLine("Tab. " + Program.mainDialog.TabAction.ActInfo);
                    }

                    Program.mainDialog.prevActions = Program.mainDialog.Actions;
                }
            }
        }
Example #4
0
        static void Main(string[] args)
        {
            GlobalProperties.SetConsoleParams();                  // устанавливаем параметры консоли
            curTime = new DateTime(2007, 6, 14, 9, 0, 0);         // устанавливаем текущую дату
            BaseGroups.FillGroups();                              // Устанавливаем отношения между группами
            Window = Windows.menu;                                // Включаем главное меню
            MainMenu.ShowMenu();

            //---------------------------------------------------------------------------Обработчик действий
            ConsoleKeyInfo key;
            KeyEvent       kevt         = new KeyEvent();
            int            hitDirection = 0; //0 - верх, 1 - право, 2 - низ, 3 - лево

            kevt.KeyPress += (sender, e) =>
            {
                char ch = e.key.KeyChar;

                //------------------------------------------------------------------------Пауза
                if (e.key.Key == ConsoleKey.P)
                {
                    isOnPause = !isOnPause;
                    if (isOnPause)
                    {
                        mainDialog.SetDialog("PAUSE");
                    }
                    else
                    {
                        mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                    }
                }
                if (!isOnPause && Window == 0)
                {
                    if (e.key.Key == ConsoleKey.W && e.key.Modifiers != ConsoleModifiers.Shift)
                    {
                        Hero.MoveTop();  // e.Handled = true;
                        mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                        hitDirection = 0;
                    }
                    else if (e.key.Key == ConsoleKey.A && e.key.Modifiers != ConsoleModifiers.Shift)
                    {
                        Hero.MoveLeft();
                        mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                        hitDirection = 3;
                    }
                    else if (e.key.Key == ConsoleKey.S && e.key.Modifiers != ConsoleModifiers.Shift)
                    {
                        Hero.MoveDown();
                        mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                        hitDirection = 2;
                    }
                    else if (e.key.Key == ConsoleKey.D && e.key.Modifiers != ConsoleModifiers.Shift)
                    {
                        Hero.MoveRight();
                        mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                        hitDirection = 1;
                    }

                    //--------------------------------------------------------------------Обзор
                    else if (e.key.Key == ConsoleKey.W)
                    {
                        if (Hero.y > 0)
                        {
                            mainDialog.SetDialog("Upside you see:", CurrentMap.GetObjInfo(Hero.x, Hero.y - 1));
                        }
                        else
                        {
                            mainDialog.SetDialog("This is the Edge of the World");
                        }
                    }
                    else if (e.key.Key == ConsoleKey.A)
                    {
                        if (Hero.x > 0)
                        {
                            mainDialog.SetDialog("Leftside you see:", CurrentMap.GetObjInfo(Hero.x - 1, Hero.y));
                        }
                        else
                        {
                            mainDialog.SetDialog("This is the Edge of the World");
                        }
                    }
                    else if (e.key.Key == ConsoleKey.S)
                    {
                        if (Hero.y < CurrentMap.height)
                        {
                            mainDialog.SetDialog("Downside you see:", CurrentMap.GetObjInfo(Hero.x, Hero.y + 1));
                        }
                        else
                        {
                            mainDialog.SetDialog("This is the Edge of the World");
                        }
                    }
                    else if (e.key.Key == ConsoleKey.D)
                    {
                        if (Hero.x < CurrentMap.width)
                        {
                            mainDialog.SetDialog("Rightside:", CurrentMap.GetObjInfo(Hero.x + 1, Hero.y));
                        }
                        else
                        {
                            mainDialog.SetDialog("This is the Edge of the World");
                        }
                    }

                    //-------------------------------------------------------------------Команды и способности
                    else if (e.key.Key == ConsoleKey.R)
                    {
                        List <Person> flag = new List <Person>();
                        int           loud = 3;
                        Hero.Say("Back!", 3);//Громкость X :  обычный слух с трудом, но услышит звук с X клеток
                        foreach (MapCell cell in CurrentMap.MapObjects)
                        {
                            if (cell.Dude != null && cell.Dude != Hero && Relations.relations[cell.Dude.group.number, Hero.group.number] != Relations.Relate.haters)
                            {
                                if (Math.Max(Math.Abs(Hero.x - cell.Dude.x), Math.Abs(Hero.y - cell.Dude.y)) < loud)
                                {
                                    flag.Add(cell.Dude);
                                }
                            }
                        }
                        foreach (Person man in flag)
                        {
                            if (Hero.x - man.x > 0)
                            {
                                man.MoveLeft();
                            }
                            else
                            {
                                man.MoveRight();
                            }
                        }
                    }
                    else if (e.key.Key == ConsoleKey.E)
                    {
                        Hero.Say("Follow me, Bros!", 25);//Громкость X :  обычный слух с трудом, но услышит звук с X клеток
                        foreach (MapCell cell in CurrentMap.MapObjects)
                        {
                            if (cell.Dude != null && cell.Dude != Hero && Math.Max(Math.Abs(Hero.x - cell.Dude.x), Math.Abs(Hero.y - cell.Dude.y)) < 25 && Relations.relations[cell.Dude.group.number, BaseGroups.GrHero.number] == Relations.Relate.lovers) //     cell.Dude.Color == ConsoleColor.Cyan)
                            {
                                if (rand.Next(100) < 10)
                                {
                                    cell.Dude.Say("АААА!", 25);
                                }
                                cell.Dude.humanAI.MoveTo(Hero.x, Hero.y);
                            }
                        }
                    }
                    //-------------------------------------------------------------------Удар
                    else if (e.key.Key == ConsoleKey.Spacebar)
                    {
                        Hero.Hit(hitDirection);
                        int hitedX = Hero.x; int hitedY = Hero.y;
                        switch (hitDirection)
                        {
                        case 0: hitedY--; break;

                        case 1: hitedX++; break;

                        case 2: hitedY++; break;

                        case 3: hitedX--; break;
                        }
                        if (CurrentMap.MapObjects[hitedY, hitedX].Dude != null)
                        {
                            Enemy = CurrentMap.MapObjects[hitedY, hitedX].Dude;
                        }
                    }
                }

                //-----------------------------------------------------------------------Действие
                if (ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9' || e.key.Key == ConsoleKey.Tab)
                {
                    mainDialog.prevActions = null;
                    try
                    {
                        if (e.key.Key != ConsoleKey.Tab)
                        {
                            int ikey = (int)Char.GetNumericValue(ch);
                            if (mainDialog.Actions.Count > ikey - 1)
                            {
                                bool isEnd = mainDialog.Actions[ikey - 1].isEnd;
                                mainDialog.Actions[ikey - 1].Act.Invoke();
                                e.Handled = true;
                                if (isEnd)
                                {
                                    mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                                }
                                //mainDialog.SetDialog(mainDialog.Actions[ikey - 1].ActEnd);
                            }
                        }
                        else
                        {
                            mainDialog.TabAction.Act.Invoke();
                            e.Handled = true;
                        }
                    }
                    catch (Exception exep)
                    { }
                }
                //-----------------------------------------------------------------------Меню
                else if (e.key.Key == ConsoleKey.Escape)
                {
                    isOnPause = !isOnPause;
                    if (Window != Windows.menu)
                    {
                        try
                        {
                            if (Window != 0)
                            {
                                Window = 0;
                                mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                            }
                            else
                            {
                                GlobalProperties.ShowMenu();
                            }
                        }
                        catch (Exception exep)
                        { }
                    }
                }
                //-----------------------------------------------------------------------Помощь
                else if (e.key.Key == ConsoleKey.F2)
                {
                    try
                    {
                        GlobalProperties.ShowHelp();
                    }
                    catch (Exception exep)
                    { }
                }
                //-----------------------------------------------------------------------Инвентарь
                else if (e.key.Key == ConsoleKey.I)
                {
                    if (Window != Windows.menu)
                    {
                        try
                        {
                            Hero.Inv.ShowObj();
                            Window = Window == Windows.inventory ? Windows.main : Windows.inventory;

                            if (Window == 0)
                            {
                                mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                            }
                        }
                        catch (Exception exep)
                        {
                        }
                    }
                }
                //-----------------------------------------------------------------------Журнал
                else if (e.key.Key == ConsoleKey.J)
                {
                    if (Window != Windows.menu)
                    {
                        try
                        {
                            mainDialog.SetDialog("This is your personal diary");
                            Window = Window == Windows.journal ? Windows.main : Windows.journal;

                            if (Window == 0)
                            {
                                mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                            }
                        }
                        catch (Exception exep)
                        {
                        }
                    }
                }
                else if (e.key.Key == ConsoleKey.K)
                {
                    if (Window != Windows.menu)
                    {
                        try
                        {
                            Hero.Perks.ShowPerks();
                            //mainDialog.SetDialog("Это список ваших способностей и характеристик");
                            Window = Window == Windows.skills ? Windows.main : Windows.skills;

                            if (Window == 0)
                            {
                                mainDialog.SetDialog("You see:", CurrentMap.GetObjInfo(Hero.x, Hero.y));
                            }
                        }
                        catch (Exception exep)
                        {
                        }
                    }
                }
            };
            //----------------------------------------------------------------------------

            Task drawTask = new Task(DrawInTime);

            drawTask.Start();

            aTimer.AutoReset = true;
            aTimer           = new System.Timers.Timer(1000 * GlobalProperties.dayMinute / 24);
            aTimer.Elapsed  += OnTimedEvent;
            aTimer.Enabled   = true;

            //Контроль нажатия клавиш
            while (true)
            {
                key = Console.ReadKey(true);
                kevt.OnKeyPress(key);
            }

            //Обновление экрана
            void DrawInTime()
            {
                while (true)
                {
                    if (Window != Windows.menu)
                    {
                        CurrentMap.GetTopView(); //Рисуем карту
                        mainGUI.DrawMenu();      //Рисуем время
                        mainGUI.DrawStat();      //Рисуем параметры
                    }

                    mainGUI.DrawDialog(mainDialog.DialogText); //Рисуем диалог
                    mainGUI.DrawLog();                         //Рисуем лог

                    if (Window == 0)
                    {
                        mainGUI.DrawField(CurrentMap, Hero);
                    }
                    else if (Window == Windows.inventory)
                    {
                        SecondWindow = Hero.Inv.InventoryGet();
                        mainGUI.DrawOtherField();
                    }
                    else if (Window == Windows.journal)
                    {
                        SecondWindow = Hero.journal.JournalGet();
                        mainGUI.DrawOtherField();
                    }
                    else if (Window == Windows.menu)
                    {
                        SecondWindow = MainMenu.MenuGet();
                        mainGUI.DrawOtherField();
                    }
                    else if (Window == Windows.skills)
                    {
                        SecondWindow = Hero.Perks.PerkGet();
                        mainGUI.DrawOtherField();
                    }
                }
            }
        }