internal void Render(LuaVariableDeclaratorSyntax node) { Write(node.LocalKeyword); WriteSpace(); node.Identifier.Render(this); node.Initializer?.Render(this); }
public override LuaVariableListDeclarationSyntax?GenerateGlobalDeclaration(string typeName, string name, LuaExpressionSyntax?value) { if (value is null) { return(null); } var declarator = new LuaVariableDeclaratorSyntax(name, value); declarator.IsLocalDeclaration = false; var result = new LuaVariableListDeclarationSyntax(); result.Variables.Add(declarator); return(result); }
internal void Render(LuaVariableDeclaratorSyntax node) { if (node.IsLocalDeclaration) { Write(node.LocalKeyword); WriteSpace(); } else if (node.Initializer?.Value is LuaFunctionExpressionSyntax functionExpression && functionExpression.RenderAsFunctionDefinition) { Write(functionExpression.FunctionKeyword); WriteSpace(); node.Identifier.Render(this); functionExpression.ParameterList.Render(this); functionExpression.Body.Render(this); return; } node.Identifier.Render(this); node.Initializer?.Render(this); }
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)); }
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); }
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); }