From ff23cd27b87bd82fd1bf0e949d648d9036fd340e Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sat, 9 Mar 2024 09:19:28 +0000 Subject: [PATCH] feat: RSC TurntimeQueue --- @sammo/game_logic/src/IResourceController.ts | 5 ++- @sammo/server/src/ResourceController.ts | 45 +++++++++++++++++--- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/@sammo/game_logic/src/IResourceController.ts b/@sammo/game_logic/src/IResourceController.ts index 1af1cfc..9c947f7 100644 --- a/@sammo/game_logic/src/IResourceController.ts +++ b/@sammo/game_logic/src/IResourceController.ts @@ -19,7 +19,9 @@ export interface IResourceController { troop(id: TroopID, nation: NationID): Troop | undefined; general(id: GeneralID): General | undefined; - upcomingGeneral(): General | undefined; + peekGeneralTurntimeQueue(): General | undefined; + popGeneralTurntimeQueue(): General | undefined; + insertGeneralTurntimeQueue(general: General, maybeTail: boolean): void; gameEnv(): GameEnv; @@ -50,6 +52,7 @@ export interface IResourceController { createNation(raw: INationEntity): Nation; createTroop(raw: ITroopEntity): Troop; + _getAllChanges(): Record< ValidEntityType, Map]> diff --git a/@sammo/server/src/ResourceController.ts b/@sammo/server/src/ResourceController.ts index 15a820e..244d929 100644 --- a/@sammo/server/src/ResourceController.ts +++ b/@sammo/server/src/ResourceController.ts @@ -2,16 +2,20 @@ import type { IResourceController } from "@sammo/game_logic"; import type { City } from "@sammo/game_logic/src/City.js"; import type { CityID, GeneralID, NationID, TroopID } from "@sammo/game_logic/src/defs.js"; import type { IGeneralEntity } from "@sammo/game_logic/src/Entity/GeneralEntity.js"; -import type { ValidEntityType } from "@sammo/game_logic/src/Entity/index.js"; +import type { ICityEntity, ValidEntityType } from "@sammo/game_logic/src/Entity/index.js"; import type { INationEntity } from "@sammo/game_logic/src/Entity/NationEntity.js"; import type { IReservedTurn } from "@sammo/game_logic/src/Entity/ReservedTurn.js"; import type { ITroopEntity } from "@sammo/game_logic/src/Entity/TroopEntity.js"; import type { GameEnv } from "@sammo/game_logic/src/GameEnv.js"; -import type { General } from "@sammo/game_logic/src/General.js"; +import { General } from "@sammo/game_logic/src/General.js"; import type { LazyEntityUpdater } from "@sammo/game_logic/src/LazyEntityUpdater.js"; import type { Nation } from "@sammo/game_logic/src/Nation.js"; import type { Troop } from "@sammo/game_logic/src/Troop.js"; -import { NotYetImplemented } from "@sammo/util"; +import { insertItemAtArrayLike, NotYetImplemented } from "@sammo/util"; +import Denque from "denque"; + + +type ChangeType = "insert" | "update" | "delete"; //TODO: Implement! export class ResourceController implements IResourceController{ @@ -19,6 +23,24 @@ export class ResourceController implements IResourceController{ } + private _nation: Map = new Map(); + private _city: Map = new Map(); + private _troop: Map = new Map(); + private _general: Map = new Map(); + + //내부적으로 turntime asc, id asc로 동작하는 PriorityQueue + private _generalByTurntime = new Denque(); + + + private changes = { + Nation: new Map(), + City: new Map(), + Troop: new Map(), + General: new Map(), + + GameEnv: new Map(), + } as const satisfies Record]>>; + nation(id: NationID): Nation | undefined { throw new NotYetImplemented(); } @@ -35,8 +57,16 @@ export class ResourceController implements IResourceController{ throw new NotYetImplemented(); } - upcomingGeneral(): General | undefined { - throw new NotYetImplemented(); + peekGeneralTurntimeQueue(): General | undefined { + return this._generalByTurntime.peekFront(); + } + + popGeneralTurntimeQueue(): General | undefined { + return this._generalByTurntime.shift(); + } + + insertGeneralTurntimeQueue(general: General, maybeTail: boolean): void { + insertItemAtArrayLike(this._generalByTurntime, general, (a, b)=>a.compareTurntime(b), maybeTail); } gameEnv(): GameEnv { @@ -110,8 +140,9 @@ export class ResourceController implements IResourceController{ throw new NotYetImplemented(); } - _getAllChanges(): Record]>> { - throw new NotYetImplemented(); + + _getAllChanges(): Record]>> { + return this.changes; } //---- DB 접근 ---