This repository has been archived on 2019-12-09. You can view files and clone it, but cannot push or open issues or pull requests.
pacman2/engine/servers/physics.py
papush! e8be8b52ab ajout d’Observer, le composant physique suit l’entité
implémentation du patron Observateur dans la classe Observer qui
permet à un objet d’être notifié quand une propriété d’un autre objet
est modifiée. CollideRect observe maintenant les propriétés x et y de
l’entité à laquelle il appartient et met à jour son rect accordément.
2019-12-07 12:33:50 +01:00

51 lines
1.6 KiB
Python

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