29 lines
928 B
Python
29 lines
928 B
Python
|
from abc import ABC
|
||
|
|
||
|
from level.elements.dynamic.DynamicLevelElement import DynamicLevelElement
|
||
|
from physics.CollisionDirection import CollisionDirection
|
||
|
from physics.TickData import TickData
|
||
|
|
||
|
|
||
|
class PushableLevelElement(DynamicLevelElement, ABC):
|
||
|
def __init__(self, tile: dict, loaded_level):
|
||
|
super().__init__(tile, loaded_level)
|
||
|
|
||
|
if 'weight' in self.tile:
|
||
|
self.weight = float(self.tile['weight'])
|
||
|
else:
|
||
|
self.weight = 1.0
|
||
|
|
||
|
def tick(self, tick_data: TickData):
|
||
|
super().tick(tick_data)
|
||
|
|
||
|
collides_element = self.get_collides_with_direction(CollisionDirection.LEFT)
|
||
|
|
||
|
if collides_element:
|
||
|
self.motion = (self.motion[0] + self.weight, self.motion[1])
|
||
|
|
||
|
collides_element = self.get_collides_with_direction(CollisionDirection.RIGHT)
|
||
|
|
||
|
if collides_element:
|
||
|
self.motion = (self.motion[0] - self.weight, self.motion[1])
|