mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
2 Commits
fix-events
...
fix-select
Author | SHA1 | Date | |
---|---|---|---|
![]() |
65c51ee02f | ||
![]() |
03e1234874 |
@@ -2,6 +2,7 @@
|
||||
import gesture from 'pixi-simple-gesture';
|
||||
import ObjectsRenderingService from '../../ObjectsRendering/ObjectsRenderingService';
|
||||
import RenderedInstance from '../../ObjectsRendering/Renderers/RenderedInstance';
|
||||
import RenderedInstanceWithCustomizableCenter from '../../ObjectsRendering/Renderers/RenderedInstanceWithCustomizableCenter';
|
||||
import getObjectByName from '../../Utils/GetObjectByName';
|
||||
import ViewPosition from '../ViewPosition';
|
||||
|
||||
@@ -39,7 +40,9 @@ export default class LayerRenderer {
|
||||
/** Used for instances culling on rendering */
|
||||
viewBottomRight: [number, number];
|
||||
|
||||
renderedInstances: { [number]: RenderedInstance } = {};
|
||||
renderedInstances: {
|
||||
[number]: RenderedInstance | RenderedInstanceWithCustomizableCenter,
|
||||
} = {};
|
||||
pixiContainer: PIXI.Container;
|
||||
|
||||
/** Functor used to render an instance */
|
||||
@@ -205,8 +208,21 @@ export default class LayerRenderer {
|
||||
rectangle[3][0] = right;
|
||||
rectangle[3][1] = top;
|
||||
|
||||
const centerX = (rectangle[0][0] + rectangle[2][0]) / 2;
|
||||
const centerY = (rectangle[0][1] + rectangle[2][1]) / 2;
|
||||
let centerX = undefined;
|
||||
let centerY = undefined;
|
||||
|
||||
const renderedInstance = this.renderedInstances[instance.ptr];
|
||||
if (
|
||||
renderedInstance &&
|
||||
renderedInstance instanceof RenderedInstanceWithCustomizableCenter
|
||||
) {
|
||||
centerX = instance.getX() + renderedInstance.getCenterX();
|
||||
centerY = instance.getY() + renderedInstance.getCenterY();
|
||||
} else {
|
||||
centerX = (rectangle[0][0] + rectangle[2][0]) / 2;
|
||||
centerY = (rectangle[0][1] + rectangle[2][1]) / 2;
|
||||
}
|
||||
|
||||
const angle = (instance.getAngle() * Math.PI) / 180;
|
||||
rotatePolygon(rectangle, centerX, centerY, angle);
|
||||
return rectangle;
|
||||
|
@@ -0,0 +1,17 @@
|
||||
// @flow
|
||||
import RenderedInstance from './RenderedInstance';
|
||||
|
||||
/**
|
||||
* RenderedInstanceWithCustomizableCenter is a derivative of RenderedInstance
|
||||
* that represents an instance whose center can be custom (not at the center of
|
||||
* the AABB of the object).
|
||||
*/
|
||||
export default class RenderedInstanceWithCustomizableCenter extends RenderedInstance {
|
||||
getCenterX() {
|
||||
return this.getDefaultWidth() / 2;
|
||||
}
|
||||
|
||||
getCenterY() {
|
||||
return this.getDefaultHeight() / 2;
|
||||
}
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
// @flow
|
||||
import RenderedInstance from './RenderedInstance';
|
||||
import RenderedInstanceWithCustomizableCenter from './RenderedInstanceWithCustomizableCenter';
|
||||
import PixiResourcesLoader from '../../ObjectsRendering/PixiResourcesLoader';
|
||||
import ResourcesLoader from '../../ResourcesLoader';
|
||||
import * as PIXI from 'pixi.js-legacy';
|
||||
@@ -8,7 +8,7 @@ const gd: libGDevelop = global.gd;
|
||||
/**
|
||||
* Renderer for gd.SpriteObject
|
||||
*/
|
||||
export default class RenderedSpriteInstance extends RenderedInstance {
|
||||
export default class RenderedSpriteInstance extends RenderedInstanceWithCustomizableCenter {
|
||||
_renderedAnimation: number;
|
||||
_renderedDirection: number;
|
||||
_centerX: number;
|
||||
@@ -86,7 +86,7 @@ export default class RenderedSpriteInstance extends RenderedInstance {
|
||||
this._centerY / this._pixiObject.texture.frame.height;
|
||||
this._pixiObject.rotation = this._shouldNotRotate
|
||||
? 0
|
||||
: RenderedInstance.toRad(this._instance.getAngle());
|
||||
: RenderedInstanceWithCustomizableCenter.toRad(this._instance.getAngle());
|
||||
if (this._instance.hasCustomSize()) {
|
||||
this._pixiObject.scale.x =
|
||||
this._instance.getCustomWidth() / this._pixiObject.texture.frame.width;
|
||||
@@ -202,4 +202,14 @@ export default class RenderedSpriteInstance extends RenderedInstance {
|
||||
getDefaultHeight(): number {
|
||||
return Math.abs(this._pixiObject.texture.frame.height);
|
||||
}
|
||||
|
||||
getCenterX(): number {
|
||||
if (!this._sprite || !this._pixiObject) return 0;
|
||||
return this._centerX * this._pixiObject.scale.x;
|
||||
}
|
||||
|
||||
getCenterY(): number {
|
||||
if (!this._sprite || !this._pixiObject) return 0;
|
||||
return this._centerY * this._pixiObject.scale.y;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user