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; }
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; }
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(); }