feat: Action 호출 타입 설계
- 호출 시점에선 강타입으로.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import type { IResourceController } from "@/IResourceController.js";
|
||||
import type { CityID, GeneralID, NationID, TroopID } from "@/defs.js";
|
||||
import { NotYetImplemented } from "@sammo/util";
|
||||
|
||||
|
||||
export type QueueType = 'server' | 'api';
|
||||
//type QueueType = 'server' | 'npc' | 'api';
|
||||
|
||||
export function setDefenceTrained(invoker: QueueType, arg: { generalID: GeneralID, defenceTrained: number }, rsc: IResourceController): void{
|
||||
throw new NotYetImplemented();
|
||||
}
|
||||
|
||||
export function kickTroopMember(invoker: QueueType, arg: { nationID: NationID, troopID: TroopID, memberID: GeneralID }, rsc: IResourceController): void {
|
||||
throw new NotYetImplemented();
|
||||
}
|
||||
|
||||
|
||||
export function blockAttackCommand(invoker: QueueType, arg: { nationID: NationID, block: boolean }, rsc: IResourceController): void {
|
||||
throw new NotYetImplemented();
|
||||
}
|
||||
|
||||
export function blockJoinNation(invoker: QueueType, arg: { nationID: NationID, block: boolean }, rsc: IResourceController): void {
|
||||
throw new NotYetImplemented();
|
||||
}
|
||||
|
||||
export function createGeneral(invoker: QueueType, arg: {
|
||||
//유산 값등은 외부에서 처리하고 내부에는 순수 랜덤류만 입력
|
||||
name: string,
|
||||
ownerID: number,
|
||||
ownerName: string,
|
||||
leadership: number,
|
||||
strength: number,
|
||||
intel: number,
|
||||
pic: string
|
||||
character: string
|
||||
|
||||
turntimeZone?: number,
|
||||
warSpecial?: string,
|
||||
city?: CityID,
|
||||
bonusStat?: [number, number, number],
|
||||
|
||||
//penalty: Record<GeneralPenalty, number>,
|
||||
}, rsc: IResourceController):void{
|
||||
throw new NotYetImplemented();
|
||||
}
|
||||
|
||||
type ActionFunc<Arg extends Record<string, any>, Res> = (invoker: QueueType, arg: Arg, rsc: IResourceController)=>Res;
|
||||
export type ActionPackDef = {
|
||||
[key: string]: ActionFunc<any, any>
|
||||
}
|
||||
|
||||
export const ActionRequestList = {
|
||||
setDefenceTrained,
|
||||
kickTroopMember,
|
||||
blockAttackCommand,
|
||||
blockJoinNation,
|
||||
createGeneral,
|
||||
} as const satisfies ActionPackDef;
|
||||
|
||||
export type ActionRequestKey = keyof typeof ActionRequestList;
|
||||
export type ActionMainArg<T extends ActionRequestKey> = Parameters<typeof ActionRequestList[T]>[1];
|
||||
export type ActionRes<T extends ActionRequestKey> = ReturnType<typeof ActionRequestList[T]>;
|
||||
@@ -1,6 +1,6 @@
|
||||
export * from "./LogicFunc/generalStats.js";
|
||||
export * as defs from "./defs.js";
|
||||
export * from "./IResourceController.js";
|
||||
|
||||
export * from "./ActionRequest/index.js";
|
||||
// NOTE: game_logic은 client, server 모두에서 사용되는 라이브러리이다.
|
||||
// DB에 접근한다면 DI여야하나?
|
||||
Reference in New Issue
Block a user