added callback on playermove - gets quite delayed after walking for a few seconds
This commit is contained in:
parent
ce0c7ea3eb
commit
8e136cebe8
8 changed files with 104 additions and 44 deletions
19
front/src/Api/Events/HasMovedEvent.ts
Normal file
19
front/src/Api/Events/HasMovedEvent.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
import * as tg from "generic-type-guard";
|
||||
|
||||
|
||||
|
||||
export const isHasMovedEvent =
|
||||
new tg.IsInterface().withProperties({
|
||||
direction: tg.isString,
|
||||
moving: tg.isBoolean,
|
||||
x: tg.isNumber,
|
||||
y: tg.isNumber
|
||||
}).get();
|
||||
|
||||
/**
|
||||
* A message sent from the iFrame to the game to add a message in the chat.
|
||||
*/
|
||||
export type HasMovedEvent = tg.GuardedType<typeof isHasMovedEvent>;
|
||||
|
||||
|
||||
export type HasMovedEventCallback = (event: HasMovedEvent) => void
|
|
@ -1,11 +1,11 @@
|
|||
|
||||
|
||||
import { GameStateEvent } from './ApiGameStateEvent';
|
||||
import { ButtonClickedEvent } from './ButtonClickedEvent';
|
||||
import { ChatEvent } from './ChatEvent';
|
||||
import { ClosePopupEvent } from './ClosePopupEvent';
|
||||
import { EnterLeaveEvent } from './EnterLeaveEvent';
|
||||
import { GoToPageEvent } from './GoToPageEvent';
|
||||
import { HasMovedEvent } from './HasMovedEvent';
|
||||
import { OpenCoWebSiteEvent } from './OpenCoWebSiteEvent';
|
||||
import { OpenPopupEvent } from './OpenPopupEvent';
|
||||
import { OpenTabEvent } from './OpenTabEvent';
|
||||
|
@ -30,6 +30,7 @@ export type IframeEventMap = {
|
|||
restorePlayerControl: null
|
||||
displayBubble: null
|
||||
removeBubble: null
|
||||
enableMoveEvents: undefined
|
||||
}
|
||||
export interface IframeEvent<T extends keyof IframeEventMap> {
|
||||
type: T;
|
||||
|
@ -46,6 +47,7 @@ export interface IframeResponseEventMap {
|
|||
leaveEvent: EnterLeaveEvent
|
||||
buttonClickedEvent: ButtonClickedEvent
|
||||
gameState: GameStateEvent
|
||||
hasMovedEvent: HasMovedEvent
|
||||
}
|
||||
export interface IframeResponseEvent<T extends keyof IframeResponseEventMap> {
|
||||
type: T;
|
||||
|
|
|
@ -14,6 +14,7 @@ import { IframeEventMap, IframeEvent, IframeResponseEvent, IframeResponseEventMa
|
|||
import { UserInputChatEvent } from "./Events/UserInputChatEvent";
|
||||
import { GameStateEvent } from './Events/ApiGameStateEvent';
|
||||
import { deepFreezeClone as deepFreezeClone } from '../utility';
|
||||
import { HasMovedEvent } from './Events/HasMovedEvent';
|
||||
|
||||
|
||||
/**
|
||||
|
@ -21,6 +22,7 @@ import { deepFreezeClone as deepFreezeClone } from '../utility';
|
|||
* Also allows to send messages to those iframes.
|
||||
*/
|
||||
class IframeListener {
|
||||
|
||||
private readonly _chatStream: Subject<ChatEvent> = new Subject();
|
||||
public readonly chatStream = this._chatStream.asObservable();
|
||||
|
||||
|
@ -54,12 +56,13 @@ class IframeListener {
|
|||
private readonly _removeBubbleStream: Subject<void> = new Subject();
|
||||
public readonly removeBubbleStream = this._removeBubbleStream.asObservable();
|
||||
|
||||
|
||||
|
||||
private readonly _gameStateStream: Subject<void> = new Subject();
|
||||
public readonly gameStateStream = this._gameStateStream.asObservable();
|
||||
|
||||
private readonly iframes = new Set<HTMLIFrameElement>();
|
||||
private readonly scripts = new Map<string, HTMLIFrameElement>();
|
||||
private sendMoveEvents: boolean = false;
|
||||
|
||||
init() {
|
||||
window.addEventListener("message", (message: TypedMessageEvent<IframeEvent<keyof IframeEventMap>>) => {
|
||||
|
@ -101,20 +104,18 @@ class IframeListener {
|
|||
}
|
||||
else if (payload.type === 'closeCoWebSite') {
|
||||
scriptUtils.closeCoWebSite();
|
||||
}
|
||||
else if (payload.type === 'disablePlayerControl') {
|
||||
} else if (payload.type === 'disablePlayerControl') {
|
||||
this._disablePlayerControlStream.next();
|
||||
}
|
||||
else if (payload.type === 'restorePlayerControl') {
|
||||
} else if (payload.type === 'restorePlayerControl') {
|
||||
this._enablePlayerControlStream.next();
|
||||
}
|
||||
else if (payload.type === 'displayBubble') {
|
||||
} else if (payload.type === 'displayBubble') {
|
||||
this._displayBubbleStream.next();
|
||||
}
|
||||
else if (payload.type === 'removeBubble') {
|
||||
} else if (payload.type === 'removeBubble') {
|
||||
this._removeBubbleStream.next();
|
||||
}else if(payload.type=="getState"){
|
||||
} else if (payload.type == "getState") {
|
||||
this._gameStateStream.next();
|
||||
} else if (payload.type == "enableMoveEvents") {
|
||||
this.sendMoveEvents = true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,11 +124,11 @@ class IframeListener {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
sendFrozenGameStateEvent(gameStateEvent: GameStateEvent) {
|
||||
this.postMessage({
|
||||
'type': 'gameState',
|
||||
'data': deepFreezeClone(gameStateEvent)
|
||||
'data': deepFreezeClone(gameStateEvent)
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -234,6 +235,15 @@ class IframeListener {
|
|||
});
|
||||
}
|
||||
|
||||
hasMovedEvent(event: HasMovedEvent) {
|
||||
if (this.sendMoveEvents) {
|
||||
this.postMessage({
|
||||
'type': 'hasMovedEvent',
|
||||
'data': event
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
sendButtonClickedEvent(popupId: number, buttonId: number): void {
|
||||
this.postMessage({
|
||||
'type': 'buttonClickedEvent',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue