Files
GDevelop/GDJS/Runtime/object-capabilities/EffectBehavior.ts
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

134 lines
3.5 KiB
TypeScript

/*
* GDevelop JS Platform
* Copyright 2013-2023 Florian Rival (Florian.Rival@gmail.com). All rights reserved.
* This project is released under the MIT License.
*/
namespace gdjs {
/** @category Behaviors > Default behaviors */
export interface EffectHandler {
/**
* Change an effect property value (for properties that are numbers).
* @param name The name of the effect to update.
* @param parameterName The name of the property to update.
* @param value The new value (number).
*/
setEffectDoubleParameter(
name: string,
parameterName: string,
value: float
): boolean;
/**
* Change an effect property value (for properties that are strings).
* @param name The name of the effect to update.
* @param parameterName The name of the property to update.
* @param value The new value (string).
*/
setEffectStringParameter(
name: string,
parameterName: string,
value: string
): boolean;
/**
* Change an effect property value (for properties that are booleans).
* @param name The name of the effect to update.
* @param parameterName The name of the property to update.
* @param value The new value (boolean).
*/
setEffectBooleanParameter(
name: string,
parameterName: string,
value: boolean
): boolean;
/**
* Enable or disable an effect.
* @param name The name of the effect to enable or disable.
* @param enable true to enable, false to disable
*/
enableEffect(name: string, enable: boolean): void;
/**
* Check if an effect is enabled
* @param name The name of the effect
* @return true if the effect is enabled, false otherwise.
*/
isEffectEnabled(name: string): boolean;
}
/**
* A behavior that forwards the EffectBehavior interface to its object.
* @category Behaviors > Default behaviors
*/
export class EffectBehavior
extends gdjs.RuntimeBehavior
implements EffectHandler
{
private object: gdjs.RuntimeObject & EffectHandler;
constructor(
instanceContainer: gdjs.RuntimeInstanceContainer,
behaviorData,
owner: gdjs.RuntimeObject & EffectHandler
) {
super(instanceContainer, behaviorData, owner);
this.object = owner;
}
usesLifecycleFunction(): boolean {
return false;
}
override applyBehaviorOverriding(behaviorData): boolean {
// Nothing to update.
return true;
}
onDeActivate() {}
onDestroy() {}
doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}
doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}
setEffectDoubleParameter(
name: string,
parameterName: string,
value: float
): boolean {
return this.object.setEffectDoubleParameter(name, parameterName, value);
}
setEffectStringParameter(
name: string,
parameterName: string,
value: string
): boolean {
return this.object.setEffectStringParameter(name, parameterName, value);
}
setEffectBooleanParameter(
name: string,
parameterName: string,
value: boolean
): boolean {
return this.object.setEffectBooleanParameter(name, parameterName, value);
}
enableEffect(name: string, enable: boolean): void {
this.object.enableEffect(name, enable);
}
isEffectEnabled(name: string): boolean {
return this.object.isEffectEnabled(name);
}
}
gdjs.registerBehavior(
'EffectCapability::EffectBehavior',
gdjs.EffectBehavior
);
}