blob: f7750464826616618eb12ab880ba907ce8074691 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
import type { BattleEvent, BattleInitEvent, BattleMessage, BattleState } from '../client/IncomingEvents';
import { baseQueue, queueFromArray } from '../DataWrappers';
import type BattleScene from '../scenes/BattleScene';
import type { WorldScene } from '../scenes/WorldScene';
import { BattleDialogue, BattleOptions } from './battleUI';
import {
AkkamonEngine
} from './engine/AkkamonEngine';
import { client } from '../../app';
export enum BattleEventType {
INTRODUCTION = "INTRODUCTION"
}
export interface BattleUIEvent {
}
export class InstantUIEvent implements BattleUIEvent {
constructor(
public callback: () => void
) { }
}
export class DialogueUIEvent implements BattleUIEvent {
constructor(
public dialogue: string,
public callback: () => void
) { }
}
export class BattleEngine extends AkkamonEngine {
public scene?: BattleScene
private eventsToPlay = baseQueue<BattleEvent>();
private state: BattleState
private uiEventTriggers = baseQueue<() => void>();
constructor(
message: BattleMessage,
) {
super();
this.state = message.state;
this.eventsToPlay.pushArray(message.eventsToPlay);
}
getOpponentName(): string {
console.log(this.state.teams);
for (let key in this.state.teams) {
if (key !== client.getTrainerID()!.id) {
return key;
}
}
return '';
}
update() {
if (this.scene && !this.eventsToPlay.isEmpty()) {
console.log(this.eventsToPlay.peek()!);
console.log(BattleEventType.INTRODUCTION);
let eventToPlay = this.eventsToPlay.pop()!;
this[eventToPlay.id](eventToPlay)
}
if (!this.scene!.isBusy() && !this.uiEventTriggers.isEmpty()) {
console.log("Scene is no longer busy! Triggering:");
console.log(this.uiEventTriggers.peek());
this.uiEventTriggers.pop()!();
}
}
pushUIEvent(event: () => void) {
this.uiEventTriggers.push(event);
}
[BattleEventType.INTRODUCTION](eventToPlay: BattleEvent) {
let scene = this.scene!;
let opponentName = this.getOpponentName();
// scene.showPlayerSprites();
scene.pushEvents(
[
new DialogueUIEvent(opponentName + " wants to fight!", () => {scene.busy = false;}),
new DialogueUIEvent(opponentName + " sent out " + this.state.teams[opponentName].activeMon.name + "!", () => {scene.busy = false;})
],
() => {
scene.pushMenu(new BattleOptions(
scene
));
});
}
}
|