GenericBits action.
authorSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 17:48:02 +0000 (19:48 +0200)
committerSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 17:48:56 +0000 (19:48 +0200)
naja/actions.py

index 45698ef1c495c1cc6c0092e2faa25a4490940655..2407d829b59155b4077d7f56e5d4e171c9bfb646 100644 (file)
@@ -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,)