Pull SelectableSurfActor out of vehicles.
[koperkapel.git] / koperkapel / actors / orientatedsurf.py
index 5c8df654b8b7f827b0fab58ad01d34aefc0f8c61..284ac71f2e5779e48812b975e91e762fd47a6564 100644 (file)
@@ -4,9 +4,12 @@ from pygame.transform import rotate
 from pgzero.actor import POS_TOPLEFT, ANCHOR_CENTER
 
 from .surf import SurfActor
+from ..constants import TILE_SIZE
+
 
 class OrientatedSurfActor(SurfActor):
-    def __init__(self, surf, pos=POS_TOPLEFT, anchor=ANCHOR_CENTER, angle=0, **kwargs):
+    def __init__(self, surf, pos=POS_TOPLEFT, anchor=ANCHOR_CENTER, angle=0,
+                 **kwargs):
         self._handle_unexpected_kwargs(kwargs)
 
         self._angle = angle
@@ -20,6 +23,9 @@ class OrientatedSurfActor(SurfActor):
 
     @angle.setter
     def angle(self, angle):
+        cur_anchor = self._anchor_value
+        if angle not in (self._angle, self._angle + 180, self._angle - 180):
+            self._anchor_value = (cur_anchor[1], cur_anchor[0])
         self._angle = angle
         self._surf = self._orig_surf = rotate(self._base_surf, angle)
 
@@ -33,3 +39,20 @@ class OrientatedSurfActor(SurfActor):
         self._base_surf = surf
         self._orig_surf = self._surf = rotate(surf, self._angle)
         self._update_pos()
+
+
+class SelectableSurfActor(OrientatedSurfActor):
+    def __init__(self, seat, selected_seat):
+        self._selected = False
+        self._seat = seat
+        self._selected_seat = selected_seat
+        super().__init__(surf=self._seat, angle=0)
+
+    @property
+    def selected(self):
+        return self._selected
+
+    @selected.setter
+    def selected(self, value):
+        self._selected = value
+        self.surf = self._selected_seat if value else self._seat