protected override Session ImplStartSession(Ballz game, MatchSettings settings, bool isMultiplayer, int localPlayerId)
{
var session = new Session(game, new World(new Terrain(settings.MapTexture)), settings)
{
UsePlayerTurns = this.UsePlayerTurns
};
FindSpecialMarkers(settings.MapTexture, session.Terrain.Scale);
var spawnPoints = SelectSpawnpoints(settings.Teams.Select(t => t.NumberOfBallz).Sum());
session.Terrain.GravityPoint = GravityPoint;
session.Terrain.HasGravityPoint = HasGravityPoint;
// 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 = !isMultiplayer || 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);
}