Compare commits

...

1 Commits

Author SHA1 Message Date
Clément Pasteau
5cd1581be1 Playing around with hitboxes 2021-12-02 19:51:11 +01:00
4 changed files with 49 additions and 17 deletions

View File

@@ -95,10 +95,11 @@ namespace gdjs {
}
updateFontFamily(): void {
this._pixiObject.textStyles.default.fontFamily = this._object._runtimeScene
.getGame()
.getFontManager()
.getFontFamily(this._object._fontFamily);
this._pixiObject.textStyles.default.fontFamily =
this._object._runtimeScene
.getGame()
.getFontManager()
.getFontFamily(this._object._fontFamily);
this._pixiObject.dirty = true;
}
@@ -109,9 +110,14 @@ namespace gdjs {
}
updatePosition(): void {
this._pixiObject.position.x = this._object.x + this._pixiObject.width / 2;
this._pixiObject.position.y =
this._object.y + this._pixiObject.height / 2;
const angle = gdjs.toRad(this._object.angle);
const height = this.getHeight() / 2;
const width = this.getWidth() / 2;
const xDelta = width * Math.cos(angle) - height * Math.sin(angle);
const yDelta = width * Math.sin(angle) + height * Math.cos(angle);
this._pixiObject.position.x = this._object.x + xDelta;
this._pixiObject.position.y = this._object.y + yDelta;
}
updateAngle(): void {

View File

@@ -149,8 +149,14 @@ namespace gdjs {
}
updatePosition(): void {
this._pixiObject.position.x = this._object.x + this.getWidth() / 2;
this._pixiObject.position.y = this._object.y + this.getHeight() / 2;
const angle = gdjs.toRad(this._object.angle);
const height = this.getHeight() / 2;
const width = this.getWidth() / 2;
const xDelta = width * Math.cos(angle) - height * Math.sin(angle);
const yDelta = width * Math.sin(angle) + height * Math.cos(angle);
this._pixiObject.position.x = this._object.x + xDelta;
this._pixiObject.position.y = this._object.y + yDelta;
}
updateAngle(): void {
@@ -169,5 +175,6 @@ namespace gdjs {
return this._pixiObject.textHeight * this.getScale();
}
}
export const BitmapTextRuntimeObjectRenderer = BitmapTextRuntimeObjectPixiRenderer;
export const BitmapTextRuntimeObjectRenderer =
BitmapTextRuntimeObjectPixiRenderer;
}

View File

@@ -94,8 +94,14 @@ namespace gdjs {
}
updatePosition(): void {
this._text.position.x = this._object.x + this._text.width / 2;
this._text.position.y = this._object.y + this._text.height / 2;
const angle = gdjs.toRad(this._object.angle);
const width = this._text.width / 2;
const height = this._text.height / 2;
const xDelta = width * Math.cos(angle) - height * Math.sin(angle);
const yDelta = height * Math.cos(angle) + width * Math.sin(angle);
this._text.position.x = this._object.x + xDelta;
this._text.position.y = this._object.y + yDelta;
}
updateAngle(): void {

View File

@@ -1102,7 +1102,12 @@ namespace gdjs {
* @return the X position of the object center, relative to `getDrawableX()`.
*/
getCenterX(): float {
return this.getWidth() / 2;
const halfWidth = this.getWidth() / 2;
const halfHeight = this.getHeight() / 2;
return (
Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight) *
Math.cos(gdjs.toRad(this.getAngle()))
);
}
/**
@@ -1112,7 +1117,12 @@ namespace gdjs {
* @return the Y position of the object center, relative to `getDrawableY()`.
*/
getCenterY(): float {
return this.getHeight() / 2;
const halfWidth = this.getWidth() / 2;
const halfHeight = this.getHeight() / 2;
return (
Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight) *
Math.sin(gdjs.toRad(this.getAngle()))
);
}
/**
@@ -1394,10 +1404,13 @@ namespace gdjs {
this.hitBoxes[0].vertices[3][0] = 0 - centerX;
this.hitBoxes[0].vertices[3][1] = height - centerY;
}
this.hitBoxes[0].rotate(gdjs.toRad(this.getAngle()));
const angle = gdjs.toRad(this.getAngle());
this.hitBoxes[0].rotate(angle);
const xDelta = centerX * Math.cos(angle) - centerY * Math.sin(angle);
const yDelta = centerY * Math.cos(angle) + centerX * Math.sin(angle);
this.hitBoxes[0].move(
this.getDrawableX() + centerX,
this.getDrawableY() + centerY
this.getDrawableX() + xDelta,
this.getDrawableY() + yDelta
);
}