mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-04-22 22:33:49 -07:00
Stardew Valley: Remove some events for a slight performance increase (#4085)
This commit is contained in:
@@ -4,7 +4,7 @@ from dataclasses import dataclass, field
|
||||
from functools import cached_property, singledispatch
|
||||
from typing import Iterable, Set, Tuple, List, Optional
|
||||
|
||||
from BaseClasses import CollectionState
|
||||
from BaseClasses import CollectionState, Location, Entrance
|
||||
from worlds.generic.Rules import CollectionRule
|
||||
from . import StardewRule, AggregatingStardewRule, Count, Has, TotalReceived, Received, Reach, true_
|
||||
|
||||
@@ -12,10 +12,10 @@ from . import StardewRule, AggregatingStardewRule, Count, Has, TotalReceived, Re
|
||||
@dataclass
|
||||
class RuleExplanation:
|
||||
rule: StardewRule
|
||||
state: CollectionState
|
||||
state: CollectionState = field(repr=False, hash=False)
|
||||
expected: bool
|
||||
sub_rules: Iterable[StardewRule] = field(default_factory=list)
|
||||
explored_rules_key: Set[Tuple[str, str]] = field(default_factory=set)
|
||||
explored_rules_key: Set[Tuple[str, str]] = field(default_factory=set, repr=False, hash=False)
|
||||
current_rule_explored: bool = False
|
||||
|
||||
def __post_init__(self):
|
||||
@@ -38,13 +38,6 @@ class RuleExplanation:
|
||||
if i.result is not self.expected else i.summary(depth + 1)
|
||||
for i in sorted(self.explained_sub_rules, key=lambda x: x.result))
|
||||
|
||||
def __repr__(self, depth=0):
|
||||
if not self.sub_rules:
|
||||
return self.summary(depth)
|
||||
|
||||
return self.summary(depth) + "\n" + "\n".join(i.__repr__(depth + 1)
|
||||
for i in sorted(self.explained_sub_rules, key=lambda x: x.result))
|
||||
|
||||
@cached_property
|
||||
def result(self) -> bool:
|
||||
try:
|
||||
@@ -134,6 +127,10 @@ def _(rule: Reach, state: CollectionState, expected: bool, explored_spots: Set[T
|
||||
access_rules = [Reach(spot.parent_region.name, "Region", rule.player)]
|
||||
else:
|
||||
access_rules = [spot.access_rule, Reach(spot.parent_region.name, "Region", rule.player)]
|
||||
elif spot.access_rule == Location.access_rule:
|
||||
# Sometime locations just don't have an access rule and all the relevant logic is in the parent region.
|
||||
access_rules = [Reach(spot.parent_region.name, "Region", rule.player)]
|
||||
|
||||
|
||||
elif rule.resolution_hint == 'Entrance':
|
||||
spot = state.multiworld.get_entrance(rule.spot, rule.player)
|
||||
@@ -143,6 +140,9 @@ def _(rule: Reach, state: CollectionState, expected: bool, explored_spots: Set[T
|
||||
access_rules = [Reach(spot.parent_region.name, "Region", rule.player)]
|
||||
else:
|
||||
access_rules = [spot.access_rule, Reach(spot.parent_region.name, "Region", rule.player)]
|
||||
elif spot.access_rule == Entrance.access_rule:
|
||||
# Sometime entrances just don't have an access rule and all the relevant logic is in the parent region.
|
||||
access_rules = [Reach(spot.parent_region.name, "Region", rule.player)]
|
||||
|
||||
else:
|
||||
spot = state.multiworld.get_region(rule.spot, rule.player)
|
||||
|
||||
Reference in New Issue
Block a user