Spaces:
Sleeping
Sleeping
class Collider: | |
def __init__(self, entity, level): | |
self.entity = entity | |
self.level = level.level | |
self.levelObj = level | |
self.result = [] | |
def checkX(self): | |
if self.leftLevelBorderReached() or self.rightLevelBorderReached(): | |
return | |
try: | |
rows = [ | |
self.level[self.entity.getPosIndex().y], | |
self.level[self.entity.getPosIndex().y + 1], | |
self.level[self.entity.getPosIndex().y + 2], | |
] | |
except Exception: | |
return | |
for row in rows: | |
tiles = row[self.entity.getPosIndex().x : self.entity.getPosIndex().x + 2] | |
for tile in tiles: | |
if tile.rect is not None: | |
if self.entity.rect.colliderect(tile.rect): | |
if self.entity.vel.x > 0: | |
self.entity.rect.right = tile.rect.left | |
self.entity.vel.x = 0 | |
if self.entity.vel.x < 0: | |
self.entity.rect.left = tile.rect.right | |
self.entity.vel.x = 0 | |
def checkY(self): | |
self.entity.onGround = False | |
try: | |
rows = [ | |
self.level[self.entity.getPosIndex().y], | |
self.level[self.entity.getPosIndex().y + 1], | |
self.level[self.entity.getPosIndex().y + 2], | |
] | |
except Exception: | |
try: | |
self.entity.gameOver() | |
except Exception: | |
self.entity.alive = None | |
return | |
for row in rows: | |
tiles = row[self.entity.getPosIndex().x : self.entity.getPosIndex().x + 2] | |
for tile in tiles: | |
if tile.rect is not None: | |
if self.entity.rect.colliderect(tile.rect): | |
if self.entity.vel.y > 0: | |
self.entity.onGround = True | |
self.entity.rect.bottom = tile.rect.top | |
self.entity.vel.y = 0 | |
# reset jump on bottom | |
if self.entity.traits is not None: | |
if "JumpTrait" in self.entity.traits: | |
self.entity.traits["JumpTrait"].reset() | |
if "bounceTrait" in self.entity.traits: | |
self.entity.traits["bounceTrait"].reset() | |
if self.entity.vel.y < 0: | |
self.entity.rect.top = tile.rect.bottom | |
self.entity.vel.y = 0 | |
def rightLevelBorderReached(self): | |
if self.entity.getPosIndexAsFloat().x > self.levelObj.levelLength - 1: | |
self.entity.rect.x = (self.levelObj.levelLength - 1) * 32 | |
self.entity.vel.x = 0 | |
return True | |
def leftLevelBorderReached(self): | |
if self.entity.rect.x < 0: | |
self.entity.rect.x = 0 | |
self.entity.vel.x = 0 | |
return True | |