from otp.ai.AIBaseGlobal import *
from direct.directnotify import DirectNotifyGlobal
from toontown.battle import SuitBattleGlobals
import DistributedGoonAI
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
