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 raise NotImplementedError("TODO")
32 class DoNothing(LocationAction):
35 def perform_action(self, board, location):
39 return {'required_bits': list(self.required_bits),
40 'action_class': 'DoNothing'}
43 class LoseHeathOrMSB(LocationAction):
44 TEXT = "Lose health. If MSB is set, it will be cleared instead."
46 def perform_action(self, board, location):
47 if not self.check_and_clear_MSB(board.player):
51 class SetBits(LocationAction):
52 TEXT = "Set bits specified by this location."
54 def perform_action(self, board, location):
55 board.player.bits.set_bits(location.bitwise_operand)
58 class ToggleBits(LocationAction):
59 TEXT = "Toggle bits specified by this location."
61 def perform_action(self, board, location):
62 board.player.bits.toggle_bits(location.bitwise_operand)