update root

This commit is contained in:
bridge
2025-09-23 23:27:26 +08:00
parent 440347f5e2
commit 49df94a1a1
7 changed files with 145 additions and 115 deletions

View File

@@ -1,47 +1,90 @@
"""
灵根
目前只有五行:金木水火土。
其实和EssenceType很类似
但是单独拿出来是因为,之后可能整特殊的复杂灵根
所以这里单独定义一个Root类用来描述灵根。
五行元素与灵根组合:
- RootElement金、木、水、火、土
- Root由一个或多个 RootElement 组成(单灵根、双灵根、天灵根
"""
from enum import Enum
from typing import List, Tuple
from src.classes.essence import EssenceType
class Root(Enum):
"""
灵根
"""
class RootElement(Enum):
GOLD = ""
WOOD = ""
WATER = ""
FIRE = ""
EARTH = ""
@classmethod
def from_str(cls, root_str: str) -> 'Root':
"""
从字符串创建Root实例
Args:
root_str: 灵根的字符串表示,如 "", "", "", "", ""
Returns:
对应的Root枚举值
Raises:
ValueError: 如果字符串不匹配任何已知的灵根类型
"""
for root in cls:
if root.value == root_str:
return root
raise ValueError(f"Unknown root type: {root_str}")
corres_essence_type = {
Root.GOLD: EssenceType.GOLD,
Root.WOOD: EssenceType.WOOD,
Root.WATER: EssenceType.WATER,
Root.FIRE: EssenceType.FIRE,
Root.EARTH: EssenceType.EARTH,
def __str__(self) -> str:
return self.value
class Root(Enum):
"""
复合灵根定义:每个成员包含(中文名, 元素列表)
"""
GOLD = ("金灵根", (RootElement.GOLD,))
WOOD = ("木灵根", (RootElement.WOOD,))
WATER = ("水灵根", (RootElement.WATER,))
FIRE = ("火灵根", (RootElement.FIRE,))
EARTH = ("土灵根", (RootElement.EARTH,))
THUNDER = ("雷灵根", (RootElement.WATER, RootElement.EARTH)) # 水+土
ICE = ("冰灵根", (RootElement.GOLD, RootElement.WATER)) # 金+水
WIND = ("风灵根", (RootElement.WOOD, RootElement.WATER)) # 木+水
DARK = ("暗灵根", (RootElement.FIRE, RootElement.EARTH)) # 火+土
HEAVEN = (
"天灵根",
(
RootElement.GOLD,
RootElement.WOOD,
RootElement.WATER,
RootElement.FIRE,
RootElement.EARTH,
),
)
def __new__(cls, cn_name: str, elements: Tuple[RootElement, ...]):
obj = object.__new__(cls)
obj._value_ = cn_name
obj._elements = elements
return obj
@property
def elements(self) -> Tuple[RootElement, ...]:
return self._elements
def __str__(self) -> str:
return f"{self.value}({', '.join(str(e) for e in self.elements)})"
# 元素到灵气类型的一一对应
_essence_by_element = {
RootElement.GOLD: EssenceType.GOLD,
RootElement.WOOD: EssenceType.WOOD,
RootElement.WATER: EssenceType.WATER,
RootElement.FIRE: EssenceType.FIRE,
RootElement.EARTH: EssenceType.EARTH,
}
def get_essence_types_for_root(root: Root) -> List[EssenceType]:
"""
获取与该灵根匹配的灵气类型列表(任一元素匹配即视为可用)。
"""
return [_essence_by_element[e] for e in root.elements]
roots = {
"": Root.GOLD,
"": Root.WOOD,
"": Root.WATER,
"": Root.FIRE,
"": Root.EARTH,
"": Root.THUNDER,
"": Root.ICE,
"": Root.WIND,
"": Root.DARK,
"": Root.HEAVEN,
}