public void GameStartSendOut(IEnumerable <Tile> tiles) { var pms = tiles.Select(SendOutImplement).ToArray(); string log; int pm1, pm2; if (pms.Length == 1) { log = Ls.SendOut1; pm1 = pm2 = 0; } else if (pms.Length == 2) { log = pms[0].Pokemon.Owner == pms[1].Pokemon.Owner ? Ls.SendOut2 : Ls.SendOut22; pm1 = pms[1].Id; pm2 = 0; } else { log = Ls.SendOut3; pm1 = pms[1].Id; pm2 = pms[2].Id; } ReportBuilder.ShowLog(log, pms[0].Id, pm1, pm2); }
internal Controller(IGameSettings settings, IPokemonData[, ][] pms) { GameSettings = settings; Board = new Board(GameSettings); Teams = new Team[2]; var ppt = settings.Mode.PlayersPerTeam(); for (int t = 0; t < Teams.Length; ++t) { var players = new Player[ppt]; players[0] = new Player(this, t, 0, pms[t, 0]); if (ppt == 2) { players[1] = new Player(this, t, 1, pms[t, 1]); } Teams[t] = new Team(t, players, settings); } ReportBuilder = new ReportBuilder(this); SwitchController = new SwitchController(this); InputController = new InputController(this); TurnController = new TurnController(this); #if TEST randomSeeds = new Random(1); random = new Random(randomSeeds.Next()); #else random = new Random(); #endif Timer = new GoTimer(GameSettings.Mode.PlayersPerTeam() == 1 ? new Player[] { Teams[0].GetPlayer(0), Teams[1].GetPlayer(0) } : new Player[] { Teams[0].GetPlayer(0), Teams[0].GetPlayer(1), Teams[1].GetPlayer(0), Teams[1].GetPlayer(1) }); Timer.Start(); }
private void Mega() { var m = false; foreach (var p in ActingPokemons) { p.BeforeMegaSpeed = p.Speed; } foreach (var p in ActingPokemons) { if (p.Action == PokemonAction.MoveAttached && p.SelectMega) { if (p.Pokemon.Item == 0) { p.ShowLogPm(Ls.MegaPre384); } else { p.ShowLogPm("MegaPre", p.Pokemon.Item); } p.Pokemon.Mega = true; p.ChangeForm(ITs.MegaForm(p.Pokemon.Item), true, "Mega"); p.CalculatePriority(); p.BeforeMegaSpeed = p.Speed; //mega速度刷新只对自己有效 雨天下mega轻快会变快,正常天气mega降雨不会使轻快队友变快 m = true; } } if (m) { ReportBuilder.AddHorizontalLine(); ActingPokemons.Sort(MegaComparer); } }
private void Mega() { var m = false; foreach (var p in ActingPokemons) { if (p.Action == PokemonAction.MoveAttached && p.SelectMega) { if (p.Pokemon.Item == 0) { p.ShowLogPm(Ls.MegaPre384); } else { p.ShowLogPm("MegaPre", p.Pokemon.Item); } p.Pokemon.Mega = true; p.ChangeForm(ITs.MegaForm(p.Pokemon.Item), true, "Mega"); m = true; } } if (m) { ReportBuilder.AddHorizontalLine(); } }
private void EndTurnEffects() { if (Controller.TurnNumber != 0) { SortTiles(); EndTurn.Execute(Controller); ReportBuilder.AddHorizontalLine(); } }
private void Prepare() { Controller.Timer.NewTurn(); ReportBuilder.NewTurn(); SortTiles(); SortActingPokemons(); foreach (PokemonProxy p in ActingPokemons) { p.AttachBehaviors(); } }
private PokemonProxy SendOutImplement(Tile tile) { var origin = tile.WillSendOutPokemonIndex; var pm = Controller.GetPlayer(tile).GetPokemon(origin); pm.Action = PokemonAction.Debuting; tile.Pokemon = pm; tile.WillSendOutPokemonIndex = Tile.NOPM_INDEX; pm.OnboardPokemon = new OnboardPokemon(pm.Pokemon, tile.X); STs.SendingOut(pm); Controller.ActingPokemons.Insert(0, pm); ReportBuilder.SendOut(pm, origin); return pm; }
private void Switch() { LOOP: foreach (var p in ActingPokemons) { if (p.Action == PokemonAction.WillSwitch) { p.Switch(); ReportBuilder.AddHorizontalLine(); goto LOOP; //ActingPokemons的顺序可能变化,重新查找第一个符合条件的精灵 } } }
private void Move() { LOOP: var pm = Board.GetCondition <PokemonProxy>(Cs.NextActingPokemon); if (pm == null || !pm.CanMove) { pm = null; foreach (var p in ActingPokemons) { if (p.CanMove && !p.OnboardPokemon.HasCondition(Cs.Quash)) { pm = p; break; } } } if (pm == null) { foreach (var p in ActingPokemons) { if (p.CanMove) { pm = p; break; } } } if (pm != null) { if (pm.OnboardPokemon.HasCondition(Cs.SkyDrop)) { pm.Action = PokemonAction.Done; } else { pm.Move(); if (Controller.CanContinue) { ReportBuilder.AddHorizontalLine(); } else { return; } } goto LOOP; } }
public bool Withdraw(PokemonProxy pm, string log, int arg1, bool canPursuit) { if (CanWithdraw(pm)) { if (log != null) pm.ShowLogPm(log, arg1); STs.Withdrawing(pm, canPursuit); if (pm.Tile != null) { ReportBuilder.Withdraw(pm); var ability = pm.Ability; pm.Action = PokemonAction.InBall; pm.Tile.Pokemon = null; pm.OnboardPokemon = pm.NullOnboardPokemon; Controller.ActingPokemons.Remove(pm); ATs.Withdrawn(pm, ability); return true; } } return false; }
private void NextTurn() { ATs.SlowStart(Controller); Board.ClearTurnCondition(); foreach (var f in Board.Fields) { f.ClearTurnCondition(); } foreach (var t in Tiles) { if (t.Pokemon != null) { t.Pokemon.OnboardPokemon.ClearTurnCondition(); if (t.Pokemon.AtkContext != null) { t.Pokemon.AtkContext.ClearTurnCondition(); } } t.ClearTurnCondition(); } ReportBuilder.Add(new GameEvents.EndTurn()); }