wip: gameEngine

This commit is contained in:
2024-03-09 07:46:27 +00:00
parent 31184c1cd4
commit 473963b58b
+19 -6
View File
@@ -41,6 +41,7 @@ export class GameEngine {
private async gameLoop(): Promise<void> {
let generalWaitTimer: ReturnType<typeof setTimeout> | null = null;
let prevSaveWaiter: Promise<void> | null = null;
while (this.continueRun) {
//가장 빠른 장수
do {
@@ -55,6 +56,7 @@ export class GameEngine {
if (waitGeneralTurnMs > 0) {
generalWaitTimer = setTimeout(() => {
this.signal.notify();
generalWaitTimer = null;
}, waitGeneralTurnMs);
}
else {
@@ -62,8 +64,9 @@ export class GameEngine {
}
} while (0);
//이벤트 대기
const waitResult = await this.signal.wait();
//이벤트 대기
await this.signal.wait();
if (generalWaitTimer) {
clearTimeout(generalWaitTimer);
}
@@ -101,6 +104,8 @@ export class GameEngine {
for (const [invoker, queue] of entriesWithType(this.actionQueue)) {
let processEventCount = 0;
let responseQueue: (() => void)[] = [];
while (!queue.isEmpty()) {
const action = must(queue.shift());
@@ -114,10 +119,14 @@ export class GameEngine {
this.queueWaiters.delete(action.waiterSeq);
if (errorReason) {
ticketRejected(errorReason);
responseQueue.push(() => {
ticketRejected(errorReason);
});
}
else {
ticketResolve({ success: true });
responseQueue.push(() => {
ticketResolve({ success: true });
});
}
processEventCount++;
@@ -125,7 +134,11 @@ export class GameEngine {
if (processEventCount > 0) {
await prevSaveWaiter;
prevSaveWaiter = this.rsc.saveAll();
prevSaveWaiter = null;
await this.rsc.saveAll();
for(const response of responseQueue){
response();
}
}
}
}
@@ -146,7 +159,7 @@ export class GameEngine {
return false;
}
for(const queue of Object.values(this.actionQueue)){
for (const queue of Object.values(this.actionQueue)) {
queue.clear();
}