示例#1
0
        protected override void InternalInit()
        {
            ScreenState state = new ScreenState
            {
                Width  = Seven.Configuration.WindowWidth,
                Height = Seven.Configuration.WindowHeight
            };



            Screens.Victory.VictoryLabel victoryLabel = new Screens.Victory.VictoryLabel(state);

            List <GameMenu> victoryMenus = new List <GameMenu>();

            victoryMenus.Add(victoryLabel);
            victoryMenus.Add(new Screens.Victory.VictoryEXP(this, state));
            victoryMenus.Add(new Screens.Victory.VictoryAP(this, state));
            victoryMenus.Add(new Screens.Victory.Top(this, state));
            victoryMenus.Add(new Screens.Victory.Middle(this, state));
            victoryMenus.Add(new Screens.Victory.Bottom(this, state));

            Mastered         = new Mastered(state);
            Mastered.Visible = false;
            victoryMenus.Add(Mastered);

            for (int i = 0; i < LevelUp.Length; i++)
            {
                LevelUp[i]         = new LevelUp(state, i);
                LevelUp[i].Visible = false;
                victoryMenus.Add(LevelUp[i]);
            }

            for (int i = 0; i < MateriaLevelUp.Length; i++)
            {
                MateriaLevelUp[i]         = new MateriaLevelUp(state, i);
                MateriaLevelUp[i].Visible = false;
                victoryMenus.Add(MateriaLevelUp[i]);
            }

            VictoryScreen = new MenuScreen(victoryMenus, victoryLabel);



            Screens.Hoard.Label hoardLabel = new Screens.Hoard.Label(state);
            HoardItemLeft = new Screens.Hoard.ItemLeft(this, state, Gil);

            List <GameMenu> hoardMenus = new List <GameMenu>();

            hoardMenus.Add(hoardLabel);
            hoardMenus.Add(new Screens.Hoard.GilLeft(this, state));
            hoardMenus.Add(new Screens.Hoard.HoardGilRight(this, state));
            hoardMenus.Add(HoardItemLeft);
            hoardMenus.Add(new Screens.Hoard.ItemRight(this, state));

            HoardScreen = new MenuScreen(hoardMenus, hoardLabel);

            _screen = VictoryScreen;
        }
示例#2
0
        protected override void InternalInit()
        {
            ScreenState state = new ScreenState
            {
                Width = Seven.Configuration.WindowWidth,
                Height = Seven.Configuration.WindowHeight
            };

            Screens.Victory.VictoryLabel victoryLabel = new Screens.Victory.VictoryLabel(state);

            List<GameMenu> victoryMenus = new List<GameMenu>();
            victoryMenus.Add(victoryLabel);
            victoryMenus.Add(new Screens.Victory.VictoryEXP(this, state));
            victoryMenus.Add(new Screens.Victory.VictoryAP(this, state));
            victoryMenus.Add(new Screens.Victory.Top(this, state));
            victoryMenus.Add(new Screens.Victory.Middle(this, state));
            victoryMenus.Add(new Screens.Victory.Bottom(this, state));

            Mastered = new Mastered(state);
            Mastered.Visible = false;
            victoryMenus.Add(Mastered);

            for (int i = 0; i < LevelUp.Length; i++)
            {
                LevelUp[i] = new LevelUp(state, i);
                LevelUp[i].Visible = false;
                victoryMenus.Add(LevelUp[i]);
            }

            for (int i = 0; i < MateriaLevelUp.Length; i++)
            {
                MateriaLevelUp[i] = new MateriaLevelUp(state, i);
                MateriaLevelUp[i].Visible = false;
                victoryMenus.Add(MateriaLevelUp[i]);
            }

            VictoryScreen = new MenuScreen(victoryMenus, victoryLabel);

            Screens.Hoard.Label hoardLabel = new Screens.Hoard.Label(state);
            HoardItemLeft = new Screens.Hoard.ItemLeft(this, state, Gil);

            List<GameMenu> hoardMenus = new List<GameMenu>();
            hoardMenus.Add(hoardLabel);
            hoardMenus.Add(new Screens.Hoard.GilLeft(this, state));
            hoardMenus.Add(new Screens.Hoard.HoardGilRight(this, state));
            hoardMenus.Add(HoardItemLeft);
            hoardMenus.Add(new Screens.Hoard.ItemRight(this, state));

            HoardScreen = new MenuScreen(hoardMenus, hoardLabel);

            _screen = VictoryScreen;
        }
示例#3
0
        private void GiveExp()
        {
            // Give AP to each materia orb attached to
            // each character in the party

            List <MateriaOrb>[] leveledUp  = new List <MateriaOrb> [Party.PARTY_SIZE];
            List <MateriaOrb>   newMasters = new List <MateriaOrb>();

            for (int i = 0; i < Party.PARTY_SIZE; i++)
            {
                leveledUp[i] = new List <MateriaOrb>();

                Character c = Party[i];

                if (c != null && !c.Death)
                {
                    foreach (MateriaOrb m in c.Materia)
                    {
                        if (m != null && !(m is EnemySkillMateria) && !m.Master)
                        {
                            int level = m.Level;

                            m.AddAP(AP);

                            if (m.Level > level)
                            {
                                leveledUp[i].Add(m);
                            }

                            if (m.Master)
                            {
                                newMasters.Add(m);
                            }
                        }
                    }
                }
            }

            // Each character not in the party gets half the
            // EXP that the others get (and no AP)
            foreach (Character c in Party.Reserves)
            {
                if (c != null)
                {
                    c.GainExperience(Exp / 2);
                }
            }

            // Experience is given in chunks such that the progress bars fill
            // at a constant rate. This means we dole out less exp per period
            // at lower levels, and more exp per period at higher levels.

            GiveExpAnimation = new Thread(() =>
            {
                int[] exp       = new int[Party.PARTY_SIZE];
                int[] expGained = new int[Party.PARTY_SIZE];

                int refreshPeriod     = Seven.Configuration.RefreshPeriod;
                int msPerBarFill      = MS_PER_BAR_FILL;
                int periodsPerBarFill = msPerBarFill / refreshPeriod;

                for (int i = 0; i < Party.PARTY_SIZE; i++)
                {
                    Character c = Party[i];

                    if (c != null && !c.Death)
                    {
                        exp[i] = Exp * Exp_multiplier[i] / 100;
                    }
                }


                while (true)
                {
                    lock (_sync)
                    {
                        if (_stopGivingExp)
                        {
                            for (int i = 0; i < Party.PARTY_SIZE; i++)
                            {
                                Character c = Party[i];

                                if (c != null && !c.Death)
                                {
                                    int expLeft = (exp[i] - expGained[i]);
                                    c.GainExperience(expLeft);
                                }
                            }

                            break;
                        }
                    }

                    bool allDone = true;

                    for (int i = 0; i < Party.PARTY_SIZE; i++)
                    {
                        if (expGained[i] < exp[i])
                        {
                            Character c = Party[i];

                            if (c != null && !c.Death)
                            {
                                int expForLevel = c.ExpNextLevel - c.ExpCurrentLevel;

                                int expChunk = expForLevel / periodsPerBarFill;

                                if (expGained[i] + expChunk > exp[i])
                                {
                                    expChunk = exp[i] - expGained[i];
                                }

                                if (c.Exp + expChunk >= c.ExpNextLevel)
                                {
                                    LevelUp[i].Show();
                                }

                                expGained[i] += expChunk;
                                Party[i].GainExperience(expChunk);
                            }

                            allDone = false;
                        }
                    }

                    if (allDone)
                    {
                        break;
                    }

                    System.Threading.Thread.Sleep(refreshPeriod);
                }
            });

            if (newMasters.Count > 0)
            {
                Mastered.Show(newMasters);
            }

            for (int i = 0; i < leveledUp.Length; i++)
            {
                if (leveledUp[i].Count > 0)
                {
                    MateriaLevelUp[i].Show(leveledUp[i]);
                }
            }

            GiveExpAnimation.Start();
        }