Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ pytest.ini
result*
/results/
!zsim/sim_progress/Report/result_handler.py
!zsim/sim_progress/calculation/results/
!zsim/sim_progress/calculation/results/*.py

# 开发工具和环境文件
.idea
Expand Down
11 changes: 11 additions & 0 deletions zsim/sim_progress/calculation/results/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from zsim.sim_progress.calculation.results.common import (
AnomalyScalarResult,
DamageScalarResult,
MultiplierVector,
)

__all__ = [
"AnomalyScalarResult",
"DamageScalarResult",
"MultiplierVector",
]
23 changes: 23 additions & 0 deletions zsim/sim_progress/calculation/results/anomaly.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from __future__ import annotations

from dataclasses import dataclass

from zsim.sim_progress.calculation.inputs.common import AnomalyIdentityProfile
from zsim.sim_progress.calculation.results.common import MultiplierVector


@dataclass(frozen=True, slots=True)
class AnomalyDamageResult:
"""带有乘区依据的标量异常伤害输出。"""

value: float
identity: AnomalyIdentityProfile
multipliers: MultiplierVector
scaling_factor: float
cancelled_snapshot_impact: float
cancelled_snapshot_stun_bonus: float


__all__ = [
"AnomalyDamageResult",
]
45 changes: 45 additions & 0 deletions zsim/sim_progress/calculation/results/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from __future__ import annotations

from dataclasses import dataclass, field
from typing import Iterable

from zsim.sim_progress.calculation.inputs.common import (
AnomalyIdentityProfile,
DamageIdentityProfile,
)


@dataclass(frozen=True, slots=True, init=False)
class MultiplierVector:
"""公式模块返回的只读乘区标签与数值。"""

values: tuple[float, ...]
labels: tuple[str, ...] = ()

def __init__(
self,
values: Iterable[float],
labels: Iterable[str] = (),
) -> None:
object.__setattr__(self, "values", tuple(values))
object.__setattr__(self, "labels", tuple(labels))
if self.labels and len(self.labels) != len(self.values):
raise ValueError("MultiplierVector labels must match values length")


@dataclass(frozen=True, slots=True)
class DamageScalarResult:
"""带有身份与乘区依据的标量伤害输出。"""

value: float
identity: DamageIdentityProfile
multipliers: MultiplierVector = field(default_factory=lambda: MultiplierVector(()))


@dataclass(frozen=True, slots=True)
class AnomalyScalarResult:
"""显式分离伤害、亲和与状态身份的标量异常输出。"""

value: float
identity: AnomalyIdentityProfile
multipliers: MultiplierVector = field(default_factory=lambda: MultiplierVector(()))
21 changes: 21 additions & 0 deletions zsim/sim_progress/calculation/results/regular.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from __future__ import annotations

from dataclasses import dataclass

from zsim.sim_progress.calculation.inputs.common import DamageIdentityProfile
from zsim.sim_progress.calculation.results.common import MultiplierVector


@dataclass(frozen=True, slots=True)
class RegularDamageResult:
"""带有乘区依据的标量常规伤害输出。"""

value: float
identity: DamageIdentityProfile
multipliers: MultiplierVector
mode: str


__all__ = [
"RegularDamageResult",
]
Loading