|
1 |
| -from .cached_logic import profile_rule |
2 |
| -from .mine_logic import MineLogic |
3 |
| -from .received_logic import ReceivedLogic |
4 |
| -from .region_logic import RegionLogic |
5 |
| -from .skill_logic import SkillLogic |
6 |
| -from .tool_logic import ToolLogic |
7 |
| -from ..options import NumberOfMovementBuffs, NumberOfLuckBuffs |
8 |
| -from ..mods.logic.magic_logic import MagicLogic |
9 |
| -from ..mods.logic.skills_logic import ModSkillLogic |
| 1 | +from typing import Union |
| 2 | + |
| 3 | +from .base_logic import BaseLogicMixin, BaseLogic |
| 4 | +from .mine_logic import MineLogicMixin |
| 5 | +from .received_logic import ReceivedLogicMixin |
| 6 | +from .region_logic import RegionLogicMixin |
| 7 | +from .skill_logic import SkillLogicMixin |
| 8 | +from .tool_logic import ToolLogicMixin |
| 9 | +from ..mods.logic.magic_logic import MagicLogicMixin |
10 | 10 | from ..stardew_rule import StardewRule
|
11 | 11 | from ..strings.ap_names.buff_names import Buff
|
12 | 12 | from ..strings.region_names import Region
|
13 | 13 | from ..strings.skill_names import Skill, ModSkill
|
14 | 14 | from ..strings.tool_names import ToolMaterial, Tool
|
15 | 15 |
|
16 | 16 |
|
17 |
| -class AbilityLogic: |
18 |
| - player: int |
19 |
| - movement_buff_option: NumberOfMovementBuffs |
20 |
| - luck_buff_option: NumberOfLuckBuffs |
21 |
| - received: ReceivedLogic |
22 |
| - region: RegionLogic |
23 |
| - tool: ToolLogic |
24 |
| - skill: SkillLogic |
25 |
| - mine: MineLogic |
26 |
| - magic: MagicLogic |
27 |
| - mod_skill: ModSkillLogic |
| 17 | +class AbilityLogicMixin(BaseLogicMixin): |
| 18 | + def __init__(self, *args, **kwargs): |
| 19 | + super().__init__(*args, **kwargs) |
| 20 | + self.ability = AbilityLogic(*args, **kwargs) |
28 | 21 |
|
29 |
| - def __init__(self, player: int, movement_buff_option: NumberOfMovementBuffs, luck_buff_option: NumberOfLuckBuffs, received: ReceivedLogic, region: RegionLogic, tool: ToolLogic, |
30 |
| - skill: SkillLogic, mine: MineLogic): |
31 |
| - self.player = player |
32 |
| - self.movement_buff_option = movement_buff_option |
33 |
| - self.luck_buff_option = luck_buff_option |
34 |
| - self.received = received |
35 |
| - self.region = region |
36 |
| - self.tool = tool |
37 |
| - self.skill = skill |
38 |
| - self.mine = mine |
39 |
| - |
40 |
| - def set_magic(self, magic: MagicLogic, mod_skill: ModSkillLogic): |
41 |
| - self.magic = magic |
42 |
| - self.mod_skill = mod_skill |
43 | 22 |
|
| 23 | +class AbilityLogic(BaseLogic[Union[AbilityLogicMixin, RegionLogicMixin, ReceivedLogicMixin, ToolLogicMixin, SkillLogicMixin, MineLogicMixin, MagicLogicMixin]]): |
44 | 24 | def can_mine_perfectly(self) -> StardewRule:
|
45 |
| - return self.mine.can_progress_in_the_mines_from_floor(160) |
| 25 | + return self.logic.mine.can_progress_in_the_mines_from_floor(160) |
46 | 26 |
|
47 | 27 | def can_mine_perfectly_in_the_skull_cavern(self) -> StardewRule:
|
48 |
| - return (self.can_mine_perfectly() & |
49 |
| - self.region.can_reach(Region.skull_cavern)) |
| 28 | + return (self.logic.ability.can_mine_perfectly() & |
| 29 | + self.logic.region.can_reach(Region.skull_cavern)) |
50 | 30 |
|
51 | 31 | def can_farm_perfectly(self) -> StardewRule:
|
52 |
| - tool_rule = self.tool.has_tool(Tool.hoe, ToolMaterial.iridium) & self.tool.can_water(4) |
53 |
| - return tool_rule & self.skill.has_farming_level(10) |
| 32 | + tool_rule = self.logic.tool.has_tool(Tool.hoe, ToolMaterial.iridium) & self.logic.tool.can_water(4) |
| 33 | + return tool_rule & self.logic.skill.has_farming_level(10) |
54 | 34 |
|
55 | 35 | def can_fish_perfectly(self) -> StardewRule:
|
56 |
| - skill_rule = self.skill.has_level(Skill.fishing, 10) |
57 |
| - return skill_rule & self.tool.has_fishing_rod(4) |
| 36 | + skill_rule = self.logic.skill.has_level(Skill.fishing, 10) |
| 37 | + return skill_rule & self.logic.tool.has_fishing_rod(4) |
58 | 38 |
|
59 | 39 | def can_chop_trees(self) -> StardewRule:
|
60 |
| - return self.tool.has_tool(Tool.axe) & self.region.can_reach(Region.forest) |
| 40 | + return self.logic.tool.has_tool(Tool.axe) & self.logic.region.can_reach(Region.forest) |
61 | 41 |
|
62 | 42 | def can_chop_perfectly(self) -> StardewRule:
|
63 |
| - magic_rule = (self.magic.can_use_clear_debris_instead_of_tool_level(3)) & self.mod_skill.has_mod_level(ModSkill.magic, 10) |
64 |
| - tool_rule = self.tool.has_tool(Tool.axe, ToolMaterial.iridium) |
65 |
| - foraging_rule = self.skill.has_level(Skill.foraging, 10) |
66 |
| - region_rule = self.region.can_reach(Region.forest) |
| 43 | + magic_rule = (self.logic.magic.can_use_clear_debris_instead_of_tool_level(3)) & self.logic.mod.skill.has_mod_level(ModSkill.magic, 10) |
| 44 | + tool_rule = self.logic.tool.has_tool(Tool.axe, ToolMaterial.iridium) |
| 45 | + foraging_rule = self.logic.skill.has_level(Skill.foraging, 10) |
| 46 | + region_rule = self.logic.region.can_reach(Region.forest) |
67 | 47 | return region_rule & ((tool_rule & foraging_rule) | magic_rule)
|
68 | 48 |
|
69 | 49 | def has_max_buffs(self) -> StardewRule:
|
70 |
| - return self.received(Buff.movement, self.movement_buff_option.value) & self.received(Buff.luck, self.luck_buff_option.value) |
| 50 | + return self.logic.received(Buff.movement, self.options.movement_buff_number.value) & self.logic.received(Buff.luck, self.options.luck_buff_number.value) |
0 commit comments