wip: gameEngine
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user