public override AbstractFractionController CreateController(Fraction f, Cannon cannon) { if (HasFinished) { if (PlayerWon) { return(new EndGameAutoPlayerController(this, cannon, f)); } else { return(new EndGameAutoComputerController(this, cannon, f)); } } switch (f.Type) { case FractionType.PlayerFraction: case FractionType.ComputerFraction: return(cannon.CreateKIController(this, f)); case FractionType.NeutralFraction: return(cannon.CreateNeutralController(this, f)); default: throw new ArgumentOutOfRangeException(); } }