1 from naja.constants import BITS
4 class LocationAction(object):
6 An action that may be performed on a location.
11 def __init__(self, required_bits, **data):
12 self.required_bits = frozenset(required_bits)
15 def check_available(self, player):
16 return player.bits.check_bits(self.required_bits)
18 def perform_action(self, board, location):
19 raise NotImplementedError("TODO")
21 def check_and_clear_MSB(self, player):
22 if player.bits.check_bit(BITS.MSB):
23 player.bits.clear_bit(BITS.MSB)
29 class DoNothing(LocationAction):
32 def perform_action(self, board, location):
36 class LoseHeathOrMSB(LocationAction):
37 TEXT = "Lose health. If MSB is set, it will be cleared instead."
39 def perform_action(self, board, location):
40 if not self.check_and_clear_MSB(board.player):
44 class SetBits(LocationAction):
45 TEXT = "Set bits specified by this location."
47 def perform_action(self, board, location):
48 board.player.bits.set_bits(location.bitwise_operand)
51 class ToggleBits(LocationAction):
52 TEXT = "Toggle bits specified by this location."
54 def perform_action(self, board, location):
55 board.player.bits.toggle_bits(location.bitwise_operand)