Archipelago/worlds/stardew_valley/stardew_rule/literal.py

57 lines
1.3 KiB
Python

from abc import ABC
from typing import Tuple
from BaseClasses import CollectionState
from .protocol import StardewRule
class LiteralStardewRule(StardewRule, ABC):
value: bool
def evaluate_while_simplifying(self, state: CollectionState) -> Tuple[StardewRule, bool]:
return self, self.value
def __call__(self, state: CollectionState) -> bool:
return self.value
def __repr__(self):
return str(self.value)
class True_(LiteralStardewRule): # noqa
value = True
def __new__(cls, _cache=[]): # noqa
# Only one single instance will be ever created.
if not _cache:
_cache.append(super(True_, cls).__new__(cls))
return _cache[0]
def __or__(self, other) -> StardewRule:
return self
def __and__(self, other) -> StardewRule:
return other
class False_(LiteralStardewRule): # noqa
value = False
def __new__(cls, _cache=[]): # noqa
# Only one single instance will be ever created.
if not _cache:
_cache.append(super(False_, cls).__new__(cls))
return _cache[0]
def __or__(self, other) -> StardewRule:
return other
def __and__(self, other) -> StardewRule:
return self
false_ = False_()
true_ = True_()
assert false_
assert true_