public FinalResultsMenu(GameProgress ending)
        {
            Bounds = Rect.FromPoints(new Loc(GraphicsManager.ScreenWidth / 2 - 140, 16), new Loc(GraphicsManager.ScreenWidth / 2 + 140, 224));
            Ending = ending;

            Title = new MenuText(Text.FormatKey("MENU_RESULTS_TITLE"),
                                 new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight), DirH.None);

            Div = new MenuDivider(Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth, GraphicsManager.MenuBG.TileHeight + LINE_SPACE), Bounds.End.X - Bounds.X - GraphicsManager.MenuBG.TileWidth * 2);

            Team = new MenuText(Ending.ActiveTeam.GetDisplayName(), new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE + TitledStripMenu.TITLE_OFFSET), DirH.None);
            string message = "";

            switch (Ending.Outcome)
            {
            case GameProgress.ResultType.Cleared:
                message = Text.FormatKey("MENU_RESULTS_COMPLETE", Ending.Location);
                break;

            case GameProgress.ResultType.Rescue:
                message = Text.FormatKey("MENU_RESULTS_RESCUE", Ending.Location);
                break;

            case GameProgress.ResultType.Failed:
            case GameProgress.ResultType.Downed:
                message = Text.FormatKey("MENU_RESULTS_DEFEAT", Ending.Location);
                break;

            case GameProgress.ResultType.TimedOut:
                message = Text.FormatKey("MENU_RESULTS_TIMEOUT", Ending.Location);
                break;

            case GameProgress.ResultType.Escaped:
                message = Text.FormatKey("MENU_RESULTS_ESCAPE", Ending.Location);
                break;

            case GameProgress.ResultType.GaveUp:
                message = Text.FormatKey("MENU_RESULTS_QUIT", Ending.Location);
                break;

            default:
            {
                if (String.IsNullOrWhiteSpace(Ending.Location))
                {
                    message = Text.FormatKey("MENU_RESULTS_VANISHED");
                }
                else
                {
                    message = Text.FormatKey("MENU_RESULTS_VANISHED_AT", Ending.Location);
                }
                break;
            }
            }

            Description = new MenuText(message, new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 2 + TitledStripMenu.TITLE_OFFSET), DirH.None);

            MoneyTally = new MenuText(Text.FormatKey("MENU_BAG_MONEY", Text.FormatKey("MONEY_AMOUNT", Ending.ActiveTeam.Money)),
                                      new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 4 + TitledStripMenu.TITLE_OFFSET), DirH.None);
            InvValueTally = new MenuText(Text.FormatKey("MENU_RESULTS_INV_VALUE", Text.FormatKey("MONEY_AMOUNT", Ending.ActiveTeam.GetInvValue())),
                                         new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 5 + TitledStripMenu.TITLE_OFFSET), DirH.None);
            TotalTurns = new MenuText(Text.FormatKey("MENU_RESULTS_TOTAL_TURNS", Ending.TotalTurns),
                                      new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 9 + TitledStripMenu.TITLE_OFFSET), DirH.None);

            Seed = new MenuText(Text.FormatKey("MENU_RESULTS_SEED", Ending.Rand.FirstSeed.ToString("X")),
                                new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 11 + TitledStripMenu.TITLE_OFFSET), DirH.None);

            RogueProgress rogue = Ending as RogueProgress;

            if (rogue != null)
            {
                StorageValueTally = new MenuText(Text.FormatKey("MENU_RESULTS_BONUS_VALUE", Ending.ActiveTeam.Bank),
                                                 new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 6 + TitledStripMenu.TITLE_OFFSET), DirH.None);
                TotalTally = new MenuText(Text.FormatKey("MENU_RESULTS_TOTAL_SCORE", Ending.ActiveTeam.GetTotalScore()),
                                          new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 7 + TitledStripMenu.TITLE_OFFSET), DirH.None);
                Seed.Color = rogue.Seeded ? TextBlue : Color.White;
            }
            else
            {
                StorageValueTally = new MenuText("",
                                                 new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 6 + TitledStripMenu.TITLE_OFFSET), DirH.None);
                TotalTally = new MenuText("",
                                          new Loc(GraphicsManager.ScreenWidth / 2, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 7 + TitledStripMenu.TITLE_OFFSET), DirH.None);
            }

            base.Initialize();
        }
Beispiel #2
0
        public IEnumerator <YieldInstruction> Begin(int choice, string name)
        {
            GameManager.Instance.BGM("", true);
            yield return(CoroutineManager.Instance.StartCoroutine(GameManager.Instance.FadeOut(false)));

            GameProgress save = new RogueProgress(seed.HasValue ? seed.Value : MathUtils.Rand.NextUInt64(), Guid.NewGuid().ToString().ToUpper(), seed.HasValue);

            for (int ii = 0; ii < DataManager.Instance.DataIndices[DataManager.DataType.Zone].Count; ii++)
            {
                save.DungeonUnlocks[ii] = DataManager.Instance.Save.DungeonUnlocks[ii];
            }
            DataManager.Instance.SetProgress(save);
            DataManager.Instance.Save.ActiveTeam = new ExplorerTeam();
            DataManager.Instance.Save.ActiveTeam.SetRank(0);
            DataManager.Instance.Save.ActiveTeam.Name = team;
            MonsterData monsterData = DataManager.Instance.GetMonster(choice);

            int        formSlot = FormSetting;
            List <int> forms    = CharaDetailMenu.GetPossibleForms(monsterData);

            if (formSlot >= forms.Count)
            {
                formSlot = forms.Count - 1;
            }
            if (formSlot == -1)
            {
                formSlot = MathUtils.Rand.Next(forms.Count);
            }

            int formIndex = forms[formSlot];

            Gender gender = CharaDetailMenu.LimitGender(monsterData, formIndex, GenderSetting);

            if (gender == Gender.Unknown)
            {
                gender = monsterData.Forms[formIndex].RollGender(MathUtils.Rand);
            }

            int intrinsicSlot = CharaDetailMenu.LimitIntrinsic(monsterData, formIndex, IntrinsicSetting);
            int intrinsic     = 0;

            if (intrinsicSlot == -1)
            {
                intrinsic = monsterData.Forms[formIndex].RollIntrinsic(MathUtils.Rand, 3);
            }
            else if (intrinsicSlot == 0)
            {
                intrinsic = monsterData.Forms[formIndex].Intrinsic1;
            }
            else if (intrinsicSlot == 1)
            {
                intrinsic = monsterData.Forms[formIndex].Intrinsic2;
            }
            else
            {
                intrinsic = monsterData.Forms[formIndex].Intrinsic3;
            }

            Character newChar = DataManager.Instance.Save.ActiveTeam.CreatePlayer(MathUtils.Rand, new MonsterID(choice, formIndex, SkinSetting, gender), DataManager.Instance.StartLevel, intrinsic, DataManager.Instance.StartPersonality);

            newChar.Nickname = name;
            DataManager.Instance.Save.ActiveTeam.Players.Add(newChar);

            DataManager.Instance.Save.RegisterMonster(DataManager.Instance.Save.ActiveTeam.Players[0].BaseForm.Species);
            DataManager.Instance.Save.StartDate = String.Format("{0:yyyy-MM-dd_HH-mm-ss}", DateTime.Now);

            DataManager.Instance.MsgLog.Clear();

            yield return(CoroutineManager.Instance.StartCoroutine(GameManager.Instance.BeginGameInSegment(new ZoneLoc(chosenDest, new SegLoc()), GameProgress.DungeonStakes.Risk, true, false)));
        }