Ejemplo n.º 1
0
        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)));
                        }
                    }
                }
            }
        }