summaryrefslogtreecommitdiff
path: root/client/src
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-07-29 12:58:51 +0200
committerMike Vink <mike1994vink@gmail.com>2021-07-29 12:58:51 +0200
commit935c4676165fc2cf8cc938725ff473643acd0077 (patch)
treeef04d21c3f124849dff4f412fc181565d6651f0e /client/src
parent4a354cd7a4edb203dd5e66355dbed0e62994e09b (diff)
feat(): battle start handshake part finished
Diffstat (limited to 'client/src')
-rw-r--r--client/src/akkamon/client/Client.ts23
-rw-r--r--client/src/akkamon/client/EventType.ts3
-rw-r--r--client/src/akkamon/client/IncomingEvents.ts2
-rw-r--r--client/src/akkamon/client/InteractionEngine.ts34
-rw-r--r--client/src/akkamon/client/OutgoingEvents.ts11
-rw-r--r--client/src/akkamon/scenes/UIElement.ts26
-rw-r--r--client/src/akkamon/scenes/WorldScene.ts5
7 files changed, 94 insertions, 10 deletions
diff --git a/client/src/akkamon/client/Client.ts b/client/src/akkamon/client/Client.ts
index 1591347..0e7e8c3 100644
--- a/client/src/akkamon/client/Client.ts
+++ b/client/src/akkamon/client/Client.ts
@@ -38,7 +38,8 @@ import type {
import {
HeartBeatReplyEvent,
Interaction,
- OutgoingInteractionRequestEvent
+ OutgoingInteractionRequestEvent,
+ InteractionReplyEvent
} from './OutgoingEvents';
@@ -94,6 +95,14 @@ export class Client implements AkkamonClient
console.log(event);
this.interactionEngine!.push(event as IncomingInteractionRequest);
break;
+ case EventType.INTERACTION_START:
+ console.log("Received interaction starting event!");
+ console.log(event);
+ if (!this.interactionEngine!.getWaitingForInteractionToStart()) {
+ this.interactionEngine!.setWaitingForInteractionToStart(true);
+ this.interactionEngine!.setWaitingDialogue(`Waiting for ${event.interactionType!} to start...`);
+ }
+ break;
default:
console.log("ignored incoming event, doesn't match EventType interface.");
console.log(event.type);
@@ -222,4 +231,16 @@ export class Client implements AkkamonClient
getCurrentSceneKey() {
return this.scene!.scene.key;
}
+
+ sendInteractionReply(value: boolean, requestName: string) {
+ console.log("Sending interaction reply event!");
+ this.interactionEngine!.setAnswering(false);
+ this.interactionEngine!.setWaitingForInteractionToStart(true);
+ this.send(new InteractionReplyEvent(
+ this.getSessionTrainerId()!,
+ this.getCurrentSceneKey()!,
+ requestName,
+ value
+ ));
+ }
}
diff --git a/client/src/akkamon/client/EventType.ts b/client/src/akkamon/client/EventType.ts
index 7d6d483..de296e0 100644
--- a/client/src/akkamon/client/EventType.ts
+++ b/client/src/akkamon/client/EventType.ts
@@ -11,6 +11,7 @@ export enum EventType {
NEW_TILE_POS = "NewTilePos",
INTERACTION_REQUEST = "InteractionRequestEvent",
INTERACTION_REPLY = "InteractionReplyEvent",
- INTERACTION_ABORTED = "InteractionAbortedEvent"
+ INTERACTION_ABORTED = "InteractionAbortedEvent",
+ INTERACTION_START = "InteractionStarting"
}
diff --git a/client/src/akkamon/client/IncomingEvents.ts b/client/src/akkamon/client/IncomingEvents.ts
index 0674c1c..1145b4c 100644
--- a/client/src/akkamon/client/IncomingEvents.ts
+++ b/client/src/akkamon/client/IncomingEvents.ts
@@ -7,6 +7,8 @@ export interface IncomingEvent extends AkkamonEvent {
remoteMovementQueues?:{[trainerId: string]: { value: Array<Direction> }}
trainerId?: string
requestId?: number
+ requestName?: string
+ interactionType?: string
}
export class IncomingInteractionRequest implements IncomingEvent {
diff --git a/client/src/akkamon/client/InteractionEngine.ts b/client/src/akkamon/client/InteractionEngine.ts
index cf0c947..f54ced4 100644
--- a/client/src/akkamon/client/InteractionEngine.ts
+++ b/client/src/akkamon/client/InteractionEngine.ts
@@ -13,7 +13,6 @@ import type {
IncomingInteractionRequest
} from './IncomingEvents';
-
export class InteractionEngine extends AkkamonEngine {
private scene: WorldScene;
@@ -28,21 +27,30 @@ export class InteractionEngine extends AkkamonEngine {
private answering: boolean = false;
+ private waitingForInteractionToStart: boolean = false;
+
constructor(scene: WorldScene) {
super();
this.scene = scene;
}
playerIsBusy() {
- return this.waitingForResponseOf || this.awaitingInit || this.answering
+ return this.waitingForResponseOf || this.awaitingInit || this.answering;
}
update() {
if (!this.requestBackLog.isEmpty()
&& !this.playerIsBusy()
&& this.scene.menus.isEmpty()) {
+
let message = this.requestBackLog.pop();
- this.scene.pushMenu(new InteractionRequestDialogue(this.scene, ["YES", "NO"], {name: message!.trainerId, requestType: message!.type}));
+
+ this.answering = true;
+ this.scene.pushMenu(new InteractionRequestDialogue(this.scene, ["YES", "NO"],
+ {name: message!.trainerId,
+ requestType: message!.interactionType,
+ requestName: message!.requestName}
+ ));
}
}
@@ -54,9 +62,8 @@ export class InteractionEngine extends AkkamonEngine {
// check trainerId
if (this.awaitingInit) {
this.waitingForResponseOf = event.requestName;
- this.scene.clearMenus();
- this.scene.pushMenu(new WaitingDialogue(this.scene, new Phaser.GameObjects.Group(this.scene), 20, 'Awaiting player response...'));
+ (this.scene.menus.peek()! as WaitingDialogue).text = 'Awaiting player response...';
this.awaitingInit = false;
} else {
@@ -64,4 +71,21 @@ export class InteractionEngine extends AkkamonEngine {
}
}
+ setAnswering(value: boolean) {
+ this.answering = value;
+ }
+
+ setWaitingForInteractionToStart(value: boolean) {
+ this.waitingForInteractionToStart = value;
+ }
+
+ getWaitingForInteractionToStart() {
+ return this.waitingForInteractionToStart;
+ }
+
+ setWaitingDialogue(text: string) {
+ this.scene.clearMenus();
+ this.scene.pushMenu(new WaitingDialogue(this.scene, new Phaser.GameObjects.Group(this.scene), 20, text));
+ }
+
}
diff --git a/client/src/akkamon/client/OutgoingEvents.ts b/client/src/akkamon/client/OutgoingEvents.ts
index 90b72c6..9feb49b 100644
--- a/client/src/akkamon/client/OutgoingEvents.ts
+++ b/client/src/akkamon/client/OutgoingEvents.ts
@@ -76,3 +76,14 @@ export class OutgoingInteractionRequestEvent implements InteractionEvent {
) { }
}
+export class InteractionReplyEvent implements AkkamonEvent {
+ public type: EventType = EventType.INTERACTION_REPLY;
+
+ constructor(
+ public trainerId: string,
+ public sceneId: string,
+ public requestName: string,
+ public value: boolean
+ ) { }
+}
+
diff --git a/client/src/akkamon/scenes/UIElement.ts b/client/src/akkamon/scenes/UIElement.ts
index f1d5dd3..c77503e 100644
--- a/client/src/akkamon/scenes/UIElement.ts
+++ b/client/src/akkamon/scenes/UIElement.ts
@@ -1,4 +1,7 @@
import type { WorldScene } from '../scenes/WorldScene';
+
+import { client } from '../../app';
+
import { Direction } from '../render/Direction';
import {
baseQueue,
@@ -441,8 +444,16 @@ class ChallengeDialogue extends ConfirmationDialogue implements AkkamonMenu {
export class InteractionRequestDialogue extends ConfirmationDialogue implements AkkamonMenu {
- constructor(scene: WorldScene, options: Array<string>, dialogueData: {name: string, requestType: string}) {
+ private requestName: string;
+
+ dialogueData;
+
+ constructor(scene: WorldScene, options: Array<string>, dialogueData: {name: string, requestType: string, requestName: string}) {
super(scene, options, dialogueData);
+ this.dialogueData = dialogueData;
+
+ this.requestName = dialogueData.requestName;
+
this.dialogueBox!.push(
`Do you want to ${dialogueData.requestType} with ${dialogueData.name}?`
);
@@ -451,7 +462,13 @@ export class InteractionRequestDialogue extends ConfirmationDialogue implements
confirm() {
if (this.buttons![this.index!].text === "YES") {
+ console.log("Sending true!");
+ this.akkamonScene.requestConfirmInteractionReply(true, this.requestName);
+ this.akkamonScene.clearMenus();
+ this.akkamonScene.pushMenu(new WaitingDialogue(this.akkamonScene, new Phaser.GameObjects.Group(this.scene), 20, `Waiting for ${this.dialogueData.requestType} to start...`));
} else {
+ console.log("Sending false!");
+ this.akkamonScene.requestConfirmInteractionReply(false, this.requestName);
this.destroyAndGoBack();
}
}
@@ -462,14 +479,17 @@ export class InteractionRequestDialogue extends ConfirmationDialogue implements
}
}
+
export class WaitingDialogue extends Dialogue {
+ text: string;
waitingPrinter: any
constructor(scene: WorldScene, group: Phaser.GameObjects.Group, depth: number, text: string) {
super(scene, group, depth);
- this.typewriteText(text);
+ this.text = text;
+ this.typewriteText(this.text);
this.waitingPrinter = setInterval(() => {
this.displayedText.text = '';
- this.typewriteText(text);
+ this.typewriteText(this.text);
}, 3000);
}
diff --git a/client/src/akkamon/scenes/WorldScene.ts b/client/src/akkamon/scenes/WorldScene.ts
index 3e8db40..f125a0e 100644
--- a/client/src/akkamon/scenes/WorldScene.ts
+++ b/client/src/akkamon/scenes/WorldScene.ts
@@ -46,6 +46,7 @@ export interface WorldScene extends Phaser.Scene {
clearMenus: () => void
+ requestConfirmInteractionReply: (v: boolean, requestName: string) => void
}
@@ -161,5 +162,9 @@ export function createWorldScene<PhaserScene extends BasePhaserScene>(scene: Pha
}
}
+ requestConfirmInteractionReply(value: boolean, requestName: string) {
+ client.sendInteractionReply(value, requestName);
+ }
+
}
}