You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.2 KiB

from core.node import Node, Vector2D, Transform2D
from pygame import Surface
class CanvasItem(Node):
def __init__(self, name: str = ""):
super().__init__(name)
self._transform = Transform2D()
self._visible = True
self._z_index = 0
def _draw(self, surface: Surface):
if self._visible:
self.draw(surface)
for child in self.children:
if isinstance(child, CanvasItem):
child._draw(surface)
@property
def transform(self) -> Transform2D:
return self._transform
@property
def global_transform(self) -> Transform2D:
if self.parent and isinstance(self.parent, CanvasItem):
return self.parent.global_transform.multiply(self.transform)
return self.transform
@transform.setter
def transform(self, transform: Transform2D):
self._transform = transform
@property
def position(self) -> Vector2D:
return self._transform.position
@property
def global_position(self) -> Vector2D:
return self.global_transform.position
@position.setter
def position(self, position: Vector2D):
self._transform.position = position
@property
def rotation(self) -> float:
return self._transform.rotation
@property
def global_rotation(self) -> float:
return self.global_transform.rotation
@rotation.setter
def rotation(self, rotation: float):
self._transform.rotation = rotation
@property
def scale(self) -> Vector2D:
return self._transform.scale
@property
def global_scale(self) -> Vector2D:
return self.global_transform.scale
@scale.setter
def scale(self, scale: Vector2D):
self._transform.scale = scale
def draw(self, surface: Surface):
pass
@property
def visible(self) -> bool:
return self._visible
@visible.setter
def visible(self, visible: bool):
self._visible = visible
@property
def z_index(self) -> int:
return self._z_index
@z_index.setter
def z_index(self, z_index: int):
self._z_index = z_index