Skip to content

Commit d09036e

Browse files
committed
feat: keepInArena sub method
1 parent 50e76d1 commit d09036e

1 file changed

Lines changed: 23 additions & 12 deletions

File tree

src/Entity/Object.ts

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -353,24 +353,35 @@ export default class ObjectEntity extends Entity {
353353
this.game.entities.globalEntities.push(this.id);
354354
}
355355

356+
/** Keeps the object within the arena bounds. */
357+
protected keepInArena() {
358+
const arena = this.game.arena.arenaData;
359+
const padding = this.game.arena.ARENA_PADDING;
360+
361+
if (this.positionData.values.x < arena.values.leftX - padding) {
362+
this.positionData.x = arena.values.leftX - padding;
363+
} else if (this.positionData.values.x > arena.values.rightX + padding) {
364+
this.positionData.x = arena.values.rightX + padding;
365+
}
366+
367+
if (this.positionData.values.y < arena.values.topY - padding) {
368+
this.positionData.y = arena.values.topY - padding;
369+
} else if (this.positionData.values.y > arena.values.bottomY + padding) {
370+
this.positionData.y = arena.values.bottomY + padding;
371+
}
372+
}
373+
356374
public tick(tick: number) {
357375
this.deletionAnimation?.tick();
358376

359377
for (let i = 0; i < this.children.length; ++i) this.children[i].tick(tick);
360378

361379
// Keep things in the arena
362-
if (!(this.physicsData.values.flags & PhysicsFlags.canEscapeArena) && this.isPhysical) {
363-
const arena = this.game.arena;
364-
xPos: {
365-
if (this.positionData.values.x < arena.arenaData.values.leftX - arena.ARENA_PADDING) this.positionData.x = arena.arenaData.values.leftX - arena.ARENA_PADDING;
366-
else if (this.positionData.values.x > arena.arenaData.values.rightX + arena.ARENA_PADDING) this.positionData.x = arena.arenaData.values.rightX + arena.ARENA_PADDING;
367-
else break xPos;
368-
}
369-
yPos: {
370-
if (this.positionData.values.y < arena.arenaData.values.topY - arena.ARENA_PADDING) this.positionData.y = arena.arenaData.values.topY - arena.ARENA_PADDING;
371-
else if (this.positionData.values.y > arena.arenaData.values.bottomY + arena.ARENA_PADDING) this.positionData.y = arena.arenaData.values.bottomY + arena.ARENA_PADDING;
372-
else break yPos;
373-
}
380+
if (
381+
this.isPhysical
382+
&& !(this.physicsData.values.flags & PhysicsFlags.canEscapeArena)
383+
) {
384+
this.keepInArena();
374385
}
375386
}
376387
}

0 commit comments

Comments
 (0)