feat: 完成数据端数据类型的构建

This commit is contained in:
AncTe committed 2026-09-20 19:11:43 +08:00
1 parent c0a58706d9
commit d12790280a
30 files changed
+885 -52

No files matched your search

+19 -8
View File
@@ -32,8 +32,15 @@ export class EquipmentState<THero> implements IEquipmentState<THero> {
this.modifiers = [];
const equip = item.equip;
this.value = new Map(equip.value);
this.percentage = new Map(equip.percentage);
this.value = new Map(
Object.entries(equip.value) as [SelectKey<THero, number>, number][]
);
this.percentage = new Map(
Object.entries(equip.percentage) as [
SelectKey<THero, number>,
number
][]
);
if (buildModifier) {
this.rebuildModifiers();
@@ -81,14 +88,14 @@ export class EquipmentState<THero> implements IEquipmentState<THero> {
const { value, percentage } = this.item.equip;
const valueDiff = new Map<SelectKey<THero, number>, number>();
for (const [name, equipValue] of this.value) {
const base = value.get(name);
const base = value[name];
if (base !== equipValue) {
valueDiff.set(name, equipValue);
}
}
const perDiff = new Map<SelectKey<THero, number>, number>();
for (const [name, equipPer] of this.percentage) {
const base = percentage.get(name);
const base = percentage[name];
if (base !== equipPer) {
perDiff.set(name, equipPer);
}
@@ -134,11 +141,15 @@ export class EquipmentState<THero> implements IEquipmentState<THero> {
this.percentage.clear();
// 基准为装备原始定义,再叠加存档中的差异条目
for (const [name, value] of this.item.equip.value) {
this.value.set(name, value);
for (const [name, value] of Object.entries<number>(
this.item.equip.value
)) {
this.value.set(name as SelectKey<THero, number>, value);
}
for (const [name, value] of this.item.equip.percentage) {
this.percentage.set(name, value);
for (const [name, value] of Object.entries<number>(
this.item.equip.percentage
)) {
this.percentage.set(name as SelectKey<THero, number>, value);
}
// 差异内容
+8 -5
View File
@@ -84,7 +84,7 @@ export class HeroItems<THero> implements IHeroItems<THero> {
if (raw.category === ItemCategory.Pick) {
for (let i = 0; i < count; i++) {
raw.effect.useEffect(raw);
raw.effect.useEffect?.(raw, this.state);
}
return;
}
@@ -104,7 +104,8 @@ export class HeroItems<THero> implements IHeroItems<THero> {
map.delete(num);
}
} else if (count > 0) {
map.set(num, { id: raw.id, num: raw.num, raw, count });
const store = this.state.tileStore;
map.set(num, { id: store.id(raw.num)!, num: raw.num, raw, count });
}
}
@@ -124,12 +125,13 @@ export class HeroItems<THero> implements IHeroItems<THero> {
return false;
}
if (!raw.effect.canUse(raw)) return false;
const can = raw.effect.canUse?.(raw, this.state) ?? true;
if (!can) return false;
const replay = this.state.replaySystem;
replay.array.add(ReplayCode.UseItem, [raw.num]);
raw.effect.useEffect(raw);
raw.effect.useEffect?.(raw, this.state);
if (raw.category === ItemCategory.Consumable) {
state.count--;
@@ -167,8 +169,9 @@ export class HeroItems<THero> implements IHeroItems<THero> {
for (const save of saves) {
const raw = this.state.itemStore.getData(save.num);
if (!raw) continue;
const store = this.state.tileStore;
map.set(save.num, {
id: raw.id,
id: store.id(raw.num)!,
num: raw.num,
raw,
count: save.count