class MinimapInvasionObject(DirectObject):
    ICON = None
    BOSS_ICON = None
    BOSS_SORT = 5

    def __init__(self, parent, avId, xPos, yPos, isBoss):
        name = 'MinimapInvasionObject-%s' % avId
        self.worldNode = parent.attachNewNode(name)
        self.worldNode.setPos(xPos, yPos, 0)
        if isBoss and not MinimapInvasionObject.BOSS_ICON:
            gui = loader.loadModel('models/effects/effectCards')
            MinimapInvasionObject.BOSS_ICON = gui.find('**/effectJolly')
            MinimapInvasionObject.BOSS_ICON.clearTransform()
            MinimapInvasionObject.BOSS_ICON.setHpr(180, 90, 0)
            MinimapInvasionObject.BOSS_ICON.setScale(100)
            MinimapInvasionObject.BOSS_ICON.flattenStrong()
        elif not MinimapInvasionObject.ICON:
            gui = loader.loadModel('models/gui/compass_main')
            MinimapInvasionObject.ICON = gui.find('**/icon_sphere')
            MinimapInvasionObject.ICON.clearTransform()
            MinimapInvasionObject.ICON.setHpr(90, 90, 0)
            MinimapInvasionObject.ICON.setScale(200)
            MinimapInvasionObject.ICON.setColor(1, 0, 0, 1)
            MinimapInvasionObject.ICON.flattenStrong()
        if isBoss:
            self.minimapObj = GridMinimapObject(
                name, self.worldNode, MinimapInvasionObject.BOSS_ICON)
            self.minimapObj.mapGeom.setBin('gui-fixed', 1)
        else:
            self.minimapObj = GridMinimapObject(name, self.worldNode,
                                                MinimapInvasionObject.ICON)
        self.accept('transferMinimapObjects', self.transferMinimapObject)
        parent.minimap.addObject(self.minimapObj)
        self.moveIval = None
        return

    def transferMinimapObject(self, guiMgr):
        guiMgr.transferMinimapObject(self.minimapObj)

    def destroy(self):
        self.ignore('transferMinimapObjects')
        if self.minimapObj:
            self.minimapObj.removeFromMap()
        self.minimapObj = None
        if self.worldNode:
            self.worldNode.removeNode()
        self.worldNode = None
        if self.moveIval:
            self.moveIval.finish()
        self.moveIval = None
        return

    def updatePos(self, xPos, yPos):
        if self.moveIval:
            self.moveIval.finish()
            self.moveIval = None
        self.moveIval = LerpPosInterval(self.worldNode, 1.5,
                                        Point3(xPos, yPos, 0))
        self.moveIval.start()
        return
class MinimapInvasionObject(DirectObject):
    ICON = None
    BOSS_ICON = None
    BOSS_SORT = 5
    
    def __init__(self, parent, avId, xPos, yPos, isBoss):
        name = 'MinimapInvasionObject-%s' % avId
        self.worldNode = parent.attachNewNode(name)
        self.worldNode.setPos(xPos, yPos, 0)
        if isBoss and not (MinimapInvasionObject.BOSS_ICON):
            gui = loader.loadModel('models/effects/effectCards')
            MinimapInvasionObject.BOSS_ICON = gui.find('**/effectJolly')
            MinimapInvasionObject.BOSS_ICON.clearTransform()
            MinimapInvasionObject.BOSS_ICON.setHpr(180, 90, 0)
            MinimapInvasionObject.BOSS_ICON.setScale(100)
            MinimapInvasionObject.BOSS_ICON.flattenStrong()
        elif not MinimapInvasionObject.ICON:
            gui = loader.loadModel('models/gui/compass_main')
            MinimapInvasionObject.ICON = gui.find('**/icon_sphere')
            MinimapInvasionObject.ICON.clearTransform()
            MinimapInvasionObject.ICON.setHpr(90, 90, 0)
            MinimapInvasionObject.ICON.setScale(200)
            MinimapInvasionObject.ICON.setColor(1, 0, 0, 1)
            MinimapInvasionObject.ICON.flattenStrong()
        
        if isBoss:
            self.minimapObj = GridMinimapObject(name, self.worldNode, MinimapInvasionObject.BOSS_ICON)
            self.minimapObj.mapGeom.setBin('gui-fixed', 1)
        else:
            self.minimapObj = GridMinimapObject(name, self.worldNode, MinimapInvasionObject.ICON)
        self.accept('transferMinimapObjects', self.transferMinimapObject)
        parent.minimap.addObject(self.minimapObj)
        self.moveIval = None

    
    def transferMinimapObject(self, guiMgr):
        guiMgr.transferMinimapObject(self.minimapObj)

    
    def destroy(self):
        self.ignore('transferMinimapObjects')
        if self.minimapObj:
            self.minimapObj.removeFromMap()
        
        self.minimapObj = None
        if self.worldNode:
            self.worldNode.removeNode()
        
        self.worldNode = None
        if self.moveIval:
            self.moveIval.finish()
        
        self.moveIval = None

    
    def updatePos(self, xPos, yPos):
        if self.moveIval:
            self.moveIval.finish()
            self.moveIval = None
        
        self.moveIval = LerpPosInterval(self.worldNode, 1.5, Point3(xPos, yPos, 0))
        self.moveIval.start()