class EntityCollider: def __init__(self, entity): self.entity = entity def check(self, target): if self.entity.rect.colliderect(target.rect): return self.determineSide(target.rect, self.entity.rect) return CollisionState(False, False) def determineSide(self, rect1, rect2): if ( rect1.collidepoint(rect2.bottomleft) or rect1.collidepoint(rect2.bottomright) or rect1.collidepoint(rect2.midbottom) ): if rect2.collidepoint( (rect1.midleft[0] / 2, rect1.midleft[1] / 2) ) or rect2.collidepoint((rect1.midright[0] / 2, rect1.midright[1] / 2)): return CollisionState(True, False) else: if self.entity.vel.y > 0: return CollisionState(True, True) return CollisionState(True, False) class CollisionState: def __init__(self, _isColliding, _isTop): self.isColliding = _isColliding self.isTop = _isTop