Source code for core.components.colliders

from core.ecs import Component
from core.vector import Vector2


[docs] class BoxCollider2D(Component): def __init__( self, width: float = None, height: float = None, offset_x: float = 0.0, offset_y: float = 0.0, is_trigger: bool = False, category_mask: int = 1, collision_mask: int = 0xFFFFFFFF, rotation: float = 0.0 ): self.entity = None self.width = width self.height = height self.offset = Vector2(offset_x, offset_y) self.is_trigger = is_trigger self.category_mask = category_mask self.collision_mask = collision_mask self.rotation = float(rotation) @property def offset_x(self): return self.offset.x @offset_x.setter def offset_x(self, value): self.offset.x = value @property def offset_y(self): return self.offset.y @offset_y.setter def offset_y(self, value): self.offset.y = value
[docs] class CircleCollider2D(Component): def __init__( self, radius: float = None, offset_x: float = 0.0, offset_y: float = 0.0, is_trigger: bool = False, category_mask: int = 1, collision_mask: int = 0xFFFFFFFF, rotation: float = 0.0 ): self.entity = None self.radius = radius self.offset = Vector2(offset_x, offset_y) self.is_trigger = is_trigger self.category_mask = category_mask self.collision_mask = collision_mask self.rotation = float(rotation) @property def offset_x(self): return self.offset.x @offset_x.setter def offset_x(self, value): self.offset.x = value @property def offset_y(self): return self.offset.y @offset_y.setter def offset_y(self, value): self.offset.y = value
[docs] class PolygonCollider2D(Component): def __init__( self, points: list | None = None, offset_x: float = 0.0, offset_y: float = 0.0, rotation: float = 0.0, is_trigger: bool = False, category_mask: int = 1, collision_mask: int = 0xFFFFFFFF ): self.entity = None if points is None or len(points) < 3: points = [(-25.0, -25.0), (25.0, -25.0), (0.0, 25.0)] self.points = points self.offset = Vector2(offset_x, offset_y) self.is_trigger = is_trigger self.category_mask = category_mask self.collision_mask = collision_mask self.rotation = float(rotation) @property def points(self): return self._points @points.setter def points(self, value): raw_points = value or [] converted = [] for point in raw_points: if isinstance(point, Vector2): converted.append(Vector2(float(point.x), float(point.y))) else: converted.append(Vector2(float(point[0]), float(point[1]))) if len(converted) < 3: converted = [Vector2(-25.0, -25.0), Vector2(25.0, -25.0), Vector2(0.0, 25.0)] self._points = converted @property def offset_x(self): return self.offset.x @offset_x.setter def offset_x(self, value): self.offset.x = value @property def offset_y(self): return self.offset.y @offset_y.setter def offset_y(self, value): self.offset.y = value