feat: update stat handling by introducing specific types for GeneralStatName and WarStatName across various modules

This commit is contained in:
2026-01-03 09:49:46 +00:00
parent d1522ff450
commit 395d937fd5
11 changed files with 170 additions and 71 deletions
+5 -4
View File
@@ -1,8 +1,9 @@
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { ItemModule, ItemSlot } from './types.js';
const resolveStatLabel = (statName: string): string => {
const resolveStatLabel = (statName: GeneralStatName): string => {
switch (statName) {
case 'leadership':
return '통솔';
@@ -37,19 +38,19 @@ export const createStatItemModule = (
const info = options.extraInfo ? `${baseInfo}<br>${options.extraInfo}` : baseInfo;
function onCalcStat(
_context: GeneralActionContext,
statName: string,
statName: GeneralStatName,
value: number,
_aux?: unknown
): number;
function onCalcStat(
_context: WarActionContext,
statName: string,
statName: WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: string,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (statName !== options.statName) {
@@ -1,6 +1,7 @@
import { createStatItemModule } from './base.js';
import type { ItemModule } from './types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
const STAT_VALUE = 3;
@@ -22,19 +23,19 @@ export const itemModule: ItemModule = {
onCalcStat: (() => {
function onCalcStat(
_context: GeneralActionContext,
statName: string,
statName: GeneralStatName,
value: number,
_aux?: unknown
): number;
function onCalcStat(
_context: WarActionContext,
statName: string,
statName: WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: string,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
let base = value;
@@ -1,6 +1,7 @@
import { createStatItemModule } from './base.js';
import type { ItemModule } from './types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
const STAT_VALUE = 8;
@@ -23,19 +24,19 @@ export const itemModule: ItemModule = {
onCalcStat: (() => {
function onCalcStat(
_context: GeneralActionContext,
statName: string,
statName: GeneralStatName,
value: number,
_aux?: unknown
): number;
function onCalcStat(
_context: WarActionContext,
statName: string,
statName: WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: string,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
let base = value;
+22 -11
View File
@@ -4,6 +4,17 @@ import {
GeneralTriggerCaller,
type GeneralActionContext,
} from '@sammo-ts/logic/triggers/general.js';
import type {
GeneralStatName,
TriggerActionPhase,
TriggerActionType,
TriggerDomesticActionType,
TriggerDomesticVarType,
TriggerNationalIncomeType,
TriggerStrategicActionType,
TriggerStrategicVarType,
WarStatName,
} from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext, WarActionModule } from '@sammo-ts/logic/war/actions.js';
import { WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js';
@@ -138,8 +149,8 @@ class ItemGeneralActionRouter<
onCalcDomestic(
context: GeneralActionContext<TriggerState>,
turnType: string,
varType: string,
turnType: TriggerDomesticActionType,
varType: TriggerDomesticVarType,
value: number,
aux?: unknown
): number {
@@ -155,7 +166,7 @@ class ItemGeneralActionRouter<
onCalcStat(
context: GeneralActionContext<TriggerState>,
statName: string,
statName: GeneralStatName,
value: number,
aux?: unknown
): number {
@@ -171,7 +182,7 @@ class ItemGeneralActionRouter<
onCalcOpposeStat(
context: GeneralActionContext<TriggerState>,
statName: string,
statName: GeneralStatName,
value: number,
aux?: unknown
): number {
@@ -187,8 +198,8 @@ class ItemGeneralActionRouter<
onCalcStrategic(
context: GeneralActionContext<TriggerState>,
turnType: string,
varType: string,
turnType: TriggerStrategicActionType,
varType: TriggerStrategicVarType,
value: number
): number {
let current = value;
@@ -203,7 +214,7 @@ class ItemGeneralActionRouter<
onCalcNationalIncome(
context: GeneralActionContext<TriggerState>,
type: string,
type: TriggerNationalIncomeType,
amount: number
): number {
let current = amount;
@@ -218,8 +229,8 @@ class ItemGeneralActionRouter<
onArbitraryAction(
context: GeneralActionContext<TriggerState>,
actionType: string,
phase?: string | null,
actionType: TriggerActionType,
phase?: TriggerActionPhase | null,
aux?: Record<string, unknown> | null
): Record<string, unknown> | null {
let current = aux ?? null;
@@ -283,7 +294,7 @@ class ItemWarActionRouter<
onCalcStat(
context: WarActionContext<TriggerState>,
statName: string,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number] {
@@ -299,7 +310,7 @@ class ItemWarActionRouter<
onCalcOpposeStat(
context: WarActionContext<TriggerState>,
statName: string,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number] {
+22 -11
View File
@@ -3,6 +3,17 @@ import type {
GeneralActionContext,
GeneralTriggerCaller,
} from '@sammo-ts/logic/triggers/general.js';
import type {
GeneralStatName,
TriggerActionPhase,
TriggerActionType,
TriggerDomesticActionType,
TriggerDomesticVarType,
TriggerNationalIncomeType,
TriggerStrategicActionType,
TriggerStrategicVarType,
WarStatName,
} from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js';
@@ -29,8 +40,8 @@ export interface ItemModule<
onCalcDomestic?(
context: GeneralActionContext<TriggerState>,
turnType: string,
varType: string,
turnType: TriggerDomesticActionType,
varType: TriggerDomesticVarType,
value: number,
aux?: unknown
): number;
@@ -38,13 +49,13 @@ export interface ItemModule<
onCalcStat?: {
(
context: GeneralActionContext<TriggerState>,
statName: string,
statName: GeneralStatName,
value: number,
aux?: unknown
): number;
(
context: WarActionContext<TriggerState>,
statName: string,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
@@ -53,13 +64,13 @@ export interface ItemModule<
onCalcOpposeStat?: {
(
context: GeneralActionContext<TriggerState>,
statName: string,
statName: GeneralStatName,
value: number,
aux?: unknown
): number;
(
context: WarActionContext<TriggerState>,
statName: string,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
@@ -67,21 +78,21 @@ export interface ItemModule<
onCalcStrategic?(
context: GeneralActionContext<TriggerState>,
turnType: string,
varType: string,
turnType: TriggerStrategicActionType,
varType: TriggerStrategicVarType,
value: number
): number;
onCalcNationalIncome?(
context: GeneralActionContext<TriggerState>,
type: string,
type: TriggerNationalIncomeType,
amount: number
): number;
onArbitraryAction?(
context: GeneralActionContext<TriggerState>,
actionType: string,
phase?: string | null,
actionType: TriggerActionType,
phase?: TriggerActionPhase | null,
aux?: Record<string, unknown> | null
): Record<string, unknown> | null;