diff --git a/Extensions/3D/A_RuntimeObject3D.ts b/Extensions/3D/A_RuntimeObject3D.ts index 5aa2af4868..45494a42d3 100644 --- a/Extensions/3D/A_RuntimeObject3D.ts +++ b/Extensions/3D/A_RuntimeObject3D.ts @@ -144,6 +144,40 @@ namespace gdjs { return this._z; } + /** + * Get the Z position of the rendered object. + * + * For most objects, this will returns the same value as getZ(). But if the + * object has an origin that is not the same as the point (0,0,0) of the + * object displayed, getDrawableZ will differ. + * + * @return The Z position of the rendered object. + */ + getDrawableZ(): float { + return this.getZ(); + } + + /** + * Return the Z position of the object center, **relative to the object Z + * position** (`getDrawableX`). + * + * Use `getCenterZInScene` to get the position of the center in the scene. + * + * @return the Z position of the object center, relative to + * `getDrawableZ()`. + */ + getCenterZ(): float { + return this.getDepth() / 2; + } + + getCenterZInScene(): float { + return this.getDrawableZ() + this.getCenterZ(); + } + + setCenterZInScene(z: float): void { + this.setZ(z + this._z - (this.getDrawableZ() + this.getCenterZ())); + } + setAngle(angle: float): void { super.setAngle(angle); this.getRenderer().updateRotation(); diff --git a/Extensions/3D/Base3DBehavior.ts b/Extensions/3D/Base3DBehavior.ts index 8af42d2949..f085f5bc8f 100644 --- a/Extensions/3D/Base3DBehavior.ts +++ b/Extensions/3D/Base3DBehavior.ts @@ -15,6 +15,17 @@ namespace gdjs { */ getZ(): float; + /** + * Return the Z position of the object center, **relative to the scene origin**. + */ + getCenterZInScene(): float; + + /** + * Change the object center Z position in the scene. + * @param z The new Z position of the center in the scene. + */ + setCenterZInScene(z: float): void; + /** * Set the object rotation on the X axis. * @@ -132,6 +143,14 @@ namespace gdjs { return this.object.getZ(); } + getCenterZInScene(): number { + return this.object.getCenterZInScene(); + } + + setCenterZInScene(z: number): void { + this.object.setCenterZInScene(z); + } + setRotationX(angle: float): void { this.object.setRotationX(angle); } diff --git a/Extensions/3D/JsExtension.js b/Extensions/3D/JsExtension.js index 7020646577..60cb37b861 100644 --- a/Extensions/3D/JsExtension.js +++ b/Extensions/3D/JsExtension.js @@ -67,6 +67,22 @@ module.exports = { .useStandardParameters('number', gd.ParameterOptions.makeNewOptions()) .setFunctionName('setZ') .setGetter('getZ'); + + base3D + .addExpressionAndConditionAndAction( + 'number', + 'CenterZ', + _('Center Z position'), + _('the Z position of the center of rotation'), + _('the Z position of the center'), + _('Position/Center'), + 'res/conditions/3d_box.svg' + ) + .addParameter('object', _('3D object')) + .addParameter('behavior', _('Behavior'), 'Base3DBehavior') + .useStandardParameters('number', gd.ParameterOptions.makeNewOptions()) + .setFunctionName('setCenterZInScene') + .setGetter('getCenterZInScene'); base3D .addExpressionAndConditionAndAction( diff --git a/Extensions/3D/Model3DRuntimeObject.ts b/Extensions/3D/Model3DRuntimeObject.ts index 311a4b69ff..586e619467 100644 --- a/Extensions/3D/Model3DRuntimeObject.ts +++ b/Extensions/3D/Model3DRuntimeObject.ts @@ -298,6 +298,11 @@ namespace gdjs { return this.getHeight() * centerPoint[1]; } + getCenterZ(): float { + const centerPoint = this._renderer.getCenterPoint(); + return this.getDepth() * centerPoint[2]; + } + getDrawableX(): float { const originPoint = this._renderer.getOriginPoint(); return this.getX() - this.getWidth() * originPoint[0]; @@ -307,6 +312,11 @@ namespace gdjs { const originPoint = this._renderer.getOriginPoint(); return this.getY() - this.getHeight() * originPoint[1]; } + + getDrawableZ(): float { + const originPoint = this._renderer.getOriginPoint(); + return this.getZ() - this.getDepth() * originPoint[2]; + } } export namespace Model3DRuntimeObject { diff --git a/GDevelop.js/types/gdnamedpropertydescriptorslist.js b/GDevelop.js/types/gdnamedpropertydescriptorslist.js deleted file mode 100644 index c586ac8457..0000000000 --- a/GDevelop.js/types/gdnamedpropertydescriptorslist.js +++ /dev/null @@ -1,18 +0,0 @@ -// Automatically generated by GDevelop.js/scripts/generate-types.js -// Automatically generated by GDevelop.js/scripts/generate-types.js -declare class gdNamedPropertyDescriptorsList { - constructor(): void; - insertNew(name: string, pos: number): gdNamedPropertyDescriptor; - insert(item: gdNamedPropertyDescriptor, pos: number): gdNamedPropertyDescriptor; - has(name: string): boolean; - get(name: string): gdNamedPropertyDescriptor; - getAt(pos: number): gdNamedPropertyDescriptor; - remove(name: string): void; - move(oldIndex: number, newIndex: number): void; - getCount(): number; - getPosition(item: gdNamedPropertyDescriptor): number; - size(): number; - at(index: number): gdNamedPropertyDescriptor; - delete(): void; - ptr: number; -}; \ No newline at end of file