protected override Session ImplStartSession(Ballz game, GameSettings settings, bool remoteControlled, int localPlayerId)
{
var session = new Session(game, new World(new Terrain(settings.MapTexture)), settings)
{
UsePlayerTurns = this.UsePlayerTurns,
Terrain = new Terrain(settings.MapTexture)
};
FindSpawnPoints(settings.MapTexture, session.Terrain.Scale);
var spawnPoints = SelectSpawnpoints(settings.Teams.Select(t=>t.NumberOfBallz).Sum());
// Create players and Ballz
var currBallCreating = 0;
foreach (var team in settings.Teams)
{
var player = new Player
{
Id = team.Id,
Name = team.Name,
TeamName = team.Country,
IsLocal = !remoteControlled || localPlayerId == team.Id
};
session.Players.Add(player);
var ballCount = UsePlayerTurns ? team.NumberOfBallz : 1;
var ballNames = TeamNames.GetBallNames(team.Country, ballCount);
for (var i = 0; i < ballCount; ++i)
{
var playerBall = new Ball
{
Name = ballNames[i],
Position = spawnPoints[currBallCreating],
Velocity = new Vector2(0, 0),
IsAiming = true,
Player = player,
HoldingWeapon = "Bazooka",
IsStatic = false
};
player.OwnedBalls.Add(playerBall);
++currBallCreating;
session.World.AddEntity(playerBall);
BallControl controller;
if (team.ControlledByAI)
controller = new AIControl(game, session, playerBall);
else
controller = new UserControl(game, session, playerBall);
session.SessionLogic.BallControllers[playerBall] = controller;
}
player.ActiveBall = player.OwnedBalls.FirstOrDefault();
session.SessionLogic.ActiveControllers[player] = session.SessionLogic.BallControllers[player.ActiveBall];
}
return session;
}