2019-11-02 17:27:54 -05:00
|
|
|
from otp.ai.AIBaseGlobal import *
|
|
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
|
|
from toontown.battle import SuitBattleGlobals
|
2019-12-30 00:07:56 -06:00
|
|
|
from . import DistributedGoonAI
|
2019-11-02 17:27:54 -05:00
|
|
|
from direct.task.Task import Task
|
|
|
|
from toontown.coghq import DistributedCrushableEntityAI
|
|
|
|
import random
|
|
|
|
|
|
|
|
class DistributedGridGoonAI(DistributedGoonAI.DistributedGoonAI):
|
|
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedGridGoonAI')
|
|
|
|
|
|
|
|
def __init__(self, level, entId):
|
|
|
|
self.grid = None
|
|
|
|
self.h = 0
|
|
|
|
DistributedGoonAI.DistributedGoonAI.__init__(self, level, entId)
|
|
|
|
return
|
|
|
|
|
|
|
|
def generate(self):
|
|
|
|
self.notify.debug('generate')
|
|
|
|
DistributedCrushableEntityAI.DistributedCrushableEntityAI.generate(self)
|
|
|
|
|
|
|
|
def initGridDependents(self):
|
|
|
|
taskMgr.doMethodLater(2, self.goToNextPoint, self.taskName('walkTask'))
|
|
|
|
|
|
|
|
def getPosition(self):
|
|
|
|
if self.grid:
|
|
|
|
return self.grid.getObjPos(self.entId)
|
|
|
|
|
|
|
|
def getH(self):
|
|
|
|
return self.h
|
|
|
|
|
|
|
|
def goToNextPoint(self, task):
|
|
|
|
if not self.grid:
|
|
|
|
self.notify.warning("couldn't find grid, not starting")
|
|
|
|
return
|
|
|
|
if self.grid.checkMoveDir(self.entId, self.h):
|
|
|
|
ptA = Point3(*self.getPosition())
|
|
|
|
self.grid.doMoveDir(self.entId, self.h)
|
|
|
|
ptB = Point3(*self.getPosition())
|
|
|
|
self.sendUpdate('setPathPts', [ptA[0], ptA[1], ptA[2], ptB[0], ptB[1], ptB[2]])
|
|
|
|
tPathSegment = Vec3(ptA - ptB).length() / self.velocity
|
|
|
|
else:
|
|
|
|
turn = int(random.randrange(1, 4) * 90)
|
|
|
|
self.h = (self.h + turn) % 360
|
|
|
|
tPathSegment = 0.1
|
|
|
|
taskMgr.doMethodLater(tPathSegment, self.goToNextPoint, self.taskName('walkTask'))
|
|
|
|
return Task.done
|