protected virtual JassFunctionDeclarationSyntax InitCustomPlayerSlots(Map map) { if (map is null) { throw new ArgumentNullException(nameof(map)); } var mapInfo = map.Info; var statements = new List <IStatementSyntax>(); var playerDataCount = mapInfo.Players.Count; for (var i = 0; i < playerDataCount; i++) { var playerData = mapInfo.Players[i]; statements.Add(JassEmptyStatementSyntax.Value); statements.Add(new JassCommentStatementSyntax($" Player {playerData.Id}")); statements.Add(SyntaxFactory.CallStatement( nameof(SetPlayerStartLocation), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(playerData.Id)), SyntaxFactory.LiteralExpression(i))); if (playerData.Flags.HasFlag(PlayerFlags.FixedStartPosition)) { statements.Add(SyntaxFactory.CallStatement( nameof(ForcePlayerStartLocation), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(playerData.Id)), SyntaxFactory.LiteralExpression(i))); } statements.Add(SyntaxFactory.CallStatement( nameof(SetPlayerColor), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(playerData.Id)), SyntaxFactory.InvocationExpression(nameof(ConvertPlayerColor), SyntaxFactory.LiteralExpression(playerData.Id)))); statements.Add(SyntaxFactory.CallStatement( nameof(SetPlayerRacePreference), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(playerData.Id)), SyntaxFactory.VariableReferenceExpression(RacePreferenceProvider.GetRacePreferenceString(playerData.Race)))); statements.Add(SyntaxFactory.CallStatement( nameof(SetPlayerRaceSelectable), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(playerData.Id)), SyntaxFactory.LiteralExpression(playerData.Flags.HasFlag(PlayerFlags.RaceSelectable) || !mapInfo.MapFlags.HasFlag(MapFlags.FixedPlayerSettingsForCustomForces)))); statements.Add(SyntaxFactory.CallStatement( nameof(SetPlayerController), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(playerData.Id)), SyntaxFactory.VariableReferenceExpression(PlayerControllerProvider.GetPlayerControllerString(playerData.Controller)))); if (playerData.Controller == PlayerController.Rescuable) { for (var j = 0; j < playerDataCount; j++) { var otherPlayerData = mapInfo.Players[j]; if (otherPlayerData.Controller == PlayerController.User) { statements.Add(SyntaxFactory.CallStatement( nameof(SetPlayerAlliance), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(playerData.Id)), SyntaxFactory.InvocationExpression(nameof(Player), SyntaxFactory.LiteralExpression(otherPlayerData.Id)), SyntaxFactory.VariableReferenceExpression(nameof(ALLIANCE_RESCUABLE)), SyntaxFactory.LiteralExpression(true))); } } } } statements.Add(JassEmptyStatementSyntax.Value); return(SyntaxFactory.FunctionDeclaration(SyntaxFactory.FunctionDeclarator(nameof(InitCustomPlayerSlots)), statements)); }
private static IEnumerable <TStatementSyntax> GetInitCustomPlayerSlotsHelperFunctionStatements(TBuilder builder) { var mapInfo = builder.Data.MapInfo; var playerDataCount = mapInfo.PlayerDataCount; for (var i = 0; i < playerDataCount; i++) { var playerData = mapInfo.GetPlayerData(i); yield return(builder.GenerateInvocationStatement( nameof(War3Api.Common.SetPlayerStartLocation), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)), builder.GenerateIntegerLiteralExpression(i))); if (playerData.FixedStartPosition) { yield return(builder.GenerateInvocationStatement( nameof(War3Api.Common.ForcePlayerStartLocation), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)), builder.GenerateIntegerLiteralExpression(i))); } yield return(builder.GenerateInvocationStatement( nameof(War3Api.Common.SetPlayerColor), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)), builder.GenerateInvocationExpression( nameof(War3Api.Common.ConvertPlayerColor), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)))); yield return(builder.GenerateInvocationStatement( nameof(War3Api.Common.SetPlayerRacePreference), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)), builder.GenerateVariableExpression(RacePreferenceProvider.GetRacePreferenceString(playerData.PlayerRace)))); yield return(builder.GenerateInvocationStatement( nameof(War3Api.Common.SetPlayerRaceSelectable), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)), builder.GenerateBooleanLiteralExpression(playerData.IsRaceSelectable || !mapInfo.MapFlags.HasFlag(MapFlags.FixedPlayerSettingsForCustomForces)))); yield return(builder.GenerateInvocationStatement( nameof(War3Api.Common.SetPlayerController), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)), builder.GenerateVariableExpression(PlayerControllerProvider.GetPlayerControllerString(playerData.PlayerController)))); if (playerData.PlayerController == PlayerController.Rescuable) { for (var j = 0; j < playerDataCount; j++) { var otherPlayerData = mapInfo.GetPlayerData(j); if (otherPlayerData.PlayerController == PlayerController.User) { yield return(builder.GenerateInvocationStatement( nameof(War3Api.Common.SetPlayerAlliance), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(playerData.PlayerNumber)), builder.GenerateInvocationExpression( nameof(War3Api.Common.Player), builder.GenerateIntegerLiteralExpression(otherPlayerData.PlayerNumber)), builder.GenerateVariableExpression(nameof(War3Api.Common.ALLIANCE_RESCUABLE)), builder.GenerateBooleanLiteralExpression(true))); } } } } }