2021-09-01 10:11:12 +02:00
import type { GameScene } from "../Game/GameScene" ;
import type { PointInterface } from "../../Connexion/ConnexionModels" ;
import { Character } from "../Entity/Character" ;
import type { PlayerAnimationDirections } from "../Player/Animation" ;
2022-01-24 16:27:57 +01:00
import { requestVisitCardsStore , requestActionsMenuStore } from "../../Stores/GameStore" ;
2022-01-25 13:42:41 +01:00
import { actionsMenuStore } from '../../Stores/ActionsMenuStore' ;
2021-06-01 15:35:25 +02:00
2020-06-04 18:54:34 +02:00
/ * *
* Class representing the sprite of a remote player ( a player that plays on another computer )
* /
export class RemotePlayer extends Character {
2020-09-18 13:57:38 +02:00
userId : number ;
2021-09-01 10:11:12 +02:00
private visitCardUrl : string | null ;
2020-06-04 18:54:34 +02:00
2022-01-25 15:47:21 +01:00
private actionsMenuRequested : boolean = false ;
2020-06-04 18:54:34 +02:00
constructor (
2020-09-18 13:57:38 +02:00
userId : number ,
2020-06-04 18:54:34 +02:00
Scene : GameScene ,
x : number ,
y : number ,
name : string ,
2021-01-07 17:11:22 +01:00
texturesPromise : Promise < string [ ] > ,
2021-03-11 16:13:05 +01:00
direction : PlayerAnimationDirections ,
2021-04-02 21:21:11 +02:00
moving : boolean ,
2021-09-01 10:11:12 +02:00
visitCardUrl : string | null ,
companion : string | null ,
2021-04-06 19:10:18 +02:00
companionTexturePromise? : Promise < string >
2020-06-04 18:54:34 +02:00
) {
2021-09-01 10:11:12 +02:00
super (
Scene ,
x ,
y ,
texturesPromise ,
name ,
direction ,
moving ,
1 ,
! ! visitCardUrl ,
companion ,
companionTexturePromise
) ;
2020-06-04 18:54:34 +02:00
//set data
this . userId = userId ;
2021-06-08 16:30:58 +02:00
this . visitCardUrl = visitCardUrl ;
2022-01-25 15:47:21 +01:00
requestActionsMenuStore . subscribe ( ( value : boolean ) = > {
this . actionsMenuRequested = value ;
} ) ;
2021-09-01 10:11:12 +02:00
this . on ( "pointerdown" , ( event : Phaser.Input.Pointer ) = > {
if ( event . downElement . nodeName === "CANVAS" ) {
2022-01-25 15:47:21 +01:00
if ( this . actionsMenuRequested ) {
requestActionsMenuStore . set ( false ) ;
return ;
}
2022-01-25 13:42:41 +01:00
actionsMenuStore . addPossibleAction (
"visit-card" ,
"Visiting Card" , ( ) = > {
requestVisitCardsStore . set ( this . visitCardUrl ) ;
actionsMenuStore . clearActions ( ) ;
requestActionsMenuStore . set ( false ) ;
} ) ;
actionsMenuStore . addPossibleAction (
"log-hello" ,
"Log Hello" , ( ) = > {
console . log ( 'HELLO' ) ;
// requestActionsMenuStore.set(false);
} ) ;
actionsMenuStore . addPossibleAction (
"log-goodbye" ,
"Log Goodbye" , ( ) = > {
console . log ( 'GOODBYE' ) ;
// requestActionsMenuStore.set(false);
} ) ;
actionsMenuStore . addPossibleAction (
"clear" ,
"Clear Actions" , ( ) = > {
actionsMenuStore . clearActions ( ) ;
} ) ;
2022-01-24 16:27:57 +01:00
requestActionsMenuStore . set ( true ) ;
2021-09-01 10:11:12 +02:00
}
} ) ;
2020-06-04 18:54:34 +02:00
}
updatePosition ( position : PointInterface ) : void {
2021-03-11 16:13:05 +01:00
this . playAnimation ( position . direction as PlayerAnimationDirections , position . moving ) ;
2020-06-04 18:54:34 +02:00
this . setX ( position . x ) ;
this . setY ( position . y ) ;
2021-05-12 09:13:25 +02:00
2021-01-06 15:00:54 +01:00
this . setDepth ( position . y ) ; //this is to make sure the perspective (player models closer the bottom of the screen will appear in front of models nearer the top of the screen).
2021-05-12 09:13:25 +02:00
2021-04-01 18:51:51 +02:00
if ( this . companion ) {
this . companion . setTarget ( position . x , position . y , position . direction as PlayerAnimationDirections ) ;
}
2020-06-04 18:54:34 +02:00
}
}