mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-22 01:55:25 -04:00
80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
/**
|
|
* Generate the code from events (using GDJS platform)
|
|
* and create a JavaScript function that runs it.
|
|
*
|
|
* The JavaScript function must be called with the `runtimeScene` to be used.
|
|
* In this context, GDJS game engine does not exist, so you must pass a mock
|
|
* to it to validate that the events are working properly.
|
|
*/
|
|
function generateCompiledEventsForEventsFunction(
|
|
gd,
|
|
project,
|
|
eventsFunction,
|
|
logCode = false
|
|
) {
|
|
const namespace = 'functionNamespace';
|
|
const eventsFunctionsExtensionCodeGenerator =
|
|
new gd.EventsFunctionsExtensionCodeGenerator(project);
|
|
|
|
const includeFiles = new gd.SetString();
|
|
const extension = new gd.EventsFunctionsExtension();
|
|
const code =
|
|
eventsFunctionsExtensionCodeGenerator.generateFreeEventsFunctionCompleteCode(
|
|
extension,
|
|
eventsFunction,
|
|
namespace,
|
|
includeFiles,
|
|
true
|
|
);
|
|
|
|
eventsFunctionsExtensionCodeGenerator.delete();
|
|
extension.delete();
|
|
includeFiles.delete();
|
|
|
|
if (logCode) console.log(code);
|
|
|
|
// Create a "real" JavaScript function with the generated code.
|
|
const runCompiledEventsFunction = new Function(
|
|
'gdjs',
|
|
'runtimeScene',
|
|
'functionArguments',
|
|
// Expose some global variables that are expected by the generated code:
|
|
`Hashtable = gdjs.Hashtable;` +
|
|
'\n' +
|
|
code +
|
|
// Return the function for it to be called (if arguments are passed).
|
|
`;
|
|
return functionArguments ?
|
|
functionNamespace.func.apply(functionNamespace.func, [runtimeScene, ...functionArguments, runtimeScene]) :
|
|
null;`
|
|
);
|
|
|
|
return runCompiledEventsFunction;
|
|
}
|
|
|
|
/** Helper to create compiled events from serialized events, creating a project and the events function. */
|
|
function generateCompiledEventsFromSerializedEvents(
|
|
gd,
|
|
eventsSerializerElement
|
|
) {
|
|
const project = new gd.ProjectHelper.createNewGDJSProject();
|
|
const eventsFunction = new gd.EventsFunction();
|
|
eventsFunction.getEvents().unserializeFrom(project, eventsSerializerElement);
|
|
|
|
const runCompiledEvents = generateCompiledEventsForEventsFunction(
|
|
gd,
|
|
project,
|
|
eventsFunction
|
|
);
|
|
|
|
eventsFunction.delete();
|
|
project.delete();
|
|
|
|
return runCompiledEvents;
|
|
}
|
|
|
|
module.exports = {
|
|
generateCompiledEventsForEventsFunction,
|
|
generateCompiledEventsFromSerializedEvents,
|
|
};
|