41 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from typing import Union | ||
|  | 
 | ||
|  | from Utils import cache_self1 | ||
|  | from .base_logic import BaseLogic, BaseLogicMixin | ||
|  | from .has_logic import HasLogicMixin | ||
|  | from .received_logic import ReceivedLogicMixin | ||
|  | from .region_logic import RegionLogicMixin | ||
|  | from ..stardew_rule import StardewRule, True_, Or | ||
|  | from ..strings.generic_names import Generic | ||
|  | from ..strings.geode_names import Geode | ||
|  | from ..strings.region_names import Region | ||
|  | 
 | ||
|  | 
 | ||
|  | class ActionLogicMixin(BaseLogicMixin): | ||
|  |     def __init__(self, *args, **kwargs): | ||
|  |         super().__init__(*args, **kwargs) | ||
|  |         self.action = ActionLogic(*args, **kwargs) | ||
|  | 
 | ||
|  | 
 | ||
|  | class ActionLogic(BaseLogic[Union[ActionLogicMixin, RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin]]): | ||
|  | 
 | ||
|  |     def can_watch(self, channel: str = None): | ||
|  |         tv_rule = True_() | ||
|  |         if channel is None: | ||
|  |             return tv_rule | ||
|  |         return self.logic.received(channel) & tv_rule | ||
|  | 
 | ||
|  |     def can_pan(self) -> StardewRule: | ||
|  |         return self.logic.received("Glittering Boulder Removed") & self.logic.region.can_reach(Region.mountain) | ||
|  | 
 | ||
|  |     def can_pan_at(self, region: str) -> StardewRule: | ||
|  |         return self.logic.region.can_reach(region) & self.logic.action.can_pan() | ||
|  | 
 | ||
|  |     @cache_self1 | ||
|  |     def can_open_geode(self, geode: str) -> StardewRule: | ||
|  |         blacksmith_access = self.logic.region.can_reach(Region.blacksmith) | ||
|  |         geodes = [Geode.geode, Geode.frozen, Geode.magma, Geode.omni] | ||
|  |         if geode == Generic.any: | ||
|  |             return blacksmith_access & Or(*(self.logic.has(geode_type) for geode_type in geodes)) | ||
|  |         return blacksmith_access & self.logic.has(geode) |