mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-22 01:55:25 -04:00
7597dbe0d1
* Add `PickedInstancesCount` and `SceneInstancesCount` expressions, to replace `Count`. These expressions don't do any "picking" of instances, so they are safe to use anywhere without "weird" side effects. * Equivalent conditions are available for all objects. These conditions allow to check at any point in your events the number of instances living on the scene or picked by actions/conditions. * This is useful to check if enough objects are picked by a condition before launching an action. * Because this condition does not change the already picked objects, it's safe to use anywhere without any side effect. Only show the rest in the developer changelog: * Allow to read events missing some fields (like `disabled`, `folded`). * Reduce the useless information stored in project JSON files by not storing the fields if they have their default value.
77 lines
2.2 KiB
JavaScript
77 lines
2.2 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 code =
|
|
eventsFunctionsExtensionCodeGenerator.generateFreeEventsFunctionCompleteCode(
|
|
eventsFunction,
|
|
namespace,
|
|
includeFiles,
|
|
true
|
|
);
|
|
|
|
eventsFunctionsExtensionCodeGenerator.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,
|
|
};
|