Files
D8H deb802cfec Allow to override behavior properties on object instances (#8171)
* For now, this is limited to instances inside custom objects. This will be made available in the future for all instances in scenes if this works well.
2026-02-09 16:21:24 +01:00

59 lines
1.8 KiB
TypeScript

namespace gdjs {
const logger = new gdjs.Logger('Dummy behavior');
/**
* The DummyRuntimeBehavior changes a variable in the object that is owning
* it, at every tick before events are run, to set it to the string that was
* set in one of the behavior property.
* @internal This is an example extension.
* @category Behaviors > Dummy
*/
export class DummyRuntimeBehavior extends gdjs.RuntimeBehavior {
_textToSet: string;
constructor(
instanceContainer: gdjs.RuntimeInstanceContainer,
behaviorData: any,
owner: gdjs.RuntimeObject
) {
super(instanceContainer, behaviorData, owner);
// Here you can access to the behavior data (JSON declared in JsExtension.js)
// using behaviorData:
this._textToSet = behaviorData.property1;
// You can also run arbitrary code at the creation of the behavior:
logger.log('DummyRuntimeBehavior was created for object:', owner);
}
override applyBehaviorOverriding(behaviorData): boolean {
if (behaviorData.property1 !== undefined) {
this._textToSet = behaviorData.property1;
}
// Return true to specify that the new behavior data have been applied
// (false if you can't do it, which will disable hot-reload for the behavior).
return true;
}
onDeActivate() {}
doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {
// This is run at every frame, before events are launched.
this.owner
.getVariables()
.get('VariableSetFromBehavior')
.setString(this._textToSet);
}
doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {
// This is run at every frame, after events are launched.
}
}
gdjs.registerBehavior(
'MyDummyExtension::DummyBehavior',
gdjs.DummyRuntimeBehavior
);
}