refactor: centralize calc config defaults
This commit is contained in:
@@ -6,6 +6,7 @@ from core.basic.equipment import OathSuit, Suit, get_equipment
|
|||||||
from ..formula import 增幅计算, 强化技攻, 武器强化计算, 精通计算, 耳环计算, 左右计算, 锻造计算
|
from ..formula import 增幅计算, 强化技攻, 武器强化计算, 精通计算, 耳环计算, 左右计算, 锻造计算
|
||||||
from ..roleinfo import CharacterEmblemInfo, CharacterEquipInfo, CharacterOathInfo, get_key_by_value
|
from ..roleinfo import CharacterEmblemInfo, CharacterEquipInfo, CharacterOathInfo, get_key_by_value
|
||||||
from .base import CharacterBase
|
from .base import CharacterBase
|
||||||
|
from .config_view import CalcConfigView
|
||||||
|
|
||||||
|
|
||||||
@cache
|
@cache
|
||||||
@@ -403,12 +404,13 @@ class CalcEquipMixin(CharacterBase):
|
|||||||
# region 主计算入口
|
# region 主计算入口
|
||||||
|
|
||||||
def calc(self, setInfo: dict[str, dict]):
|
def calc(self, setInfo: dict[str, dict]):
|
||||||
self.calc_init(setInfo)
|
config = CalcConfigView(setInfo).as_legacy_dict()
|
||||||
|
self.calc_init(config)
|
||||||
self.SetBaseStatus()
|
self.SetBaseStatus()
|
||||||
self.calc_jade(setInfo.get('jades', []))
|
self.calc_jade(config.get('jades', []))
|
||||||
self.calc_avatar(setInfo.get('avatar', {}))
|
self.calc_avatar(config.get('avatar', {}))
|
||||||
self.calc_basic()
|
self.calc_basic()
|
||||||
self.calc_sundry(setInfo.get('sundry', {}))
|
self.calc_sundry(config.get('sundry', {}))
|
||||||
self.calc_emblems()
|
self.calc_emblems()
|
||||||
suit = self.calc_suits()
|
suit = self.calc_suits()
|
||||||
self.calc_equs()
|
self.calc_equs()
|
||||||
@@ -430,7 +432,7 @@ class CalcEquipMixin(CharacterBase):
|
|||||||
self.输出类型 = '魔法百分比'
|
self.输出类型 = '魔法百分比'
|
||||||
else:
|
else:
|
||||||
self.输出类型 = '物理百分比'
|
self.输出类型 = '物理百分比'
|
||||||
skillInfos = self.calc_carry_skills(setInfo.get('DSB', False), setInfo.get('BUFF', False))
|
skillInfos = self.calc_carry_skills(config.get('DSB', False), config.get('BUFF', False))
|
||||||
info = self.get_carry_info()
|
info = self.get_carry_info()
|
||||||
return {'uuid': uuid1().hex, 'skills': skillInfos, 'info': info, 'suits': suit, 'buffer': self.buffer}
|
return {'uuid': uuid1().hex, 'skills': skillInfos, 'info': info, 'suits': suit, 'buffer': self.buffer}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
from collections.abc import Mapping
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class CalcConfigView:
|
||||||
|
def __init__(self, raw: Mapping[str, Any] | None):
|
||||||
|
self.raw = dict(raw or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def equips(self) -> dict[str, dict[str, Any]]:
|
||||||
|
return dict(self.raw.get('equips') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def oaths(self) -> dict[str, dict[str, Any]]:
|
||||||
|
return dict(self.raw.get('oaths') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def emblems(self) -> dict[str, dict[str, Any]]:
|
||||||
|
return dict(self.raw.get('emblems') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def skills(self) -> dict[str, dict[str, Any]]:
|
||||||
|
return dict(self.raw.get('skills') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def avatar(self) -> dict[str, Any]:
|
||||||
|
return dict(self.raw.get('avatar') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sundry(self) -> dict[str, Any]:
|
||||||
|
return dict(self.raw.get('sundry') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def jades(self) -> dict[str, Any]:
|
||||||
|
return dict(self.raw.get('jades') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def options(self) -> dict[str, Any]:
|
||||||
|
return dict(self.raw.get('options') or {})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def dsb(self) -> bool:
|
||||||
|
return bool(self.raw.get('DSB', False))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def buff(self) -> bool:
|
||||||
|
return bool(self.raw.get('BUFF', False))
|
||||||
|
|
||||||
|
def as_legacy_dict(self) -> dict[str, Any]:
|
||||||
|
data = dict(self.raw)
|
||||||
|
data.setdefault('equips', {})
|
||||||
|
data.setdefault('oaths', {})
|
||||||
|
data.setdefault('emblems', {})
|
||||||
|
data.setdefault('skills', {})
|
||||||
|
data.setdefault('avatar', {})
|
||||||
|
data.setdefault('sundry', {})
|
||||||
|
data.setdefault('jades', {})
|
||||||
|
data.setdefault('options', {})
|
||||||
|
data.setdefault('DSB', False)
|
||||||
|
data.setdefault('BUFF', False)
|
||||||
|
return data
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
from core.basic.character.config_view import CalcConfigView
|
||||||
|
|
||||||
|
|
||||||
|
def test_config_view_provides_defaults():
|
||||||
|
view = CalcConfigView(None)
|
||||||
|
|
||||||
|
assert view.equips == {}
|
||||||
|
assert view.oaths == {}
|
||||||
|
assert view.emblems == {}
|
||||||
|
assert view.skills == {}
|
||||||
|
assert view.avatar == {}
|
||||||
|
assert view.sundry == {}
|
||||||
|
assert view.jades == {}
|
||||||
|
assert view.options == {}
|
||||||
|
assert view.dsb is False
|
||||||
|
assert view.buff is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_config_view_preserves_legacy_keys():
|
||||||
|
view = CalcConfigView({'skills': {'100': {'lv': 1}}, 'BUFF': True})
|
||||||
|
|
||||||
|
data = view.as_legacy_dict()
|
||||||
|
|
||||||
|
assert data['skills'] == {'100': {'lv': 1}}
|
||||||
|
assert data['BUFF'] is True
|
||||||
|
assert data['DSB'] is False
|
||||||
|
assert data['equips'] == {}
|
||||||
Reference in New Issue
Block a user