Stardew Valley: Remove some events for a slight performance increase (#4085)

This commit is contained in:
Jouramie
2024-11-29 14:41:26 -05:00
committed by GitHub
parent d36c983461
commit ed4e44b994
9 changed files with 48 additions and 76 deletions

View File

@@ -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)