From bf0d2eb4124a16895363e0a600411a47f088517a Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Mon, 7 Feb 2022 11:08:52 +0100 Subject: [PATCH] directional shift for current player when trying to activate entities --- front/src/Phaser/Entity/Character.ts | 13 +++++++++++++ front/src/Phaser/Game/ActivatablesManager.ts | 8 ++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) 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(), + ) ); } }