mirror of
https://github.com/motajs/template.git
synced 2026-11-11 13:34:31 +08:00
feat: 完成数据端数据类型的构建
This commit is contained in:
1 parent
c0a58706d9
commit
d12790280a
30 files changed
+885
-52
No files matched your search
@@ -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);
|
||||
}
|
||||
|
||||
// 差异内容
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user