Many-angled roaches
[koperkapel.git] / koperkapel / actors / orientatedsurf.py
diff --git a/koperkapel/actors/orientatedsurf.py b/koperkapel/actors/orientatedsurf.py
new file mode 100644 (file)
index 0000000..5c8df65
--- /dev/null
@@ -0,0 +1,35 @@
+""" Actor that takes a surface. """
+
+from pygame.transform import rotate
+from pgzero.actor import POS_TOPLEFT, ANCHOR_CENTER
+
+from .surf import SurfActor
+
+class OrientatedSurfActor(SurfActor):
+    def __init__(self, surf, pos=POS_TOPLEFT, anchor=ANCHOR_CENTER, angle=0, **kwargs):
+        self._handle_unexpected_kwargs(kwargs)
+
+        self._angle = angle
+        self._base_surf = surf
+        super().__init__(surf, pos, anchor)
+        self._init_position(pos, anchor, **kwargs)
+
+    @property
+    def angle(self):
+        return self._angle
+
+    @angle.setter
+    def angle(self, angle):
+        self._angle = angle
+        self._surf = self._orig_surf = rotate(self._base_surf, angle)
+
+    @property
+    def surf(self):
+        """ The original surface displaying the actor. """
+        return self._orig_surf
+
+    @surf.setter
+    def surf(self, surf):
+        self._base_surf = surf
+        self._orig_surf = self._surf = rotate(surf, self._angle)
+        self._update_pos()