mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-26 21:22:27 -06:00
89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
|
import random
|
||
|
|
||
|
from direct.directnotify import DirectNotifyGlobal
|
||
|
from direct.directnotify import DirectNotifyGlobal
|
||
|
from direct.distributed import ClockDelta
|
||
|
from direct.interval.IntervalGlobal import *
|
||
|
from direct.task import Task
|
||
|
from otp.ai.AIBase import *
|
||
|
from otp.level import BasicEntities
|
||
|
from otp.level import DistributedEntityAI
|
||
|
from toontown.coghq import BattleBlockerAI
|
||
|
from toontown.coghq import LaserGameMineSweeper
|
||
|
from toontown.coghq import LaserGameRoll
|
||
|
|
||
|
|
||
|
class DistributedSecurityCameraAI(DistributedEntityAI.DistributedEntityAI, NodePath, BasicEntities.NodePathAttribs):
|
||
|
def __init__(self, level, entId):
|
||
|
DistributedEntityAI.DistributedEntityAI.__init__(self, level, entId)
|
||
|
node = hidden.attachNewNode('DistributedSecurityCameraAI')
|
||
|
NodePath.__init__(self, node)
|
||
|
if not hasattr(self, 'switchId'):
|
||
|
self.switchId = 0
|
||
|
|
||
|
if not hasattr(self, 'damPow'):
|
||
|
self.damPow = 1
|
||
|
|
||
|
self.enabled = 1
|
||
|
self.detectName = None
|
||
|
|
||
|
def generate(self):
|
||
|
DistributedEntityAI.DistributedEntityAI.generate(self)
|
||
|
if self.switchId != 0:
|
||
|
self.accept(self.getOutputEventName(self.switchId), self.reactToSwitch)
|
||
|
|
||
|
self.detectName = 'laserField %s' % self.doId
|
||
|
taskMgr.doMethodLater(3.0, self._DistributedSecurityCameraAI__detect, self.detectName)
|
||
|
self.setPos(self.pos)
|
||
|
self.setHpr(self.hpr)
|
||
|
|
||
|
def delete(self):
|
||
|
if self.detectName:
|
||
|
taskMgr.remove(self.detectName)
|
||
|
|
||
|
self.ignoreAll()
|
||
|
DistributedEntityAI.DistributedEntityAI.delete(self)
|
||
|
|
||
|
def destroy(self):
|
||
|
self.notify.info('destroy entity(laserField) %s' % self.entId)
|
||
|
DistributedEntityAI.DistributedEntityAI.destroy(self)
|
||
|
|
||
|
def _DistributedSecurityCameraAI__detect(self, task):
|
||
|
isThereAnyToons = False
|
||
|
if hasattr(self, 'level'):
|
||
|
toonInRange = 0
|
||
|
for avId in self.level.presentAvIds:
|
||
|
if avId in self.air.doId2do:
|
||
|
av = self.air.doId2do[avId]
|
||
|
isThereAnyToons = True
|
||
|
distance = self.getDistance(av)
|
||
|
continue
|
||
|
|
||
|
if isThereAnyToons:
|
||
|
randTime = float(random.randint(1, 6)) * 0.5
|
||
|
taskMgr.doMethodLater(randTime, self._DistributedSecurityCameraAI__detect, self.detectName)
|
||
|
randTarget = random.randint(0, 100)
|
||
|
self.sendUpdate('setTarget', [
|
||
|
randTarget])
|
||
|
|
||
|
|
||
|
return Task.done
|
||
|
|
||
|
def hit(self, hitX, hitY):
|
||
|
if self.enabled:
|
||
|
self.game.hit(hitX, hitY)
|
||
|
|
||
|
def reactToSwitch(self, on):
|
||
|
if on:
|
||
|
self.trapDisable()
|
||
|
self.game.win()
|
||
|
|
||
|
def trapFire(self):
|
||
|
avId = self.air.getAvatarIdFromSender()
|
||
|
toon = self.air.doId2do[avId]
|
||
|
if toon:
|
||
|
toon.takeDamage(self.damPow)
|
||
|
|
||
|
def trapDisable(self):
|
||
|
self.enabled = 0
|