Make GenericBits even more generic.
authorSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 18:56:52 +0000 (20:56 +0200)
committerSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 18:56:52 +0000 (20:56 +0200)
naja/actions.py

index 4dafbc6fbe3ebed6dc8d68b06a19986013183c61..4064947648abb1bd4205a20fb0ed7b455a36af85 100644 (file)
@@ -128,15 +128,30 @@ class GenericBits(LocationAction):
         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', []))
+        self.once = self.data.get('once', False)
+        self.acquire_win = self.data.get('acquire_win', False)
+        self.lose_health = self.data.get('lose_health', False)
 
     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)
+        if self.acquire_win:
+            sound.play_sound('yipee.ogg')
+            board.acquire_win_token()
+        if self.lose_health:
+            sound.play_sound('awwww.ogg')
+            board.lose_health()
+        if self.once:
+            location.actions.remove(self)
 
     def get_glyphs(self):
         glyphs = []
+        if self.acquire_win:
+            glyphs.append(ACTION_GLYPHS.WINTOKEN)
+        if self.lose_health:
+            glyphs.append(ACTION_GLYPHS.DAMAGE)
         if self.set_bits:
             glyphs.append(ACTION_GLYPHS.SET_BITS)
         if self.clear_bits:
@@ -149,11 +164,17 @@ class GenericBits(LocationAction):
         if 'message' in self.data:
             return super(GenericBits, self).get_text()
         parts = []
+        if self.acquire_win:
+            parts.append("Gain a {WINTOKEN}.")
+        if self.lose_health:
+            parts.append("Lose {HEALTH}.")
         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)))
+        if self.once:
+            parts.append('Usable once only.')
         return " ".join(parts)
 
 
@@ -191,8 +212,6 @@ class AcquireWinToken(LocationAction):
         board.player.bits.clear_bits(set([
             BITS.RED, BITS.GREEN, BITS.BLUE,
         ]))
-        if self.data.get('once', False):
-            location.actions.remove(self)
 
 
 class GainHealth(LocationAction):