Add a non-empty set of locations for testing
[naja.git] / naja / player.py
1
2
3 class PlayerBits(object):
4     """
5     A glorified byte.
6     """
7
8     def __init__(self, bits):
9         self.bits = bits
10
11     @property
12     def bits(self):
13         return self._bits
14
15     @bits.setter
16     def bits(self, value):
17         assert 0 <= value <= 0xff
18         self._bits = value
19
20     # Operate on individual bits
21
22     def check_bit(self, bit):
23         return bool(self.bits & (1 << bit))
24
25     def set_bit(self, bit):
26         self.bits |= (1 << bit)
27
28     def clear_bit(self, bit):
29         self.bits &= (0xff ^ (1 << bit))
30
31     def toggle_bit(self, bit):
32         self.bits ^= (1 << bit)
33
34     # Operate on sets of bits
35
36     def check_bits(self, bits):
37         return all(self.check_bit(bit) for bit in bits)
38
39     def set_bits(self, bits):
40         for bit in bits:
41             self.set_bit(bit)
42
43     def clear_bits(self, bits):
44         for bit in bits:
45             self.clear_bit(bit)
46
47     def toggle_bits(self, bits):
48         for bit in bits:
49             self.toggle_bit(bit)
50
51
52 class Player(object):
53     """
54     A representation of the player.
55     """
56
57     def __init__(self, bits, position):
58         self.bits = PlayerBits(bits)
59         self.position = position
60
61     @classmethod
62     def import_player(cls, definition):
63         return cls(definition['bits'], tuple(definition['position']))
64
65     def export(self):
66         return {
67             'bits': self.bits.bits,
68             'position': list(self.position),
69         }