diff --git a/lib/index.d.ts b/lib/index.d.ts index 17c1ae5..b78fa76 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -600,9 +600,13 @@ export class Sound { stop(): void; } -interface NumericalEntity {pos: Coordinates, w: number, h: number} +interface NumericalEntityBase {pos: Coordinates} +interface NumericalSprite {w: number, h: number} +interface NumericalTileSprite {tileW: number, tileH: number} -interface NumericalEntityWithHitbox extends NumericalEntity {hitBox: NumericalEntity} +type NumericalEntity = NumericalSprite | NumericalTileSprite + +type NumericalEntityWithHitbox = {hitBox: NumericalEntity} & NumericalEntity export namespace deadInTracks { /** @@ -646,7 +650,7 @@ export namespace entity { * @param container The container. * @param hitCallback The callback that is executed when an entity hits something in the container. */ - export function hits(entity: NumericalEntityWithHitbox | NumericalEntity, container: Container, hitCallback: (e2: NumericalEntityWithHitbox | NumericalEntity) => any): void; + export function hits(entity: NumericalEntityWithHitbox | NumericalEntity, container: Container, hitCallback: (e2: T) => any): void; /** * This functions calculates whether two entities hit each other. diff --git a/lib/utilities/entity.js b/lib/utilities/entity.js index 67c2aaa..736f758 100644 --- a/lib/utilities/entity.js +++ b/lib/utilities/entity.js @@ -20,7 +20,16 @@ function angle(a, b) { } function bounds(entity) { - const { w, h, pos, hitBox } = entity; + let pos, w, h, hitBox; + // Object.prototype.hasOwnProperty.call is needed because of eslint + if (Object.prototype.hasOwnProperty.call(entity, "tileW") && Object.prototype.hasOwnProperty.call(entity, "tileH")) { + ({pos, w, h} = {pos: entity.pos, w: entity.tileW, h: entity.tileH}); + } else { + ({pos, w, h} = entity); + } + + if (entity.hitBox) hitBox = entity.hitBox; + const hit = hitBox || { x: 0, y: 0, w, h }; return { x: hit.x + pos.x, @@ -31,7 +40,15 @@ function bounds(entity) { } function center(entity) { - const { pos, w, h } = entity; + let pos, w, h; + + // Object.prototype.hasOwnProperty.call is needed because of eslint + if (Object.prototype.hasOwnProperty.call(entity, "tileW") && Object.prototype.hasOwnProperty.call(entity, "tileH")) { + ({pos, w, h} = {pos: entity.pos, w: entity.tileW, h: entity.tileH}); + } else { + ({pos, w, h} = entity); + } + return { x: pos.x + w / 2, y: pos.y + h / 2