feat: update stat handling by introducing specific types for GeneralStatName and WarStatName across various modules
This commit is contained in:
@@ -7,6 +7,7 @@ import type {
|
||||
Nation,
|
||||
} from '@sammo-ts/logic/domain/entities.js';
|
||||
import type { ActionLogger } from '@sammo-ts/logic/logging/actionLogger.js';
|
||||
import type { WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||
import type { WarUnit } from './units.js';
|
||||
import { WarTriggerCaller } from './triggers.js';
|
||||
|
||||
@@ -33,14 +34,14 @@ export interface WarActionModule<TriggerState extends GeneralTriggerState = Gene
|
||||
|
||||
onCalcStat?(
|
||||
context: WarActionContext<TriggerState>,
|
||||
statName: string,
|
||||
statName: WarStatName,
|
||||
value: number | [number, number],
|
||||
aux?: unknown
|
||||
): number | [number, number];
|
||||
|
||||
onCalcOpposeStat?(
|
||||
context: WarActionContext<TriggerState>,
|
||||
statName: string,
|
||||
statName: WarStatName,
|
||||
value: number | [number, number],
|
||||
aux?: unknown
|
||||
): number | [number, number];
|
||||
@@ -90,7 +91,7 @@ export class WarActionPipeline<
|
||||
|
||||
onCalcStat<T extends number | [number, number]>(
|
||||
context: WarActionContext<TriggerState>,
|
||||
statName: string,
|
||||
statName: WarStatName,
|
||||
value: T,
|
||||
aux?: unknown
|
||||
): T {
|
||||
@@ -106,7 +107,7 @@ export class WarActionPipeline<
|
||||
|
||||
onCalcOpposeStat<T extends number | [number, number]>(
|
||||
context: WarActionContext<TriggerState>,
|
||||
statName: string,
|
||||
statName: WarStatName,
|
||||
value: T,
|
||||
aux?: unknown
|
||||
): T {
|
||||
|
||||
@@ -10,6 +10,7 @@ import type {
|
||||
} from '@sammo-ts/logic/domain/entities.js';
|
||||
import type { ActionLogger } from '@sammo-ts/logic/logging/actionLogger.js';
|
||||
import { LogFormat } from '@sammo-ts/logic/logging/types.js';
|
||||
import type { WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||
import { getTechAbility, getTechCost } from '@sammo-ts/logic/world/unitSet.js';
|
||||
import { WarActionPipeline, type WarActionContext } from './actions.js';
|
||||
import type { WarEngineConfig } from './types.js';
|
||||
@@ -38,6 +39,9 @@ const META_LEADERSHIP_EXP = 'leadershipExp';
|
||||
|
||||
const RANK_WARNUM = `${META_RANK_PREFIX}warnum`;
|
||||
const RANK_KILLNUM = `${META_RANK_PREFIX}killnum`;
|
||||
|
||||
const toDexStatName = (armType: number): WarStatName =>
|
||||
`dex${armType}` as WarStatName;
|
||||
const RANK_DEATHNUM = `${META_RANK_PREFIX}deathnum`;
|
||||
const RANK_OCCUPIED = `${META_RANK_PREFIX}occupied`;
|
||||
const RANK_KILLCREW = `${META_RANK_PREFIX}killcrew`;
|
||||
@@ -526,7 +530,7 @@ export class WarUnitGeneral<
|
||||
}
|
||||
|
||||
private resolveOpposeStatValue(
|
||||
statName: string,
|
||||
statName: WarStatName,
|
||||
value: number,
|
||||
aux?: Record<string, unknown>
|
||||
): number {
|
||||
@@ -549,13 +553,14 @@ export class WarUnitGeneral<
|
||||
isAttacker: this.isAttacker(),
|
||||
opposeType: this.oppose?.getCrewType() ?? null,
|
||||
};
|
||||
const statName = toDexStatName(armType);
|
||||
let dex = this.actionPipeline.onCalcStat(
|
||||
this.getActionContext(),
|
||||
`dex${armType}`,
|
||||
statName,
|
||||
base,
|
||||
aux
|
||||
);
|
||||
dex = this.resolveOpposeStatValue(`dex${armType}`, dex, aux);
|
||||
dex = this.resolveOpposeStatValue(statName, dex, aux);
|
||||
return dex;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user