Exemplo n.º 1
0
class Pokemao():#Inimigos):
    def __init__(self,render, num):
        self.nome = "Pokemao"
        self.agi = 10
        self.hp = 10
        self.int = 5
        self.str = 1
        self.dano = 5
        self.bloqueio = False
        self.bloqueado = False
        self.velocAtaque = 0.5
        self.arma = None
        self.escudo = None
        self.armadura = None
        self.delete = False
        self.render = render
        self.loadModels(num)
        self.setAI()
        
    
    def getPos(self):
        return self.pokemao.getPos()   
        
    def loadModels(self,num):
        # Seeker
        pokemaoPos = Vec3(-10,-30.0,2.10)
        self.pokemao = Actor('personagens/Modelos/Pokeperna/p1',
                        {"andar" :"personagens/Modelos/Pokeperna/p1-andar.egg",
                        "saltar" :"personagens/Modelos/Pokeperna/p1-saltar.egg",
                        "correr" : "personagens/Modelos/Pokeperna/p1-correr",
                        "abaixar" : "personagens/Modelos/Pokeperna/p1-abaixar"})
        
        self.pokemao.reparentTo(self.render)
        #self.wanderer.setScale(0.5)
        self.pokemao.setPos(pokemaoPos)
        self.pokemao.setTag("inimigo",str(num))
      
    def setAI(self):
        #Creating AI World
        self.AIworld = AIWorld(self.render)
 
        self.AIchar = AICharacter("wanderer",self.pokemao, 100, 0.05, 5)
        self.AIworld.addAiChar(self.AIchar)
        self.AIbehaviors = self.AIchar.getAiBehaviors()
        
        self.AIbehaviors.wander(5, 0, 10, 1.0)
        self.pokemao.loop("correr")

        #AI World update        
        taskMgr.add(self.AIUpdate,"AIUpdate")
        
    #to update the AIWorld    
    def AIUpdate(self,task):
        if self.hp < 1:
            #self.cleanup()
            self.pokemao.detachNode()
            self.delete = True
        self.AIworld.update()            
        return Task.cont
Exemplo n.º 2
0
class CogAI(DirectObject):
    
    cancelStep = False
    
    def __init__(self, cog, spawn, support = False):
        self.cog = cog
        self.spawn = spawn
        self.attack = True
        self.support = support
        self.flyIn()
        
    def setAI(self):
        collisions = render.getPythonTag('WorldCollisions')
        collisions.addCogGroundCollision(self.cog)
        self.AIWorld = AIWorld(render)
        self.AIChar = AICharacter('Cog', self.cog.getCog(), -125, 90, -14)
        self.AIWorld.addAiChar(self.AIChar)
        self.AIBehaviors = self.AIChar.getAiBehaviors()
        if self.support == False:
            self.AIBehaviors.pathFollow(8)
            self.AIBehaviors.addToPath(VBase3(110.60, -0.32, 4.57))
            checkpoints = self.spawn.getPath().getCheckpoints()
            for checkpoint in xrange(len(checkpoints)):
                self.AIBehaviors.addToPath(checkpoints[checkpoint].getPos())
            self.AIBehaviors.startFollow()
        else:
            self.AIBehaviors.pursue(render.find('**/Toon'))
        self.cog.getCog().loop('walk')
        base.taskMgr.add(self.AIUpdate, "AIUpdate")
        
    def calcChance(self, percent):
        if(random.randint(0, 100) < percent):
            return True
        else:
            return False
        
    def toggleAttack(self):
        if(self.attack):
            self.attack = False
        else:
            self.attack = True
        
    def AIUpdate(self, task):
        if(self.AIBehaviors.behaviorStatus('pathfollow') == 'done'):
            self.cog.getCog().loop('neutral')
            self.AIBehaviors.removeAi('pathfollow')
            toonHall = render.getPythonTag("ToonHall")
            toonHall.startCogEnter(self.cog)
            return Task.done
        else:
            if(self.cog.getHealth() > 0):
                if(self.calcChance(40) and self.attack):
                    def resumeAI(task):
                        self.AIBehaviors.resumeAi('pathfollow')
                        self.cog.getCog().loop('walk')
                        return Task.done
                    def enableAttacks(task):
                        return Task.done
                    avatar = render.find('**/Toon')
                    if(self.cog.getCog().getDistance(avatar) <= 20):
                        self.AIBehaviors.pauseAi('pathfollow')
                        self.cog.getCog().stop()
                        self.attack = False
                        self.cog.getCog().lookAt(avatar)
                        self.cog.getCog().play('throw-object')
                        attack = CogAttacks().getRandomAttack(self.cog.getLevel() * 2)
                        attack.execute(self.cog)
                        base.taskMgr.doMethodLater(10, enableAttacks, 'Toggle Attack')
                        base.taskMgr.doMethodLater(3, resumeAI, 'Resume AI')
                self.AIWorld.update()
                return Task.cont
            else:
                self.AIBehaviors.removeAi('pathfollow')
                return Task.done
        
    def flyIn(self):
        phase_4 = "phase_4/models/props"
        cog = self.cog.getCog()

        collisions = render.getPythonTag('WorldCollisions')
        collisions.addCogCollision(self.cog)
        self.propeller = Actor(loader.loadModel(phase_4 + "/propeller-mod.bam"), {'chan' : loader.loadModel(phase_4 + "/propeller-chan.bam")})
        self.propeller.reparentTo(cog.find('**/joint_head'))
        propSound = SoundBank.getSound('propeller')
        propSound.setLoop(True)
        propSound.setVolume(0.8)
        propSound.play()
        pos = cog.getPos()
        cog.setPos(pos.getX(), pos.getY(), pos.getZ() + 20)
        cog.pose('landing', 1)
        cog.colorScaleInterval(4.8, Vec4(1, 1, 1, 1), startColorScale=Vec4(0.2509803921568627, 0.2509803921568627, 0.2509803921568627, 0.25), blendType='easeInOut').start()
        path = cog.posInterval(5, pos, startPos = cog.getPos())
        path.start()
        self.propeller.loop('chan', fromFrame=0, toFrame=3)
        base.taskMgr.add(self.handleCogDead, 'Handle Cog Death')
        base.taskMgr.doMethodLater(4, self.playInSound, 'Play In Sound', extraArgs = [propSound], appendTask = True)
        base.taskMgr.doMethodLater(5, self.landCog, 'Land Cog')
        
    def handleCogDead(self, task):
        if(self.cog.isDefeated):
            self.cancelStep = True
            collisions = render.getPythonTag('WorldCollisions')
            collisions.addCogGroundCollision(cog = self.cog)
            return Task.done
        else:
            return Task.cont
        
        
    def landCog(self, task):
        if not self.cancelStep:
            base.taskMgr.remove('Handle Cog Death')
            self.propeller.play('chan', fromFrame=35, toFrame=87)
            self.cog.getCog().play('landing')
            base.taskMgr.doMethodLater(3, self.removePropeller, 'Remove Propeller')
        return Task.done
    
    def removePropeller(self, task):
        self.propeller.cleanup()
        self.propeller.removeNode()
        self.setAI()
        return Task.done
        
    def playInSound(self, sound, task):
        if not self.cancelStep:
            sound.stop()
            SoundBank.getSound('propeller_in').play()
        return Task.done
        
Exemplo n.º 3
0
class CogAI(DirectObject):

    cancelStep = False

    def __init__(self, cog, spawn, support=False):
        self.cog = cog
        self.spawn = spawn
        self.attack = True
        self.support = support
        self.flyIn()

    def setAI(self):
        collisions = render.getPythonTag('WorldCollisions')
        collisions.addCogGroundCollision(self.cog)
        self.AIWorld = AIWorld(render)
        self.AIChar = AICharacter('Cog', self.cog.getCog(), -125, 90, -14)
        self.AIWorld.addAiChar(self.AIChar)
        self.AIBehaviors = self.AIChar.getAiBehaviors()
        if self.support == False:
            self.AIBehaviors.pathFollow(8)
            self.AIBehaviors.addToPath(VBase3(110.60, -0.32, 4.57))
            checkpoints = self.spawn.getPath().getCheckpoints()
            for checkpoint in xrange(len(checkpoints)):
                self.AIBehaviors.addToPath(checkpoints[checkpoint].getPos())
            self.AIBehaviors.startFollow()
        else:
            self.AIBehaviors.pursue(render.find('**/Toon'))
        self.cog.getCog().loop('walk')
        base.taskMgr.add(self.AIUpdate, "AIUpdate")

    def calcChance(self, percent):
        if (random.randint(0, 100) < percent):
            return True
        else:
            return False

    def toggleAttack(self):
        if (self.attack):
            self.attack = False
        else:
            self.attack = True

    def AIUpdate(self, task):
        if (self.AIBehaviors.behaviorStatus('pathfollow') == 'done'):
            self.cog.getCog().loop('neutral')
            self.AIBehaviors.removeAi('pathfollow')
            toonHall = render.getPythonTag("ToonHall")
            toonHall.startCogEnter(self.cog)
            return Task.done
        else:
            if (self.cog.getHealth() > 0):
                if (self.calcChance(40) and self.attack):

                    def resumeAI(task):
                        self.AIBehaviors.resumeAi('pathfollow')
                        self.cog.getCog().loop('walk')
                        return Task.done

                    def enableAttacks(task):
                        return Task.done

                    avatar = render.find('**/Toon')
                    if (self.cog.getCog().getDistance(avatar) <= 20):
                        self.AIBehaviors.pauseAi('pathfollow')
                        self.cog.getCog().stop()
                        self.attack = False
                        self.cog.getCog().lookAt(avatar)
                        self.cog.getCog().play('throw-object')
                        attack = CogAttacks().getRandomAttack(
                            self.cog.getLevel() * 2)
                        attack.execute(self.cog)
                        base.taskMgr.doMethodLater(10, enableAttacks,
                                                   'Toggle Attack')
                        base.taskMgr.doMethodLater(3, resumeAI, 'Resume AI')
                self.AIWorld.update()
                return Task.cont
            else:
                self.AIBehaviors.removeAi('pathfollow')
                return Task.done

    def flyIn(self):
        phase_4 = "phase_4/models/props"
        cog = self.cog.getCog()

        collisions = render.getPythonTag('WorldCollisions')
        collisions.addCogCollision(self.cog)
        self.propeller = Actor(
            loader.loadModel(phase_4 + "/propeller-mod.bam"),
            {'chan': loader.loadModel(phase_4 + "/propeller-chan.bam")})
        self.propeller.reparentTo(cog.find('**/joint_head'))
        propSound = SoundBank.getSound('propeller')
        propSound.setLoop(True)
        propSound.setVolume(0.8)
        propSound.play()
        pos = cog.getPos()
        cog.setPos(pos.getX(), pos.getY(), pos.getZ() + 20)
        cog.pose('landing', 1)
        cog.colorScaleInterval(4.8,
                               Vec4(1, 1, 1, 1),
                               startColorScale=Vec4(0.2509803921568627,
                                                    0.2509803921568627,
                                                    0.2509803921568627, 0.25),
                               blendType='easeInOut').start()
        path = cog.posInterval(5, pos, startPos=cog.getPos())
        path.start()
        self.propeller.loop('chan', fromFrame=0, toFrame=3)
        base.taskMgr.add(self.handleCogDead, 'Handle Cog Death')
        base.taskMgr.doMethodLater(4,
                                   self.playInSound,
                                   'Play In Sound',
                                   extraArgs=[propSound],
                                   appendTask=True)
        base.taskMgr.doMethodLater(5, self.landCog, 'Land Cog')

    def handleCogDead(self, task):
        if (self.cog.isDefeated):
            self.cancelStep = True
            collisions = render.getPythonTag('WorldCollisions')
            collisions.addCogGroundCollision(cog=self.cog)
            return Task.done
        else:
            return Task.cont

    def landCog(self, task):
        if not self.cancelStep:
            base.taskMgr.remove('Handle Cog Death')
            self.propeller.play('chan', fromFrame=35, toFrame=87)
            self.cog.getCog().play('landing')
            base.taskMgr.doMethodLater(3, self.removePropeller,
                                       'Remove Propeller')
        return Task.done

    def removePropeller(self, task):
        self.propeller.cleanup()
        self.propeller.removeNode()
        self.setAI()
        return Task.done

    def playInSound(self, sound, task):
        if not self.cancelStep:
            sound.stop()
            SoundBank.getSound('propeller_in').play()
        return Task.done
Exemplo n.º 4
0
class Pokeperna(Personagem):
    def __init__(self,render, colisaoTerreno):
        self.nome = "Pokeperna"
        self.agi = 10
        self.hp = 10
        self.int = 5
        self.str = 1
        self.dano = 5
        self.bloqueio = False
        self.bloqueado = False
        self.velocAtaque = 0.5
        self.arma = None
        self.escudo = None
        self.armadura = None
        self.segueAlvo = None
        self.segue = False
        
        self.pokeperna = Actor('personagens/Modelos/Pokeperna/p1',
                       {"andar" :"personagens/Modelos/Pokeperna/p1-andar.egg",
                       "saltar" :"personagens/Modelos/Pokeperna/p1-saltar.egg",
                       "correr" : "personagens/Modelos/Pokeperna/p1-correr",
                       "abaixar" : "personagens/Modelos/Pokeperna/p1-abaixar"})
#        self.pokeperna = Actor('personagens/Modelos/Pokeperna/p1',
#                       {"atacar" : "personagens/Modelos/pokepernaTeste-atacar"})
        #self.pokeperna.setScale(0.2,0.2,0.2)
        
        self.render = render 
        self.pokeperna.setTag("Pokeperna","1")
                
        #self.pokeperna.reparentTo(self.noRobot)
        self.pokeperna.setPos(-10,-30.0,2.10)
        self.pokeperna.reparentTo(self.render)
        self.gerenciadorColisao = self.pokeperna.getPos()
        self.goForward = 0
        self.goBackwards = 0
        self.goLeft = 0
        self.goRight = 0
        self.saltar = 0
        self.abaixar = 0
        self.prevtime = 0
        self.correr = 0
        self.move = 0
        self.gerenciadorColisao = colisaoTerreno
        self.gerenciarSelecao = 0
        
        self.setAI()
        taskMgr.add(self.gerenciadorSelecao,"gerenciasSelecao")
    
    def pega(self):
        pass
    
    def abre(self):
        pass
    
    def defende(self):
        pass
    
    def calcDefesa(self):
        pass
    
    def atacar(self):
        self.pokeperna.play("saltar")
        
        #self.ataca = atacar

    def setGoLeft (self,value):
        self.goLeft = value
    
    def setGoRight (self,value):
        self.goRight = value
    
    def setGoForward (self,value):
        self.goForward = value
    
    def setMove (self,value):
        self.move = value
        self.aiBehaviors.pathFollow(01.0)
        self.aiBehaviors.addToPath(self.gerenciadorColisao.getEntry(0).getSurfacePoint(self.render))
        self.aiBehaviors.addToPath(self.pokeperna.getPos())
        
        self.pokeperna.loop("correr",)
        #print self.pokeperna.getAnimControl('andar').isPlaying()
        #print self.gerenciadorColisao.getEntry(0).getSurfacePoint(self.render)
        #print posicao
        if self.segue:
            self.aiBehaviors.seek(self.segueAlvo.pokemao)
            self.aiBehaviors.startFollow("actor")
            print "segue"
        else:
            self.aiBehaviors.startFollow("actor")
        #self.aiBehaviors.pathFindTo((self.gerenciadorColisao.getEntry(0).getSurfacePoint(self.render)),"addPath")
        
        #self.move = value
        
    def setGoBackwards (self,value):
        self.goBackwards = value
    
    def setSaltar(self,value):
        self.saltar = value
    
    def setAbaixar(self, value):
        self.abaixar = value
    
    def setCorrer(self, value):
        self.correr = value
    
    def getModel(self):
        return self.pokeperna
    
    def getPos(self):
        return self.pokeperna.getPos()
    
    
    def update (self, time,traverser,robotGroundHandler):
        elapsed = time - self.prevtime
        
        if self.goLeft:
            self.pokeperna.setH(self.pokeperna.getH() + elapsed * 300)
        if self.goRight:
            self.pokeperna.setH(self.pokeperna.getH() - elapsed * 300)


    # this code moves the avatar forward.
    # "forward" usually means "along the Y axis".  however, since the avatar can turn, 
    # it really means "along the Y axis relative to the direction I'm facing"
    # you can use the getRelativeVector () function to find out what that is
    
        forwardVec =  VBase3(0,-1,0)
        xformedVec = self.render.getRelativeVector(self.pokeperna,forwardVec)
        para = True
        oldPos = self.pokeperna.getPos()
       
        if self.goForward:
            para = False
            if not self.pokeperna.getAnimControl('andar').isPlaying() \
                and not self.pokeperna.getAnimControl('saltar').isPlaying() \
                and not self.abaixar:
                    self.pokeperna.loop("andar",restart = 0)  
            newPos = oldPos + xformedVec * elapsed * 5
            self.pokeperna.setPos(newPos)
      
        if self.goBackwards:
            newPos = oldPos - xformedVec * elapsed * 5
            self.pokeperna.setPos(newPos)   
        
        if self.correr:
            para = False
            if not self.pokeperna.getAnimControl('correr').isPlaying() \
                and not self.pokeperna.getAnimControl('saltar').isPlaying() \
                and not self.abaixar:
                    self.pokeperna.loop("correr",restart = 0)  
            newPos = oldPos + xformedVec * elapsed * 7
            self.pokeperna.setPos(newPos)
    
        if self.saltar:
            para = False
            if not self.pokeperna.getAnimControl('saltar').isPlaying():
                self.pokeperna.play("saltar")
                
        if self.abaixar:
            para = False
            if not self.pokeperna.getAnimControl('abaixar').isPlaying():
                self.pokeperna.play("abaixar")
        
        if para:
#            if not self.pokeperna.getAnimControl('saltar').isPlaying():
                self.pokeperna.stop()
        
        # do collisions
        traverser.traverse(self.render)

        startpos = self.pokeperna.getPos()
        
        entries = []
        for i in range(robotGroundHandler.getNumEntries()):
            entry = robotGroundHandler.getEntry(i)
            entries.append(entry)
        entries.sort(lambda x,y: cmp(y.getSurfacePoint(self.render).getZ(),
                                     x.getSurfacePoint(self.render).getZ()))
    
        if (len(entries)>0) and (entries[0].getIntoNode().getName() == "Grid"):
            self.pokeperna.setZ(entries[0].getSurfacePoint(self.render).getZ())
            #print entries[0].getSurfacePoint(self.render).getZ(),self.pokeperna.getPos()
        #self.pokeperna.setZ(1000)
        else:
            self.pokeperna.setPos(startpos)
      
        self.prevtime = time
        return Task.cont
    
    def setAI(self):
        #Creating AI World
        self.AIworld = AIWorld(self.render)
 
        self.AIchar = AICharacter("pokeperna",self.pokeperna, 60, 0.05, 5)
        self.AIworld.addAiChar(self.AIchar)
        self.aiBehaviors = self.AIchar.getAiBehaviors()
        #self.aiBehaviors.initPathFind("mapa/Modelos/cidade/navmesh.csv")
 
        #Path follow (note the order is reveresed)
        #AI World update
        taskMgr.add(self.AIUpdate,"AIUpdate")
    
    def gerenciadorSelecao(self, task):
        
        return Task.cont
    
    def AIUpdate(self,task):
        #print self.pokeperna.getAnimControl('andar').isPlaying()
        if self.move and self.aiBehaviors.behaviorStatus("pathfollow") == "done":
#            if not self.pokeperna.getAnimControl('andar').isPlaying():
#                print "anda"
#                self.pokeperna.loop("andar",restart = 0)
            #print "gerenciadorColisao",self.gerenciadorColisao.getEntry(0).getSurfacePoint(self.render)
            #print "pokeperna",self.pokeperna.getPos()
            self.pokeperna.stop()
            self.pokeperna.pose("andar",0)
            
            #print "andando"
        else:
            pass
            #print "parado", self.move
#            self.pokeperna.stop()
#            self.pokeperna.pose("andar",0)
        self.AIworld.update()            
        return Task.cont
Exemplo n.º 5
0
class Enemy(DirectObject):
    
    #Flag for detecting hit enemy
    delFlag = False
    pauseFlag = False

    #Check for peaceful mode
    configFile = open("config.txt")
    configList = configFile.readlines()
    configFile.close()
    peacefulMode = configList[6].split("=")[1].translate(None,"\n")

    def __init__(self, model, id):
        
        self.dontSpawn = False
        self.id = id
        #init and render
        self.enemyNode = NodePath('enemy'+str(id))
        self.AIWorld = AIWorld(base.render)
        self.enemyNode.reparentTo(base.render)

        # Load the enemy model, set the scale, and add to render
        self.enemy =Actor(model,{"walk":"resources/humanoid-walk"})
        self.enemy.reparentTo(self.enemyNode)
        self.enemy.setScale(0.2)

	    #configure hit tube
        self.xTop = self.enemy.getX()
        self.yTop = self.enemy.getY()
        self.zTop = self.enemy.getZ() - 15
        xBot = self.xTop
        yBot = self.yTop
        zBot = self.zTop - 10
        self.cs = CollisionTube(self.xTop, self.yTop, self.zTop, xBot, yBot, zBot, 20)
        
        #init cnode
        self.cnodepath = self.enemy.attachNewNode(CollisionNode('cnode'+str(id)))
        self.cnodepath.setTag('objectTag', str(id))
        self.cnodepath.node().addSolid(self.cs)
        
        #so we can walk into the enemies
        self.chand = CollisionHandlerEvent()
        
        # must be same cTrav that was set in player, global collider thing
        base.cTrav.addCollider(self.cnodepath, self.chand)
        self.accept('cnode'+str(id), self.hit)

        # base settings like damage and health. modify spawner later to change these once we have a more diverse population
        self.health = 20*base.damageMod
        self.damage = 25;
        self.fireDelta = 0
        self.fireOffset = random.randint(0, 200)
        self.deadFlag = False
        self.scrubCannon = ScrubCannon(base.camera, self.enemy)

    #Sets enemy position
    def setPos(self, x, y, z):
		
        #Set enemy position
        self.enemy.setPos(x, y, z)
        
    
    #Checks for being hit by player projectile
    def hit(self, damage):
        
        #access the thing hit like below, the parrent of the collision node
        #damage health etc below
        self.health = self.health-damage
        if self.health <= 0:
            self.delFlag = True
            self.deadFlag = True
            #self.destroy()
        if self.deadFlag and not self.dontSpawn:
            self.spawnPick()
            self.dontSpawn = True

   
    #Fires enemy projecctile
    def fire(self):

        base.taskMgr.add(self.scrubCannon.fire, "fireE")

    #Activate enemy AI
    def setAI(self):
       
    	# Flag this as an AI character
    	#Faster enemy pursue
        self.AIchar = AICharacter("standby", self.enemy, 100,.05,250)
        self.AIWorld.addAiChar(self.AIchar)
        self.AIbehaviors = self.AIchar.getAiBehaviors()
        self.AIbehaviors.pursue(base.camera)
        self.AIbehaviors.pauseAi("pursue")

        #Slower enemy pursue
        self.AIchar2 = AICharacter("standby2", self.enemy, 100, .05, 100)
        self.AIWorld.addAiChar(self.AIchar2)
        self.AIbehaviors2 = self.AIchar2.getAiBehaviors()
        self.AIbehaviors2.pursue(base.camera)
        self.AIbehaviors2.pauseAi("pursue")

        base.taskMgr.add(self.AIUpdate, "Update AI")


    #Calculate the distance between the player and the enemy.
    def getDistance(self):

        #get enemy (x,y,z)
        eX = self.enemy.getX()
        eY = self.enemy.getY()
        eZ = self.enemy.getZ()
        
        #get player (x,y,z)
        pX = base.player.playerModel.getX()
        pY = base.player.playerModel.getY()
        pZ = base.player.playerModel.getZ()

        #calculate the distance between the enemy and player (x,y,z)
        #(eX - pX)^2
        x = eX - pX
        x = math.pow(x, 2)

        #(eY - pY)^2
        y = eY - pY
        y = math.pow(y,2)

        #(eZ - pZ)^2
        z = eZ - pZ
        z = math.pow(z, 2)

        self.dist = math.sqrt(x + y + z)
        return self.dist

    #AI behavior
    def AIUpdate(self,task):
        
        #if the enemy is not flaged as dead or paused then we update the AI
        self.max = 200
        self.shoot = 140
        self.min = 50
        if not self.deadFlag:
            if not self.pauseFlag:
                dist = self.getDistance()
                self.pickuppos = self.enemy.getPos()
                #if the distance is less than max, resume the pursue
                if(dist < self.max):
                    self.AIbehaviors.resumeAi("pursue")
                    #also if the distance is less than 'shoot range' then enemies can fire
                    if(dist < self.shoot):
                        self.AIbehaviors.pauseAi("pursue")
                        self.AIbehaviors2.resumeAi("pursue")
                        #if the distance becomes less than the min
                        #pause the chasing and double the firing speed
                        if(dist < self.min):
                            self.fireDelta = self.fireDelta *2
                            self.AIbehaviors.pauseAi("pursue")
                            self.AIbehaviors2.pauseAi("pursue")
                        if(self.peacefulMode != "True"):
                            self.fireDelta+=1
                            if self.fireDelta >= 100+self.fireOffset:
                                self.fireDelta = 0
                                self.fire()
                #else if the distance is more than 200 then don't chase or fire
                elif(dist >200):
                    self.AIbehaviors.pauseAi("pursue")
                    self.AIbehaviors2.pauseAi("pursue")
        else:
            return task.done
        self.AIWorld.update()
        
        return task.cont
    #Pauses enemyies 
    def pause(self):
        
        self.AIbehaviors.pauseAi("pursue")
        self.AIbehaviors2.pauseAi("pursue")
        self.pauseFlag = True

    #Resumes enemies
    def resume(self):

        self.pauseFlag = False
    #Randomly spawns health pickup on enemy death
    def spawnPick(self):

        a = random.randint(0, 100)
        if a > 74:
            base.spawnPickup(self.id, self.pickuppos)            
    
    #Clears enemy from the scene graph upon death
    def destroy(self):

        self.enemyNode.removeNode()
        self.enemy.cleanup()
        self.enemy.removeNode()
        self.cnodepath.node().clearSolids()
        
        base.cTrav.removeCollider(self.cnodepath)
        del self
    
    #Animation currently not functional
    def animate(self):
	
        self.enemy.play("walk")
        self.enemy.loop("walk", fromFrame = 10)