public LuaLocalDeclarationStatementSyntax Transpile(IVariableDeclaratorSyntax declarator, bool isLocalDeclaration)
        {
            RegisterVariableType(declarator, isLocalDeclaration);

            var luaDeclarator = declarator switch
            {
                JassArrayDeclaratorSyntax arrayDeclarator => Transpile(arrayDeclarator),
                JassVariableDeclaratorSyntax variableDeclarator => Transpile(variableDeclarator),
            };

            var declaration = new LuaVariableListDeclarationSyntax();

            luaDeclarator.IsLocalDeclaration = isLocalDeclaration;
            declaration.Variables.Add(luaDeclarator);

            return(new LuaLocalDeclarationStatementSyntax(declaration));
        }
Exemplo n.º 2
0
        internal void Render(LuaVariableListDeclarationSyntax node)
        {
            bool isFirst = true;

            foreach (var variable in node.Variables)
            {
                if (isFirst)
                {
                    isFirst = false;
                }
                else
                {
                    WriteSpace();
                }
                variable.Render(this);
            }
        }
Exemplo n.º 3
0
        public LuaStatementSyntax Transpile(JassFunctionDeclarationSyntax functionDeclaration)
        {
            RegisterFunctionReturnType(functionDeclaration.FunctionDeclarator);

            var functionExpression = new LuaFunctionExpressionSyntax();

            functionExpression.AddParameters(Transpile(functionDeclaration.FunctionDeclarator.ParameterList));
            functionExpression.Body.Statements.AddRange(Transpile(functionDeclaration.Body));
            functionExpression.RenderAsFunctionDefinition = true;

            _localTypes.Clear();

            var luaFunctionDeclaration = new LuaVariableDeclaratorSyntax(Transpile(functionDeclaration.FunctionDeclarator.IdentifierName), functionExpression);

            luaFunctionDeclaration.IsLocalDeclaration = false;

            var declaration = new LuaVariableListDeclarationSyntax();

            declaration.Variables.Add(luaFunctionDeclaration);

            return(new LuaLocalDeclarationStatementSyntax(declaration));
        }
Exemplo n.º 4
0
        private LuaVariableListDeclarationSyntax GetMainFunctionSyntax(float left, float right, float top, float bottom, Tileset tileset, SoundEnvironment sound, params string[] initFunctions)
        {
            var localLeft = new LuaBinaryExpressionSyntax(
                new LuaFloatLiteralExpressionSyntax(left),
                LuaSyntaxNode.Tokens.Plus,
                new LuaInvocationExpressionSyntax("GetCameraMargin", "CAMERA_MARGIN_LEFT"));
            var localRight = new LuaBinaryExpressionSyntax(
                new LuaFloatLiteralExpressionSyntax(right),
                LuaSyntaxNode.Tokens.Sub,
                new LuaInvocationExpressionSyntax("GetCameraMargin", "CAMERA_MARGIN_RIGHT"));
            var localTop = new LuaBinaryExpressionSyntax(
                new LuaFloatLiteralExpressionSyntax(top),
                LuaSyntaxNode.Tokens.Sub,
                new LuaInvocationExpressionSyntax("GetCameraMargin", "CAMERA_MARGIN_TOP"));
            var localBottom = new LuaBinaryExpressionSyntax(
                new LuaFloatLiteralExpressionSyntax(bottom),
                LuaSyntaxNode.Tokens.Plus,
                new LuaInvocationExpressionSyntax("GetCameraMargin", "CAMERA_MARGIN_BOTTOM"));
            var locals = new[]
            {
                localLeft,
                localRight,
                localTop,
                localBottom,
            };

            var statements = new List <LuaStatementSyntax>
            {
                new LuaLocalDeclarationStatementSyntax(new LuaLocalVariablesStatementSyntax(
                                                           new[]
                {
                    new LuaSymbolNameSyntax(new LuaIdentifierLiteralExpressionSyntax("left")),
                    new LuaSymbolNameSyntax(new LuaIdentifierLiteralExpressionSyntax("right")),
                    new LuaSymbolNameSyntax(new LuaIdentifierLiteralExpressionSyntax("top")),
                    new LuaSymbolNameSyntax(new LuaIdentifierLiteralExpressionSyntax("bottom")),
                },
                                                           locals)),
                new LuaExpressionStatementSyntax(
                    new LuaInvocationExpressionSyntax(
                        "SetCameraBounds",
                        "left",
                        "bottom",
                        "right",
                        "top",
                        "left",
                        "top",
                        "right",
                        "bottom")),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                     "SetDayNightModels",
                                                     new LuaStringLiteralExpressionSyntax(LightEnvironmentProvider.GetTerrainLightEnvironmentModel(tileset)),
                                                     new LuaStringLiteralExpressionSyntax(LightEnvironmentProvider.GetUnitLightEnvironmentModel(tileset)))),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("NewSoundEnvironment", new LuaStringLiteralExpressionSyntax(SoundEnvironmentProvider.GetSoundEnvironment(sound)))),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("SetAmbientDaySound", new LuaStringLiteralExpressionSyntax(SoundEnvironmentProvider.GetAmbientDaySound(tileset)))),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("SetAmbientNightSound", new LuaStringLiteralExpressionSyntax(SoundEnvironmentProvider.GetAmbientNightSound(tileset)))),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                     "SetMapMusic",
                                                     new LuaStringLiteralExpressionSyntax("Music"),
                                                     LuaIdentifierLiteralExpressionSyntax.False,
                                                     LuaNumberLiteralExpressionSyntax.Zero)),
            };

            foreach (var initFunction in initFunctions)
            {
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(initFunction)));
            }

            var functionSyntax = new LuaFunctionExpressionSyntax();

            functionSyntax.AddStatements(statements);

            var mainFunctionDeclarator = new LuaVariableDeclaratorSyntax("main", functionSyntax);

            mainFunctionDeclarator.IsLocalDeclaration = false;

            var globalFunctionSyntax = new LuaVariableListDeclarationSyntax();

            globalFunctionSyntax.Variables.Add(mainFunctionDeclarator);

            return(globalFunctionSyntax);
        }
Exemplo n.º 5
0
        private LuaVariableListDeclarationSyntax GetConfigFunctionSyntax(string mapName, string mapDescription, string lobbyMusic, params PlayerSlot[] playerSlots)
        {
            var statements = new List <LuaStatementSyntax>
            {
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("SetMapName", new LuaStringLiteralExpressionSyntax(mapName))),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("SetMapDescription", new LuaStringLiteralExpressionSyntax(mapDescription))),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("SetPlayers", playerSlots.Length)),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("SetTeams", playerSlots.Length)),
                new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("SetGamePlacement", "MAP_PLACEMENT_TEAMS_TOGETHER")),
            };

            if (lobbyMusic != null)
            {
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax("PlayMusic", lobbyMusic)));
            }

            for (var i = 0; i < playerSlots.Length; i++)
            {
                var playerSlot = playerSlots[i];
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "DefineStartLocation",
                                                                    i,
                                                                    playerSlot.StartLocationX,
                                                                    playerSlot.StartLocationY)));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "SetPlayerStartLocation",
                                                                    new LuaInvocationExpressionSyntax("Player", i),
                                                                    i)));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "ForcePlayerStartLocation",
                                                                    new LuaInvocationExpressionSyntax("Player", i),
                                                                    i)));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "SetPlayerColor",
                                                                    new LuaInvocationExpressionSyntax("Player", i),
                                                                    new LuaInvocationExpressionSyntax("ConvertPlayerColor", i))));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "SetPlayerRacePreference",
                                                                    new LuaInvocationExpressionSyntax("Player", i),
                                                                    new LuaIdentifierLiteralExpressionSyntax(playerSlot.RacePreference))));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "SetPlayerRaceSelectable",
                                                                    new LuaInvocationExpressionSyntax("Player", i),
                                                                    LuaIdentifierLiteralExpressionSyntax.False)));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "SetPlayerController",
                                                                    new LuaInvocationExpressionSyntax("Player", i),
                                                                    new LuaIdentifierLiteralExpressionSyntax(playerSlot.Controller))));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "SetPlayerTeam",
                                                                    new LuaInvocationExpressionSyntax("Player", i),
                                                                    playerSlot.Team)));
                statements.Add(new LuaExpressionStatementSyntax(new LuaInvocationExpressionSyntax(
                                                                    "SetStartLocPrioCount",
                                                                    i,
                                                                    0)));
            }

            var functionSyntax = new LuaFunctionExpressionSyntax();

            functionSyntax.AddStatements(statements);

            var configFunctionDeclarator = new LuaVariableDeclaratorSyntax("config", functionSyntax);

            configFunctionDeclarator.IsLocalDeclaration = false;

            var globalFunctionSyntax = new LuaVariableListDeclarationSyntax();

            globalFunctionSyntax.Variables.Add(configFunctionDeclarator);

            return(globalFunctionSyntax);
        }