def __init__(self, scene, name, x, y, mapfile="", spawnpoint="", cavetype="entrance", **kwargs):
        super(Cave, self).__init__(scene, name, x, y, **kwargs)
        self.mapfile = mapfile
        self.spawnpoint = spawnpoint

        if cavetype == "entrance":
            self.sprite = StaticSprite(self, assets.getImage("graphics/cave_entrance.png"), offset_y=-13, layer=0)
        if cavetype == "exit":
            self.sprite = StaticSprite(self, assets.getImage("graphics/cave_exit.png"),  offset_y=-13, layer=0)
        self.collider = SpriteCollide(self, 64, 32, 32, 96)
        if cavetype == "exitinv":
            self.sprite = StaticSprite(self, assets.getImage("graphics/fish.png"),  offset_y=0, layer=0)
        self.collider = SpriteCollide(self, 0, 0, 32, 32)
 def __init__(self, scene, name, x, y, mapfile="", spawnpoint="", side="left", width=0, height=0, **kwargs):
     super(SideTravel, self).__init__(scene, name, x, y, **kwargs)
     self.mapfile = mapfile
     self.spawnpoint = spawnpoint
     self.side = side
     self.width = int(width)
     self.height = int(height)
     self.collider = SpriteCollide(self, 0, 0, self.width, self.height)
class NPC(GameObject):
    def __init__(self, scene, name, x, y, filename="", **kwargs):
        super(NPC, self).__init__(scene, name, x, y, **kwargs)
        self.sprite = AnimSprite(self, assets.getSpriteAnim("anims/npc.json"), "stand", offset_y = 11, layer=0)
        self.collider = SpriteCollide(self, -26, 20, 64+52, 76)
        self.filename = filename

    def init(self):
        """Initiation code."""
        self.collider.addToGroup(self.obj_mgr.interactive)
        self.obj_mgr.normal_update.append(self)

    def destroy(self):
        """Clean up code."""
        self.sprite.destroy()
        self.collider.removeFromGroup(self.obj_mgr.interactive)
        self.obj_mgr.normal_update.remove(self)

    def update(self, td):
        self.sprite.updateAnim(td)

    def spriteCollide(self, gameobject, collider):
        pass

    def interact(self, obj):
        statemgr.switch("dialog", self.filename)
        return True

    def debug_draw(self, surface, camera_x, camera_y):
        super(NPC, self).debug_draw(surface, camera_x, camera_y)
        self.sprite.debug_draw(surface, camera_x, camera_y)
        self.collider.debug_draw(surface, camera_x, camera_y)
class SideTravel(GameObject):
    def __init__(self, scene, name, x, y, mapfile="", spawnpoint="", side="left", width=0, height=0, **kwargs):
        super(SideTravel, self).__init__(scene, name, x, y, **kwargs)
        self.mapfile = mapfile
        self.spawnpoint = spawnpoint
        self.side = side
        self.width = int(width)
        self.height = int(height)
        self.collider = SpriteCollide(self, 0, 0, self.width, self.height)

    def init(self):
        """Initiation code."""
        self.collider.addToGroup(self.obj_mgr.player_touchable)

    def destroy(self):
        """Clean up code."""
        self.collider.removeFromGroup(self.obj_mgr.player_touchable)

    def spawnPlayer(self):
        """Create a player object"""
        if self.side == "left":
            player = self.obj_mgr.create("Player", "player", self.x - 48, self.y+self.height - 62)
        else:
            player = self.obj_mgr.create("Player", "player", self.x + self.width + 48, self.y+self.height-62)
        player.spawn(self.side)

    def spriteCollide(self, gameobject, collider):
        gameobject.call("sideTravel", self.side, self.mapfile, self.spawnpoint)

    def debug_draw(self, surface, camera_x, camera_y):
        super(SideTravel, self).debug_draw(surface, camera_x, camera_y)
        self.collider.debug_draw(surface, camera_x, camera_y)
class Sign(GameObject):
    def __init__(self, scene, name, x, y, filename="", **kwargs):
        super(Sign, self).__init__(scene, name, x, y, **kwargs)
        self.sprite = StaticSprite(self, assets.getImage("graphics/sign.png"), layer=0)
        self.collider = SpriteCollide(self, 16, 0, 32, 64)
        self.filename = filename

    def init(self):
        """Initiation code."""
        self.collider.addToGroup(self.obj_mgr.interactive)

    def destroy(self):
        """Clean up code."""
        self.sprite.destroy()
        self.collider.removeFromGroup(self.obj_mgr.interactive)

    def spriteCollide(self, gameobject, collider):
        pass

    def interact(self, obj):
        statemgr.switch("dialog", self.filename)
        return True

    def debug_draw(self, surface, camera_x, camera_y):
        super(Sign, self).debug_draw(surface, camera_x, camera_y)
        self.sprite.debug_draw(surface, camera_x, camera_y)
        self.collider.debug_draw(surface, camera_x, camera_y)
class Cave(GameObject):
    def __init__(self, scene, name, x, y, mapfile="", spawnpoint="", cavetype="entrance", **kwargs):
        super(Cave, self).__init__(scene, name, x, y, **kwargs)
        self.mapfile = mapfile
        self.spawnpoint = spawnpoint

        if cavetype == "entrance":
            self.sprite = StaticSprite(self, assets.getImage("graphics/cave_entrance.png"), offset_y=-13, layer=0)
        if cavetype == "exit":
            self.sprite = StaticSprite(self, assets.getImage("graphics/cave_exit.png"),  offset_y=-13, layer=0)
        self.collider = SpriteCollide(self, 64, 32, 32, 96)
        if cavetype == "exitinv":
            self.sprite = StaticSprite(self, assets.getImage("graphics/fish.png"),  offset_y=0, layer=0)
        self.collider = SpriteCollide(self, 0, 0, 32, 32)

    def init(self):
        """Initiation code."""
        self.collider.addToGroup(self.obj_mgr.interactive)

    def destroy(self):
        """Clean up code."""
        self.sprite.destroy()
        self.collider.removeFromGroup(self.obj_mgr.interactive)

    def spawnPlayer(self):
        """Create a player object"""
        player = self.obj_mgr.create("Player", "player", self.x+64+16, self.y+65)
        player.spawn("door")

    def spriteCollide(self, gameobject, collider):
        pass

    def interact(self, obj):
        obj.call("enterDoor", self.mapfile, self.spawnpoint)

    def debug_draw(self, surface, camera_x, camera_y):
        super(Cave, self).debug_draw(surface, camera_x, camera_y)
        self.sprite.debug_draw(surface, camera_x, camera_y)
        self.collider.debug_draw(surface, camera_x, camera_y)
 def __init__(self, scene, name, x, y, filename="", **kwargs):
     super(NPC, self).__init__(scene, name, x, y, **kwargs)
     self.sprite = AnimSprite(self, assets.getSpriteAnim("anims/npc.json"), "stand", offset_y = 11, layer=0)
     self.collider = SpriteCollide(self, -26, 20, 64+52, 76)
     self.filename = filename
 def __init__(self, scene, name, x, y, filename="", **kwargs):
     super(Sign, self).__init__(scene, name, x, y, **kwargs)
     self.sprite = StaticSprite(self, assets.getImage("graphics/sign.png"), layer=0)
     self.collider = SpriteCollide(self, 16, 0, 32, 64)
     self.filename = filename