diff --git a/front/src/Phaser/Entity/Character.ts b/front/src/Phaser/Entity/Character.ts index c26b87ba..061bc2e5 100644 --- a/front/src/Phaser/Entity/Character.ts +++ b/front/src/Phaser/Entity/Character.ts @@ -159,6 +159,19 @@ export abstract class Character extends Container implements OutlineableInterfac return { x: this.x, y: this.y }; } + /** + * Returns position based on where player is currently facing + * @param shift How far from player should the point of interest be. + */ + public getDirectionalActivationPosition(shift: number): { x: number, y: number } { + switch (this.lastDirection) { + case PlayerAnimationDirections.Down: { return { x: this.x, y: this.y + shift }; } + case PlayerAnimationDirections.Left: { return { x: this.x - shift, y: this.y }; } + case PlayerAnimationDirections.Right: { return { x: this.x + shift, y: this.y }; } + case PlayerAnimationDirections.Up: { return { x: this.x, y: this.y - shift }; } + } + } + public getObjectToOutline(): Phaser.GameObjects.GameObject { return this.playerNameText; } diff --git a/front/src/Phaser/Game/ActivatablesManager.ts b/front/src/Phaser/Game/ActivatablesManager.ts index 90f1c8d3..f5f893db 100644 --- a/front/src/Phaser/Game/ActivatablesManager.ts +++ b/front/src/Phaser/Game/ActivatablesManager.ts @@ -12,6 +12,7 @@ export class ActivatablesManager { private currentPlayer: Player; private readonly outlineColor = 0xffff00; + private readonly directionalActivationPositionShift = 50; constructor(currentPlayer: Player) { this.currentPlayer = currentPlayer; @@ -79,7 +80,7 @@ export class ActivatablesManager { return closestObject; } public updateActivatableObjectsDistances(objects: ActivatableInterface[]): void { - const currentPlayerPos = this.currentPlayer.getPosition(); + const currentPlayerPos = this.currentPlayer.getDirectionalActivationPosition(this.directionalActivationPositionShift); for (const object of objects) { const distance = MathUtils.distanceBetween(currentPlayerPos, object.getPosition()); this.activatableObjectsDistances.set(object, distance); @@ -89,7 +90,10 @@ export class ActivatablesManager { public updateDistanceForSingleActivatableObject(object: ActivatableInterface): void { this.activatableObjectsDistances.set( object, - MathUtils.distanceBetween(this.currentPlayer.getPosition(), object.getPosition()) + MathUtils.distanceBetween( + this.currentPlayer.getDirectionalActivationPosition(this.directionalActivationPositionShift), + object.getPosition(), + ) ); } }