from .server import Server class PhysicsServer(Server): def __init__(self): super().__init__() self._static = [] self._dynamic = [] def register_component(self, component): if component.solid: if component.static: self._static.append(component) else: self._dynamic.append(component) else: self._area.append(component) def unregister_component(self, component): self._static.remove(component) self._dynamic.remove(component) def step(self): for d in self._dynamic: for x in range(abs(d.vx)): stop = False for s in self._static: if s.rect.colliderect(d.rect): stop = True break if stop: d.parent.x += -1 if d.vx > 0 else 1 d.rect.x = d.parent.x break d.parent.x += 1 if d.vx > 0 else -1 d.rect.x = d.parent.x for y in range(abs(d.vy)): stop = False for s in self._static: if s.rect.colliderect(d.rect): stop = True break if stop: d.parent.y += -1 if d.vy > 0 else 1 d.rect.y = d.parent.y break d.parent.y += 1 if d.vy > 0 else -1 d.rect.y = d.parent.y d.vx = 0 d.vy = 0