Prototype player object.
[naja.git] / naja / player.py
diff --git a/naja/player.py b/naja/player.py
new file mode 100644 (file)
index 0000000..acae919
--- /dev/null
@@ -0,0 +1,59 @@
+
+
+class PlayerBits(object):
+    """
+    A glorified byte.
+    """
+
+    def __init__(self, bits):
+        self.bits = bits
+
+    @property
+    def bits(self):
+        return self._bits
+
+    @bits.setter
+    def bits(self, value):
+        assert 0 <= value <= 0xff
+        self._bits = value
+
+    # Operate on individual bits
+
+    def check_bit(self, bit):
+        return bool(self.bits & (1 << bit))
+
+    def set_bit(self, bit):
+        self.bits |= (1 << bit)
+
+    def clear_bit(self, bit):
+        self.bits &= (0xff ^ (1 << bit))
+
+    def toggle_bit(self, bit):
+        self.bits ^= (1 << bit)
+
+    # Operate on sets of bits
+
+    def check_bits(self, *bits):
+        return all(self.check_bit(bit) for bit in bits)
+
+    def set_bits(self, *bits):
+        for bit in bits:
+            self.set_bit(bit)
+
+    def clear_bits(self, *bits):
+        for bit in bits:
+            self.clear_bit(bit)
+
+    def toggle_bits(self, *bits):
+        for bit in bits:
+            self.toggle_bit(bit)
+
+
+class Player(object):
+    """
+    A representation of the player.
+    """
+
+    def __init__(self, bits, position):
+        self.bits = PlayerBits(bits)
+        self.position = position