from dataclasses import dataclass from math import pi import pygame as pg @dataclass class Transform: position: pg.Vector2 rotation: float = 0.0 scale: float = 1.0 parent: 'Transform' = None @property def global_position(self): if self.parent is None: return self.position return self.position + self.parent.global_position @property def global_rotation(self): if self.parent is None: return self.rotation return self.position + self.parent.global_rotation @property def global_scale(self): if self.parent is None: return self.scale return self.scale * self.parent.global_scale @property def global_degrees(self): return self.global_rotation * (180.0 / pi) @property def degrees(self): return self.rotation * (180.0 / pi)