StringInstructionsExtension::StringInstructionsExtension() { gd::BuiltinExtensionsImplementer::ImplementsStringInstructionsExtension(*this); SetExtensionInformation("BuiltinStringInstructions", _("Text manipulation"), _("Built-in extension providing expressions related to strings."), "Florian Rival", "Open source (MIT License)"); GetAllStrExpressions()["NewLine"] .SetFunctionName("gdjs.evtTools.string.newLine"); GetAllStrExpressions()["SubStr"] .SetFunctionName("gdjs.evtTools.string.subStr"); GetAllStrExpressions()["StrAt"] .SetFunctionName("gdjs.evtTools.string.strAt"); GetAllExpressions()["StrLength"] .SetFunctionName("gdjs.evtTools.string.strLen"); GetAllExpressions()["StrFind"] .SetFunctionName("gdjs.evtTools.string.strFind"); GetAllExpressions()["StrRFind"] .SetFunctionName("gdjs.evtTools.string.strRFind"); GetAllExpressions()["StrFindFrom"] .SetFunctionName("gdjs.evtTools.string.strFindFrom"); GetAllExpressions()["StrRFindFrom"] .SetFunctionName("gdjs.evtTools.string.strRFindFrom"); StripUnimplementedInstructionsAndExpressions(); }
VariablesExtension::VariablesExtension() { gd::BuiltinExtensionsImplementer::ImplementsVariablesExtension(*this); #if defined(GD_IDE_ONLY) GetAllConditions()["VarScene"].SetFunctionName("ReturnVariable").SetManipulatedType("number").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["VarSceneTxt"].SetFunctionName("ReturnVariable").SetManipulatedType("string").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["VariableChildExists"].SetFunctionName("VariableChildExists").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["GlobalVariableChildExists"].SetFunctionName("VariableChildExists").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["VarSceneDef"].SetFunctionName("VariableExists").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["VarGlobalDef"].SetFunctionName("VariableExists").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["VarGlobal"].SetFunctionName("ReturnVariable").SetManipulatedType("number").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["VarGlobalTxt"].SetFunctionName("ReturnVariable").SetManipulatedType("string").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["ModVarScene"].SetFunctionName("ReturnVariable").SetManipulatedType("number").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["ModVarSceneTxt"].SetFunctionName("ReturnVariable").SetManipulatedType("string").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["ModVarGlobal"].SetFunctionName("ReturnVariable").SetManipulatedType("number").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["ModVarGlobalTxt"].SetFunctionName("ReturnVariable").SetManipulatedType("string").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["VariableRemoveChild"].SetFunctionName("VariableRemoveChild").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["GlobalVariableRemoveChild"].SetFunctionName("VariableRemoveChild").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllExpressions()["Variable"].SetFunctionName("GetVariableValue").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllStrExpressions()["VariableString"].SetFunctionName("GetVariableString").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllExpressions()["GlobalVariable"].SetFunctionName("GetVariableValue").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllStrExpressions()["GlobalVariableString"].SetFunctionName("GetVariableString").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); #endif }
StringInstructionsExtension::StringInstructionsExtension() { gd::BuiltinExtensionsImplementer::ImplementsStringInstructionsExtension(*this); #if defined(GD_IDE_ONLY) GetAllStrExpressions()["NewLine"].SetFunctionName("GDpriv::StringTools::NewLine").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); GetAllStrExpressions()["SubStr"].SetFunctionName("GDpriv::StringTools::SubStr").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); GetAllStrExpressions()["StrAt"].SetFunctionName("GDpriv::StringTools::StrAt").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); GetAllExpressions()["StrLength"].SetFunctionName("GDpriv::StringTools::StrLen").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); GetAllExpressions()["StrFind"].SetFunctionName("GDpriv::StringTools::StrFind").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); GetAllExpressions()["StrRFind"].SetFunctionName("GDpriv::StringTools::StrRFind").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); GetAllExpressions()["StrFindFrom"].SetFunctionName("GDpriv::StringTools::StrFindFrom").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); GetAllExpressions()["StrRFindFrom"].SetFunctionName("GDpriv::StringTools::StrRFindFrom").SetIncludeFile("GDCpp/BuiltinExtensions/StringTools.h"); #endif }
WindowExtension::WindowExtension() { gd::BuiltinExtensionsImplementer::ImplementsWindowExtension(*this); GetAllActions()["SetFullScreen"].SetFunctionName( "gdjs.evtTools.window.setFullScreen"); GetAllActions()["SetWindowMargins"].SetFunctionName( "gdjs.evtTools.window.setMargins"); GetAllActions()["SetWindowTitle"].SetFunctionName( "gdjs.evtTools.window.setWindowTitle"); GetAllActions()["SetWindowSize"].SetFunctionName( "gdjs.evtTools.window.setCanvasSize"); GetAllStrExpressions()["WindowTitle"].SetFunctionName( "gdjs.evtTools.window.getWindowTitle"); GetAllExpressions()["SceneWindowWidth"].SetFunctionName( "gdjs.evtTools.window.getCanvasWidth"); GetAllExpressions()["SceneWindowHeight"].SetFunctionName( "gdjs.evtTools.window.getCanvasHeight"); GetAllExpressions()["ScreenWidth"].SetFunctionName( "gdjs.evtTools.window.getWindowWidth"); GetAllExpressions()["ScreenHeight"].SetFunctionName( "gdjs.evtTools.window.getWindowHeight"); StripUnimplementedInstructionsAndExpressions(); }
CommonConversionsExtension::CommonConversionsExtension() { gd::BuiltinExtensionsImplementer::ImplementsCommonConversionsExtension(*this); SetExtensionInformation("BuiltinCommonConversions", _("Standard Conversions"), _("Built-in extension providing standard conversions expressions."), "Florian Rival", "Open source (MIT License)"); GetAllExpressions()["ToNumber"].SetFunctionName("gdjs.evtTools.common.toNumber").SetIncludeFile("commontools.js"); GetAllStrExpressions()["ToString"].SetFunctionName("gdjs.evtTools.common.toString").SetIncludeFile("commontools.js"); GetAllStrExpressions()["LargeNumberToString"].SetFunctionName("gdjs.evtTools.common.toString").SetIncludeFile("commontools.js"); GetAllExpressions()["ToRad"].SetFunctionName("gdjs.toRad"); GetAllExpressions()["ToDeg"].SetFunctionName("gdjs.toDegrees"); }
SceneExtension::SceneExtension() { gd::BuiltinExtensionsImplementer::ImplementsSceneExtension(*this); #if defined(GD_IDE_ONLY) GetAllExpressions()["Random"].SetFunctionName("GDpriv::CommonInstructions::Random").SetIncludeFile("GDCpp/BuiltinExtensions/CommonInstructionsTools.h"); GetAllStrExpressions()["CurrentSceneName"].SetFunctionName("GetSceneName").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllConditions()["DepartScene"].SetFunctionName("SceneJustBegins").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["Scene"].SetFunctionName("ChangeScene").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["Quit"].SetFunctionName("StopGame").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["SceneBackground"].SetFunctionName("ChangeSceneBackground").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["DisableInputWhenFocusIsLost"].SetFunctionName("DisableInputWhenFocusIsLost").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); { class CodeGenerator : public gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator { virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string value1Code; { gd::CallbacksForGeneratingExpressionCode callbacks(value1Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[0].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || value1Code.empty()) value1Code = "0"; } std::string value2Code; { gd::CallbacksForGeneratingExpressionCode callbacks(value2Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || value2Code.empty()) value2Code = "0"; } if ( instruction.GetParameters()[1].GetPlainString() == "=" || instruction.GetParameters()[1].GetPlainString().empty() ) return "conditionTrue = ("+value1Code+" == "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == ">") return "conditionTrue = ("+value1Code+" > "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "<") return "conditionTrue = ("+value1Code+" < "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "<=") return "conditionTrue = ("+value1Code+" <= "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == ">=") return "conditionTrue = ("+value1Code+" >= "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "!=") return "conditionTrue = ("+value1Code+" != "+value2Code+");\n"; return ""; }; }; gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator * codeGenerator = new CodeGenerator; //Need for code to compile GetAllConditions()["Egal"].codeExtraInformation.SetCustomCodeGenerator(std::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>(codeGenerator)); } #endif }
CommonConversionsExtension::CommonConversionsExtension() { gd::BuiltinExtensionsImplementer::ImplementsCommonConversionsExtension(*this); SetExtensionInformation("BuiltinCommonConversions", _("Standard Conversions"), _("Built-in extension providing standard conversions expressions."), "Florian Rival", "Open source (LGPL)"); GetAllExpressions()["ToNumber"].codeExtraInformation .SetFunctionName("gdjs.evtTools.common.toNumber").SetIncludeFile("commontools.js"); GetAllStrExpressions()["ToString"].codeExtraInformation .SetFunctionName("gdjs.evtTools.common.toString").SetIncludeFile("commontools.js"); GetAllStrExpressions()["LargeNumberToString"].codeExtraInformation //TODO: Check if scientific notation is added or not by toString. .SetFunctionName("gdjs.evtTools.common.toString").SetIncludeFile("commontools.js"); GetAllExpressions()["ToRad"].codeExtraInformation .SetFunctionName("gdjs.toRad"); GetAllExpressions()["ToDeg"].codeExtraInformation .SetFunctionName("gdjs.toDegrees"); }
CommonConversionsExtension::CommonConversionsExtension() { gd::BuiltinExtensionsImplementer::ImplementsCommonConversionsExtension(*this); #if defined(GD_IDE_ONLY) GetAllExpressions()["ToNumber"] .SetFunctionName("GDpriv::CommonInstructions::ToDouble") .SetIncludeFile("GDCpp/Extensions/Builtin/CommonInstructionsTools.h"); GetAllStrExpressions()["ToString"] .SetFunctionName("GDpriv::CommonInstructions::ToString") .SetIncludeFile("GDCpp/Extensions/Builtin/CommonInstructionsTools.h"); GetAllStrExpressions()["LargeNumberToString"] .SetFunctionName("GDpriv::CommonInstructions::LargeNumberToString") .SetIncludeFile("GDCpp/Extensions/Builtin/CommonInstructionsTools.h"); GetAllExpressions()["ToRad"] .SetFunctionName("GDpriv::CommonInstructions::ToRad") .SetIncludeFile("GDCpp/Extensions/Builtin/CommonInstructionsTools.h"); GetAllExpressions()["ToDeg"] .SetFunctionName("GDpriv::CommonInstructions::ToDeg") .SetIncludeFile("GDCpp/Extensions/Builtin/CommonInstructionsTools.h"); #endif }
KeyboardExtension::KeyboardExtension() { gd::BuiltinExtensionsImplementer::ImplementsKeyboardExtension(*this); #if defined(GD_IDE_ONLY) GetAllConditions()["KeyPressed"].SetFunctionName("IsKeyPressed").SetIncludeFile("GDCpp/BuiltinExtensions/KeyboardTools.h"); GetAllConditions()["KeyReleased"].SetFunctionName("WasKeyReleased").SetIncludeFile("GDCpp/BuiltinExtensions/KeyboardTools.h"); GetAllConditions()["KeyFromTextPressed"].SetFunctionName("IsKeyPressed").SetIncludeFile("GDCpp/BuiltinExtensions/KeyboardTools.h"); GetAllConditions()["KeyFromTextReleased"].SetFunctionName("WasKeyReleased").SetIncludeFile("GDCpp/BuiltinExtensions/KeyboardTools.h"); GetAllConditions()["AnyKeyPressed"].SetFunctionName("AnyKeyIsPressed").SetIncludeFile("GDCpp/BuiltinExtensions/KeyboardTools.h"); GetAllStrExpressions()["LastPressedKey"].SetFunctionName("LastPressedKey").SetIncludeFile("GDCpp/BuiltinExtensions/KeyboardTools.h"); #endif }
NetworkExtension::NetworkExtension() { SetExtensionInformation("BuiltinNetwork", _("Basic internet features"), _("Built-in extension providing network features."), "Florian Rival", "Open source ( LGPL )"); CloneExtension("Game Develop C++ platform", "BuiltinNetwork"); GetAllActions()["SendRequest"].codeExtraInformation .SetFunctionName("gdjs.evtTools.network.sendHttpRequest").SetIncludeFile("networktools.js"); GetAllActions()["JSONToVariableStructure"].codeExtraInformation .SetFunctionName("gdjs.evtTools.network.jsonToVariableStructure").SetIncludeFile("networktools.js"); GetAllStrExpressions()["ToJSON"].codeExtraInformation .SetFunctionName("gdjs.evtTools.network.variableStructureToJSON").SetIncludeFile("networktools.js"); StripUnimplementedInstructionsAndExpressions(); //Unimplemented things are listed here: /* AddAction("EnvoiDataNet", _("Send datas to a website"), _("Send datas to a specified web site.\nYou need to set up a .php page on your web site so as to receive this datas.\nEnter here a password, and enter the same in the configuration of your .php page.\nRead the help file to get more informations."), _("Send to _PARAM0_ the following datas : _PARAM2_, _PARAM3_,_PARAM4_,_PARAM5_,_PARAM6_,_PARAM7_"), _("Network"), "res/actions/net24.png", "res/actions/net.png") .AddParameter("string", _(".php page URL ( Don't forget the protocol http:// ) "), "",false) .AddParameter("password", _("Password"), "",false) .AddParameter("string", _("Data 1"), "",false) .AddParameter("string", _("Data 2"), "",true) .AddParameter("string", _("Data 3"), "",true) .AddParameter("string", _("Data 4"), "",true) .AddParameter("string", _("Data 5"), "",true) .AddParameter("string", _("Data 6"), "",true) .codeExtraInformation.SetFunctionName("SendDataToPhpWebPage").SetIncludeFile("GDCpp/BuiltinExtensions/NetworkTools.h"); AddAction("DownloadFile", _("Download a file"), _("Download a file from a web site"), _("Download file _PARAM1_ from _PARAM0_ under the name of _PARAM2_"), _("Network"), "res/actions/net24.png", "res/actions/net.png") .AddParameter("string", _("Host ( For example : http://www.website.com )"), "",false) .AddParameter("string", _("Path to file ( For example : /folder/file.txt )"), "",false) .AddParameter("string", _("Save as"), "",false) .codeExtraInformation.SetFunctionName("DownloadFile").SetIncludeFile("GDCpp/BuiltinExtensions/NetworkTools.h"); */ }
WindowExtension::WindowExtension() { gd::BuiltinExtensionsImplementer::ImplementsWindowExtension(*this); #if defined(GD_IDE_ONLY) GetAllActions()["EcrireTexte"].codeExtraInformation.SetFunctionName("DisplayLegacyTextOnScene").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["SetFullScreen"].codeExtraInformation.SetFunctionName("SetFullScreen").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["SetWindowSize"].codeExtraInformation.SetFunctionName("SetWindowSize").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["SetWindowIcon"].codeExtraInformation.SetFunctionName("SetWindowIcon").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllActions()["SetWindowTitle"].codeExtraInformation.SetFunctionName("SetWindowTitle").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllExpressions()["SceneWindowWidth"].codeExtraInformation.SetFunctionName("GetSceneWindowWidth").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllExpressions()["SceneWindowHeight"].codeExtraInformation.SetFunctionName("GetSceneWindowHeight").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllExpressions()["ScreenWidth"].codeExtraInformation.SetFunctionName("GetScreenWidth").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllExpressions()["ScreenHeight"].codeExtraInformation.SetFunctionName("GetScreenHeight").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllExpressions()["ColorDepth"].codeExtraInformation.SetFunctionName("GetColorDepth").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); GetAllStrExpressions()["WindowTitle"].codeExtraInformation.SetFunctionName("GetWindowTitle").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); #endif }
WindowExtension::WindowExtension() { gd::BuiltinExtensionsImplementer::ImplementsWindowExtension(*this); SetExtensionInformation("BuiltinWindow", _("Window features"), _("Built-in extension allowing to manipulate the game's window"), "Florian Rival", "Open source (MIT License)"); GetAllActions()["SetFullScreen"].SetFunctionName("gdjs.evtTools.window.setFullScreen"); GetAllActions()["SetWindowMargins"].SetFunctionName("gdjs.evtTools.window.setMargins"); GetAllActions()["SetWindowTitle"].SetFunctionName("gdjs.evtTools.window.setWindowTitle"); GetAllActions()["SetWindowSize"].SetFunctionName("gdjs.evtTools.window.setCanvasSize"); GetAllStrExpressions()["WindowTitle"].SetFunctionName("gdjs.evtTools.window.getWindowTitle"); GetAllExpressions()["SceneWindowWidth"].SetFunctionName("gdjs.evtTools.window.getCanvasWidth"); GetAllExpressions()["SceneWindowHeight"].SetFunctionName("gdjs.evtTools.window.getCanvasHeight"); GetAllExpressions()["ScreenWidth"].SetFunctionName("gdjs.evtTools.window.getWindowWidth"); GetAllExpressions()["ScreenHeight"].SetFunctionName("gdjs.evtTools.window.getWindowHeight"); StripUnimplementedInstructionsAndExpressions(); }
void PlatformExtension::StripUnimplementedInstructionsAndExpressions() { for (std::map<gd::String, gd::InstructionMetadata >::iterator it = GetAllActions().begin();it != GetAllActions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { GetAllActions().erase(it++); } else ++it; } for (std::map<gd::String, gd::InstructionMetadata >::iterator it = GetAllConditions().begin();it != GetAllConditions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { GetAllConditions().erase(it++); } else ++it; } for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = GetAllExpressions().begin();it != GetAllExpressions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { GetAllExpressions().erase(it++); } else ++it; } for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = GetAllStrExpressions().begin();it != GetAllStrExpressions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { GetAllStrExpressions().erase(it++); } else ++it; } for(std::map<gd::String, gd::ObjectMetadata >::iterator objIt = objectsInfos.begin();objIt!=objectsInfos.end();++objIt) { gd::ObjectMetadata & obj = objIt->second; for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin();it != obj.actionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.actionsInfos.erase(it++); } else ++it; } for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin();it != obj.conditionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.conditionsInfos.erase(it++); } else ++it; } for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin();it != obj.expressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.expressionsInfos.erase(it++); } else ++it; } for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin();it != obj.strExpressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.strExpressionsInfos.erase(it++); } else ++it; } } for(std::map<gd::String, gd::BehaviorMetadata >::iterator objIt = behaviorsInfo.begin();objIt!=behaviorsInfo.end();++objIt) { gd::BehaviorMetadata & obj = objIt->second; for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin();it != obj.actionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.actionsInfos.erase(it++); } else ++it; } for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin();it != obj.conditionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.conditionsInfos.erase(it++); } else ++it; } for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin();it != obj.expressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.expressionsInfos.erase(it++); } else ++it; } for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin();it != obj.strExpressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && !it->second.codeExtraInformation.HasCustomCodeGenerator()) { obj.strExpressionsInfos.erase(it++); } else ++it; } } for(std::map<gd::String, gd::EventMetadata >::iterator it = eventsInfos.begin();it!=eventsInfos.end();) { if (!it->second.HasCustomCodeGenerator()) eventsInfos.erase(it++); else ++it; } }
void PlatformExtension::CloneExtension(const gd::String & platformName, const gd::String & extensionName, bool stripFunctionsNameAndCodeGeneration) { gd::Platform* platform = gd::PlatformManager::Get()->GetPlatform(platformName); if ( !platform ) { std::cout << "Unable to clone extension \""<< extensionName << "\" from " << platformName << ": This platform doesn't exist."; return; } std::shared_ptr<gd::PlatformExtension> extension = platform->GetExtension(extensionName); if ( !extension ) { std::cout << "Unable to clone extension \""<< extensionName << "\" from " << platformName << ": This extension doesn't exist."; return; } *this = *extension; if ( stripFunctionsNameAndCodeGeneration ) { for (std::map<gd::String, gd::InstructionMetadata >::iterator it = GetAllActions().begin();it != GetAllActions().end();++it) it->second.SetFunctionName("").SetGetter("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::InstructionMetadata >::iterator it = GetAllConditions().begin();it != GetAllConditions().end();++it) it->second.SetFunctionName("").SetGetter("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = GetAllExpressions().begin();it != GetAllExpressions().end();++it) it->second.SetFunctionName("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = GetAllStrExpressions().begin();it != GetAllStrExpressions().end();++it) it->second.SetFunctionName("").RemoveCustomCodeGenerator(); for(std::map<gd::String, gd::ObjectMetadata >::iterator objIt = objectsInfos.begin();objIt!=objectsInfos.end();++objIt) { gd::ObjectMetadata & obj = objIt->second; for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin();it != obj.actionsInfos.end();++it) it->second.SetFunctionName("").SetGetter("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin();it != obj.conditionsInfos.end();++it) it->second.SetFunctionName("").SetGetter("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin();it != obj.expressionsInfos.end();++it) it->second.SetFunctionName("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin();it != obj.strExpressionsInfos.end();++it) it->second.SetFunctionName("").RemoveCustomCodeGenerator(); } for(std::map<gd::String, gd::BehaviorMetadata >::iterator objIt = behaviorsInfo.begin();objIt!=behaviorsInfo.end();++objIt) { gd::BehaviorMetadata & obj = objIt->second; for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin();it != obj.actionsInfos.end();++it) it->second.SetFunctionName("").SetGetter("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin();it != obj.conditionsInfos.end();++it) it->second.SetFunctionName("").SetGetter("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin();it != obj.expressionsInfos.end();++it) it->second.SetFunctionName("").RemoveCustomCodeGenerator(); for (std::map<gd::String, gd::ExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin();it != obj.strExpressionsInfos.end();++it) it->second.SetFunctionName("").RemoveCustomCodeGenerator(); } for(std::map<gd::String, gd::EventMetadata >::iterator it = eventsInfos.begin();it!=eventsInfos.end();++it) it->second.ClearCodeGenerationAndPreprocessing(); } }
void PlatformExtension::StripUnimplementedInstructionsAndExpressions() { for (std::map<std::string, gd::InstructionMetadata >::iterator it = GetAllActions().begin(); it != GetAllActions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()) { GetAllActions().erase(it++); } else ++it; } for (std::map<std::string, gd::InstructionMetadata >::iterator it = GetAllConditions().begin(); it != GetAllConditions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()) { GetAllConditions().erase(it++); } else ++it; } for (std::map<std::string, gd::ExpressionMetadata >::iterator it = GetAllExpressions().begin(); it != GetAllExpressions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()) { GetAllExpressions().erase(it++); } else ++it; } for (std::map<std::string, gd::StrExpressionMetadata >::iterator it = GetAllStrExpressions().begin(); it != GetAllStrExpressions().end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()) { GetAllStrExpressions().erase(it++); } else ++it; } for(std::map<std::string, gd::ObjectMetadata >::iterator objIt = objectsInfos.begin(); objIt!=objectsInfos.end(); ++objIt) { gd::ObjectMetadata & obj = objIt->second; for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin(); it != obj.actionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()) { obj.actionsInfos.erase(it++); } else ++it; } for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin(); it != obj.conditionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()) { obj.conditionsInfos.erase(it++); } else ++it; } for (std::map<std::string, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin(); it != obj.expressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()) { obj.expressionsInfos.erase(it++); } else ++it; } for (std::map<std::string, gd::StrExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin(); it != obj.strExpressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()) { obj.strExpressionsInfos.erase(it++); } else ++it; } } for(std::map<std::string, gd::AutomatismMetadata >::iterator objIt = automatismsInfo.begin(); objIt!=automatismsInfo.end(); ++objIt) { gd::AutomatismMetadata & obj = objIt->second; for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin(); it != obj.actionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()) { obj.actionsInfos.erase(it++); } else ++it; } for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin(); it != obj.conditionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()) { obj.conditionsInfos.erase(it++); } else ++it; } for (std::map<std::string, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin(); it != obj.expressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()) { obj.expressionsInfos.erase(it++); } else ++it; } for (std::map<std::string, gd::StrExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin(); it != obj.strExpressionsInfos.end();) { if ( it->second.codeExtraInformation.functionCallName.empty() && it->second.codeExtraInformation.optionalCustomCodeGenerator == boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()) { obj.strExpressionsInfos.erase(it++); } else ++it; } } for(std::map<std::string, gd::EventMetadata >::iterator it = eventsInfos.begin(); it!=eventsInfos.end();) { if ( it->second.codeGeneration == boost::shared_ptr<gd::EventMetadata::CodeGenerator>()) eventsInfos.erase(it++); else ++it; } }
void PlatformExtension::CloneExtension(const std::string & platformName, const std::string & extensionName, bool stripFunctionsNameAndCodeGeneration) { gd::Platform* platform = gd::PlatformManager::Get()->GetPlatform(platformName); if ( !platform ) { std::cout << "Unable to clone extension \""<< extensionName << "\" from " << platformName << ": This platform doesn't exist."; return; } boost::shared_ptr<gd::PlatformExtension> extension = platform->GetExtension(extensionName); if ( !extension ) { std::cout << "Unable to clone extension \""<< extensionName << "\" from " << platformName << ": This extension doesn't exist."; return; } *this = *extension; if ( stripFunctionsNameAndCodeGeneration ) { for (std::map<std::string, gd::InstructionMetadata >::iterator it = GetAllActions().begin(); it != GetAllActions().end(); ++it) it->second.codeExtraInformation.SetFunctionName("").SetAssociatedGetter("") .SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::InstructionMetadata >::iterator it = GetAllConditions().begin(); it != GetAllConditions().end(); ++it) it->second.codeExtraInformation.SetFunctionName("").SetAssociatedGetter("") .SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::ExpressionMetadata >::iterator it = GetAllExpressions().begin(); it != GetAllExpressions().end(); ++it) it->second.codeExtraInformation.SetFunctionName("") .SetCustomCodeGenerator(boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::StrExpressionMetadata >::iterator it = GetAllStrExpressions().begin(); it != GetAllStrExpressions().end(); ++it) it->second.codeExtraInformation.SetFunctionName("") .SetCustomCodeGenerator(boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()); for(std::map<std::string, gd::ObjectMetadata >::iterator objIt = objectsInfos.begin(); objIt!=objectsInfos.end(); ++objIt) { gd::ObjectMetadata & obj = objIt->second; for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin(); it != obj.actionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("").SetAssociatedGetter("") .SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin(); it != obj.conditionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("").SetAssociatedGetter("") .SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin(); it != obj.expressionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("") .SetCustomCodeGenerator(boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::StrExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin(); it != obj.strExpressionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("") .SetCustomCodeGenerator(boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()); } for(std::map<std::string, gd::AutomatismMetadata >::iterator objIt = automatismsInfo.begin(); objIt!=automatismsInfo.end(); ++objIt) { gd::AutomatismMetadata & obj = objIt->second; for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.actionsInfos.begin(); it != obj.actionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("").SetAssociatedGetter("") .SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::InstructionMetadata >::iterator it = obj.conditionsInfos.begin(); it != obj.conditionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("").SetAssociatedGetter("") .SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::ExpressionMetadata >::iterator it = obj.expressionsInfos.begin(); it != obj.expressionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("") .SetCustomCodeGenerator(boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()); for (std::map<std::string, gd::StrExpressionMetadata >::iterator it = obj.strExpressionsInfos.begin(); it != obj.strExpressionsInfos.end(); ++it) it->second.codeExtraInformation.SetFunctionName("") .SetCustomCodeGenerator(boost::shared_ptr<gd::ExpressionCodeGenerationInformation::CustomCodeGenerator>()); } for(std::map<std::string, gd::EventMetadata >::iterator it = eventsInfos.begin(); it!=eventsInfos.end(); ++it) it->second.codeGeneration = boost::shared_ptr<gd::EventMetadata::CodeGenerator>(); } }
VariablesExtension::VariablesExtension() { gd::BuiltinExtensionsImplementer::ImplementsVariablesExtension(*this); SetExtensionInformation("BuiltinVariables", _("Variable features"), _("Built-in extension allowing to manipulate variables"), "Florian Rival", "Open source (LGPL)"); GetAllConditions()["VarScene"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableNumber"); GetAllConditions()["VarSceneTxt"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableString"); GetAllConditions()["VarGlobal"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableNumber"); GetAllConditions()["VarGlobalTxt"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableString"); GetAllExpressions()["Variable"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableNumber"); GetAllStrExpressions()["VariableString"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableString"); GetAllExpressions()["GlobalVariable"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableNumber"); GetAllStrExpressions()["GlobalVariableString"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.getVariableString"); GetAllConditions()["VarSceneDef"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.sceneVariableExists"); GetAllConditions()["VarGlobalDef"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.globalVariableExists"); GetAllConditions()["VariableChildExists"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.variableChildExists"); GetAllConditions()["GlobalVariableChildExists"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.variableChildExists"); GetAllActions()["VariableRemoveChild"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.variableRemoveChild"); GetAllActions()["GlobalVariableRemoveChild"].codeExtraInformation.SetFunctionName("gdjs.evtTools.common.variableRemoveChild"); { class CodeGenerator : public gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator { virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string expressionCode; { gd::CallbacksForGeneratingExpressionCode callbacks(expressionCode, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || expressionCode.empty()) expressionCode = "0"; } std::string varGetter; { VariableCodeGenerationCallbacks callbacks(varGetter, codeGenerator, context, VariableCodeGenerationCallbacks::LAYOUT_VARIABLE); gd::VariableParser parser(instruction.GetParameters()[0].GetPlainString()); if ( !parser.Parse(callbacks) ) varGetter = "runtimeScene.getVariables().get(\"\")"; } std::string op = instruction.GetParameters()[1].GetPlainString(); if ( op == "=" ) return varGetter+".setNumber("+expressionCode+");\n"; else if ( op == "+" ) return varGetter+".add("+expressionCode+");\n"; else if ( op == "-" ) return varGetter+".sub("+expressionCode+");\n"; else if ( op == "*" ) return varGetter+".mul("+expressionCode+");\n"; else if ( op == "/" ) return varGetter+".div("+expressionCode+");\n"; return ""; }; }; gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator * codeGen = new CodeGenerator; GetAllActions()["ModVarScene"].codeExtraInformation.SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>(codeGen)); } { class CodeGenerator : public gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator { virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string expressionCode; { gd::CallbacksForGeneratingExpressionCode callbacks(expressionCode, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseStringExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || expressionCode.empty()) expressionCode = "\"\""; } std::string varGetter; { VariableCodeGenerationCallbacks callbacks(varGetter, codeGenerator, context, VariableCodeGenerationCallbacks::LAYOUT_VARIABLE); gd::VariableParser parser(instruction.GetParameters()[0].GetPlainString()); if ( !parser.Parse(callbacks) ) varGetter = "runtimeScene.getVariables().get(\"\")"; } std::string op = instruction.GetParameters()[1].GetPlainString(); if ( op == "=" ) return varGetter+".setString("+expressionCode+");\n"; else if ( op == "+" ) return varGetter+".concatenate("+expressionCode+");\n"; return ""; }; }; gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator * codeGen = new CodeGenerator; GetAllActions()["ModVarSceneTxt"].codeExtraInformation.SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>(codeGen)); } { class CodeGenerator : public gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator { virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string expressionCode; { gd::CallbacksForGeneratingExpressionCode callbacks(expressionCode, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || expressionCode.empty()) expressionCode = "0"; } std::string varGetter; { VariableCodeGenerationCallbacks callbacks(varGetter, codeGenerator, context, VariableCodeGenerationCallbacks::PROJECT_VARIABLE); gd::VariableParser parser(instruction.GetParameters()[0].GetPlainString()); if ( !parser.Parse(callbacks) ) varGetter = "runtimeScene.getVariables().get(\"\")"; } std::string op = instruction.GetParameters()[1].GetPlainString(); if ( op == "=" ) return varGetter+".setNumber("+expressionCode+");\n"; else if ( op == "+" ) return varGetter+".add("+expressionCode+");\n"; else if ( op == "-" ) return varGetter+".sub("+expressionCode+");\n"; else if ( op == "*" ) return varGetter+".mul("+expressionCode+");\n"; else if ( op == "/" ) return varGetter+".div("+expressionCode+");\n"; return ""; }; }; gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator * codeGen = new CodeGenerator; GetAllActions()["ModVarGlobal"].codeExtraInformation.SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>(codeGen)); } { class CodeGenerator : public gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator { virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string expressionCode; { gd::CallbacksForGeneratingExpressionCode callbacks(expressionCode, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseStringExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || expressionCode.empty()) expressionCode = "\"\""; } std::string varGetter; { VariableCodeGenerationCallbacks callbacks(varGetter, codeGenerator, context, VariableCodeGenerationCallbacks::PROJECT_VARIABLE); gd::VariableParser parser(instruction.GetParameters()[0].GetPlainString()); if ( !parser.Parse(callbacks) ) varGetter = "runtimeScene.getVariables().get(\"\")"; } std::string op = instruction.GetParameters()[1].GetPlainString(); if ( op == "=" ) return varGetter+".setString("+expressionCode+");\n"; else if ( op == "+" ) return varGetter+".concatenate("+expressionCode+");\n"; return ""; }; }; gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator * codeGen = new CodeGenerator; GetAllActions()["ModVarGlobalTxt"].codeExtraInformation.SetCustomCodeGenerator(boost::shared_ptr<gd::InstructionMetadata::ExtraInformation::CustomCodeGenerator>(codeGen)); } }
WindowExtension::WindowExtension() { gd::BuiltinExtensionsImplementer::ImplementsWindowExtension(*this); SetExtensionInformation("BuiltinWindow", _("Window features"), _("Built-in extension allowing to manipulate the game's window"), "Florian Rival", "Open source (LGPL)"); GetAllActions()["SetFullScreen"].codeExtraInformation .SetFunctionName("gdjs.evtTools.window.setFullScreen"); GetAllActions()["SetWindowMargins"].codeExtraInformation .SetFunctionName("gdjs.evtTools.window.setMargins"); GetAllActions()["SetWindowTitle"].codeExtraInformation .SetFunctionName("gdjs.evtTools.window.setWindowTitle"); GetAllActions()["SetWindowSize"].codeExtraInformation .SetFunctionName("gdjs.evtTools.window.setCanvasSize"); GetAllStrExpressions()["WindowTitle"].codeExtraInformation .SetFunctionName("gdjs.evtTools.window.getWindowTitle"); GetAllExpressions()["SceneWindowWidth"].codeExtraInformation .SetFunctionName("gdjs.evtTools.window.getWindowWidth"); GetAllExpressions()["SceneWindowHeight"].codeExtraInformation .SetFunctionName("gdjs.evtTools.window.getWindowHeight"); StripUnimplementedInstructionsAndExpressions(); //Unimplemented things are listed here: /* AddAction("EcrireTexte", _("Display a text"), _("Display the specified text to screen"), _("Display _PARAM1_ at _PARAM2_;_PARAM3_ ( color : _PARAM4_ , size : _PARAM5_, font : _PARAM6_ )"), _("Scene"), "res/actions/texte24.png", "res/actions/texte.png") .AddCodeOnlyParameter("currentScene", "") .AddParameter("string", _("Text"), "",false) .AddParameter("expression", _("X position"), "",false) .AddParameter("expression", _("Y position"), "",false) .AddParameter("color", _("Color"), "",false) .AddParameter("expression", _("Size"), "",false) .AddParameter("police", _("Font"), "",true) .AddParameter("layer", _("Layer ( Base layer if empty )"), "",true).SetDefaultValue("\"\"") .codeExtraInformation.SetFunctionName("DisplayLegacyTextOnScene").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); AddAction("SetWindowIcon", _("Change window's icon"), _("This action change the icon of the game's window."), _("Use _PARAM1_ as icon for the game's window."), _("Game's window"), "res/actions/window24.png", "res/actions/window.png") .AddCodeOnlyParameter("currentScene", "") .AddParameter("string", _("Name of the image to be used as the icon"), "",false) .codeExtraInformation.SetFunctionName("SetWindowIcon").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); AddExpression("ScreenWidth", _("Width of the current resolution"), _("Width of the current resolution"), _("Screen"), "res/display16.png") .codeExtraInformation.SetFunctionName("GetScreenWidth").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); AddExpression("ScreenHeight", _("Height of the current resolution"), _("Height of the current resolution"), _("Screen"), "res/display16.png") .codeExtraInformation.SetFunctionName("GetScreenHeight").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); AddExpression("ColorDepth", _("Color depth"), _("Color depth"), _("Screen"), "res/display16.png") .codeExtraInformation.SetFunctionName("GetColorDepth").SetIncludeFile("GDCpp/BuiltinExtensions/RuntimeSceneTools.h"); */ }