X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=naja%2Factions.py;h=2407d829b59155b4077d7f56e5d4e171c9bfb646;hb=588b59406f8f944c51f72ae94f3688c9d8febe60;hp=dc8f3e6af74077bd8afdd58028b270af07030e80;hpb=90cf8e0e0006bd9258f6100fcdf2312363543815;p=naja.git diff --git a/naja/actions.py b/naja/actions.py index dc8f3e6..2407d82 100644 --- a/naja/actions.py +++ b/naja/actions.py @@ -1,6 +1,6 @@ from naja.constants import ACTION_GLYPHS, BITS, CHESS_PIECES from naja.sound import sound -from naja.utils import bit_glyphs, move_glyph +from naja.utils import bit_glyphs, move_glyph, parse_bits class LocationAction(object): @@ -114,6 +114,31 @@ class ToggleBits(LocationAction): board.player.bits.toggle_bits(location.bitwise_operand) +class GenericBits(LocationAction): + GLYPHS = (ACTION_GLYPHS.SET_BITS, ACTION_GLYPHS.CLEAR_BITS) + + def __init__(self, *args, **kw): + super(GenericBits, self).__init__(*args, **kw) + self.set_bits = parse_bits(self.data.get('set', [])) + self.clear_bits = parse_bits(self.data.get('clear', [])) + self.toggle_bits = parse_bits(self.data.get('toggle', [])) + + def perform_action(self, board, location): + bits = board.player.bits + bits.set_bits(self.set_bits) + bits.toggle_bits(self.toggle_bits) + bits.clear_bits(self.clear_bits) + + def get_text(self, location=None): + parts = [] + for template, bits in [ + ('Set %s.', self.set_bits), ('Clear %s.', self.clear_bits), + ('Toggle %s', self.toggle_bits)]: + if bits: + parts.append(template % (bit_glyphs(bits))) + return " ".join(parts) + + class ShiftBits(LocationAction): TEXT = "Barrel-shift player bits %(shift_glyph)s %(shift)s." GLYPHS = (ACTION_GLYPHS.SHIFT_LEFT,) @@ -200,7 +225,9 @@ class AllowChessMove(LocationAction): class AllowChessMoveIfMSB(LocationAction): - TEXT = "Clear {MSB} and move like a %(chesspiece_name)s for one turn." + TEXT = ( + "Clear {MSB} and move like a %(chesspiece_name)s for one turn if it " + "was set.") MSB_GLYPH = ACTION_GLYPHS.MOVEMENT def perform_action(self, board, location):