@@ -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