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
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 |