diff --git a/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js b/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js index 5aab65743d37..2a98e1c6b092 100644 --- a/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js +++ b/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js @@ -10,7 +10,11 @@ import * as THREE from 'three'; import { shouldBeHandledByPinch } from '../PinchHandler'; import { makeDoubleClickable } from './PixiDoubleClickEvent'; import Rectangle from '../../Utils/Rectangle'; // TODO (3D): add support for zMin/zMax/depth. -import { rotatePolygon, type Polygon } from '../../Utils/PolygonHelper'; +import { + flipPolygon, + rotatePolygon, + type Polygon, +} from '../../Utils/PolygonHelper'; import Rendered3DInstance from '../../ObjectsRendering/Renderers/Rendered3DInstance'; const gd: libGDevelop = global.gd; @@ -310,7 +314,9 @@ export default class LayerRenderer { getInstanceAABB(instance: gdInitialInstance, bounds: Rectangle): Rectangle { const angle = (instance.getAngle() * Math.PI) / 180; - if (angle === 0) { + const isFlippedX = instance.isFlippedX(); + const isFlippedY = instance.isFlippedY(); + if (angle === 0 && !isFlippedX && !isFlippedY) { return this.getUnrotatedInstanceAABB(instance, bounds); } @@ -352,6 +358,7 @@ export default class LayerRenderer { centerY = (rotatedRectangle[0][1] + rotatedRectangle[2][1]) / 2; } + flipPolygon(rotatedRectangle, centerX, centerY, isFlippedX, isFlippedY); rotatePolygon(rotatedRectangle, centerX, centerY, angle); } diff --git a/newIDE/app/src/Utils/PolygonHelper.js b/newIDE/app/src/Utils/PolygonHelper.js index 135c5ae9883d..3ed8c47a842a 100644 --- a/newIDE/app/src/Utils/PolygonHelper.js +++ b/newIDE/app/src/Utils/PolygonHelper.js @@ -17,3 +17,16 @@ export function rotatePolygon( vertices[i][1] = centerY - x * sina + y * cosa; } } + +export function flipPolygon( + vertices: Polygon, + centerX: number, + centerY: number, + flipX: boolean, + flipY: boolean +): void { + for (let i = 0, len = vertices.length; i < len; ++i) { + vertices[i][0] = flipX ? 2 * centerX - vertices[i][0] : vertices[i][0]; + vertices[i][1] = flipY ? 2 * centerY - vertices[i][1] : vertices[i][1]; + } +}