Exemplo n.º 1
0
        /// <summary>
        /// Generic Subscreen handler.
        /// </summary>
        public static void TitleHandler()
        {
            var host = NoxicoGame.HostForm;

            if (Subscreens.FirstDraw)
            {
                Subscreens.FirstDraw = false;
                host.Clear();
                var xScale = Program.Cols / 80f;
                var yScale = Program.Rows / 25f;

                var background   = new Bitmap(Program.Cols, Program.Rows * 2, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                var logo         = Mix.GetBitmap("logo.png");
                var titleOptions = Mix.GetFilesWithPattern("titles\\*.png");
                var chosen       = Mix.GetBitmap(titleOptions.PickOne());
                //Given our random backdrop and fixed logo, draw them both onto background
                //because we can't -just- display alpha-blended PNGs.
                using (var gfx = Graphics.FromImage(background))
                {
                    gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                    gfx.Clear(Color.Black);
                    gfx.DrawImage(chosen, 0, 0, Program.Cols, Program.Rows * 2);
                    gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                    gfx.DrawImage(logo, 0, 0, logo.Width * xScale, logo.Height * yScale);
                }
                UIManager.Initialize();
                titleBack = new UIPNGBackground(background);

                var subtitleLeft = (int)(10 * xScale);
                var subtitleTop  = (int)((logo.Height * yScale) / 2) + 1;

                var subtitle   = i18n.GetString("ts_subtitle");
                var pressEnter = "\xC4\xC4\xC4\xC4\xB4 " + i18n.GetString("ts_pressentertobegin") + " <cGray>\xC3\xC4\xC4\xC4\xC4";
                titleCaption = new UILabel(subtitle)
                {
                    Top = subtitleTop, Left = subtitleLeft + 2, Foreground = Color.Teal, Darken = true
                };
                titlePressEnter = new UILabel(pressEnter)
                {
                    Top = subtitleTop + 2, Left = subtitleLeft, Foreground = Color.Gray, Darken = true
                };
                UIManager.Elements.Add(titleBack);
                UIManager.Elements.Add(titleCaption);
                UIManager.Elements.Add(titlePressEnter);
                //UIManager.Elements.Add(new UILabel("\u015c") { Top = 6, Left = 50, Foreground = Color.Gray });
                UIManager.Draw();
                Options.FromTitle = true;
            }
            if (NoxicoGame.IsKeyDown(KeyBinding.Accept) || Subscreens.Mouse || Vista.Triggers != 0)
            {
                if (Subscreens.Mouse)
                {
                    Subscreens.UsingMouse = true;
                }
                Subscreens.Mouse     = false;
                Subscreens.FirstDraw = true;
                var rawSaves = Directory.GetDirectories(NoxicoGame.SavePath);
                var saves    = new List <string>();
                //Check each possible save's version.
                foreach (var s in rawSaves)
                {
                    var verCheck = Path.Combine(s, "version");
                    if (!File.Exists(verCheck))
                    {
                        continue;
                    }
                    var version = int.Parse(File.ReadAllText(verCheck));
                    if (version < 20)
                    {
                        continue;
                    }
                    if (File.Exists(Path.Combine(s, "global.bin")))
                    {
                        saves.Add(s);
                    }
                }
                NoxicoGame.ClearKeys();
                Subscreens.Mouse = false;
                //Linq up a set of options for each save game. This returns the game's names as the keys.
                var options = saves.ToDictionary(new Func <string, object>(s => Path.GetFileName(s)), new Func <string, string>(s =>
                {
                    string p;
                    var playerFile = Path.Combine(s, "player.bin");
                    if (File.Exists(playerFile))
                    {
                        using (var f = new BinaryReader(File.OpenRead(playerFile)))
                        {
                            p = Player.LoadFromFile(f).Character.Name.ToString(true);
                        }
                        return(i18n.Format("ts_loadgame", p, Path.GetFileName(s)));
                    }
                    return(i18n.Format("ts_startoverinx", Path.GetFileName(s)));
                }));
                options.Add("~", i18n.GetString("ts_startnewgame"));
                options.Add("~~", i18n.GetString("ts_testingarena"));
                options.Add("~~~", i18n.GetString("ts_options"));
                //Display our list of saves.
                MessageBox.List(saves.Count == 0 ? i18n.GetString("ts_welcometonoxico") : i18n.GetString(saves.Count == 1 ? "ts_thereisasave" : "ts_therearesaves"), options,
                                () =>
                {
                    if ((string)MessageBox.Answer == "~")
                    {
                        //Restore our title screen backdrop, since the MessageBox subscreen purged it.
                        UIManager.Elements.Add(titleBack);
                        UIManager.Elements.Add(titleCaption);
                        UIManager.Elements.Add(titlePressEnter);
                        UIManager.Draw();
                        MessageBox.Input("What name would you like for your new world?",
                                         NoxicoGame.RollWorldName(),
                                         () =>
                        {
                            NoxicoGame.WorldName = (string)MessageBox.Answer;
                            NoxicoGame.Mode      = UserMode.Subscreen;
                            NoxicoGame.Subscreen = Introduction.CharacterCreator;
                            NoxicoGame.Immediate = true;
                        }
                                         );
                    }
                    else if ((string)MessageBox.Answer == "~~")
                    {
                        NoxicoGame.WorldName = "<Testing Arena>";
                        var env = Lua.Environment;
                        Lua.RunFile("testarena.lua");
                        var testBoard = new Board(env.TestArena.ArenaWidth, env.TestArena.ArenaHeight);
                        var me        = NoxicoGame.Me;
                        me.Boards.Add(testBoard);
                        me.CurrentBoard = testBoard;
                        me.CreatePlayerCharacter(env.TestArena.Name, env.TestArena.BioGender, env.TestArena.IdentifyAs, env.TestArena.Preference, env.TestArena.Bodyplan, new Dictionary <string, string>(), env.TestArena.BonusTrait);
                        env.BuildTestArena(testBoard);
                        me.Player.ParentBoard = testBoard;
                        testBoard.EntitiesToAdd.Add(me.Player);
                        NoxicoGame.InGameTime = new DateTime(740 + Random.Next(0, 20), 6, 26, 12, 0, 0);
                        testBoard.UpdateLightmap(null, true);
                        testBoard.AimCamera();
                        testBoard.Redraw();
                        testBoard.Draw();
                        Options.FromTitle    = false;
                        Subscreens.FirstDraw = true;
                        NoxicoGame.Immediate = true;
                        NoxicoGame.AddMessage(i18n.GetString("welcometest"), Color.Yellow);
                        NoxicoGame.AddMessage(i18n.GetString("rememberhelp"));
                        NoxicoGame.Mode = UserMode.Walkabout;
                    }
                    else if ((string)MessageBox.Answer == "~~~")
                    {
                        Options.FromTitle = true;
                        //Restore our title screen backdrop, since the MessageBox subscreen purged it.
                        UIManager.Initialize();
                        UIManager.Elements.Add(titleBack);
                        UIManager.Elements.Add(titleCaption);
                        UIManager.Elements.Add(titlePressEnter);
                        Options.Open();
                    }
                    else
                    {
                        Options.FromTitle    = false;
                        NoxicoGame.WorldName = (string)MessageBox.Answer;
                        host.Noxico.LoadGame();
                        NoxicoGame.Me.CurrentBoard.Draw();
                        Subscreens.FirstDraw = true;
                        NoxicoGame.Immediate = true;
                        NoxicoGame.AddMessage(i18n.GetString("welcomeback"), Color.Yellow);
                        NoxicoGame.AddMessage(i18n.GetString("rememberhelp"));
                        //TextScroller.LookAt(NoxicoGame.Me.Player);
                        NoxicoGame.Mode = UserMode.Walkabout;
                    }
                }
                                );
            }
        }