import random

from direct.distributed import ClockDelta
from direct.task import Task
from toontown.coghq import LaserGameBase


class LaserGameAvoid(LaserGameBase.LaserGameBase):
    def __init__(self, funcSuccess, funcFail, funcSendGrid, funcSetGrid):
        LaserGameBase.LaserGameBase.__init__(self, funcSuccess, funcFail, funcSendGrid, funcSetGrid)
        self.setGridSize(8, 8)
        self.blankGrid()
        self.cycleName = simbase.air.trueUniqueName('AvoidGame')


    def delete(self):
        LaserGameBase.LaserGameBase.delete(self)
        self.endTask()


    def win(self):
        if not self.finshed:
            self.blankGrid()
            self.funcSendGrid()
            self.endTask()

        LaserGameBase.LaserGameBase.win(self)


    def lose(self):
        self.endTask()
        self.blankGrid()
        self.funcSendGrid()
        LaserGameBase.LaserGameBase.lose(self)


    def endTask(self):
        taskMgr.remove(self.cycleName)


    def startGrid(self):
        LaserGameBase.LaserGameBase.startGrid(self)
        for column in xrange(0, self.gridNumX):
            for row in xrange(0, self.gridNumY):
                tile = random.choice([
                    0,
                    14,
                    12])
                self.gridData[column][row] = tile


        taskMgr.doMethodLater(2.5, self._LaserGameAvoid__cycle, self.cycleName)


    def _LaserGameAvoid__cycle(self, taskMgrFooler = 0):
        if not hasattr(self, 'gridNumX'):
            return Task.done

        for column in xrange(0, self.gridNumX):
            for row in xrange(0, self.gridNumY):
                if self.gridData[column][row] == 0:
                    tile = random.choice([
                        0,
                        14])
                    self.gridData[column][row] = tile
                    continue
                if self.gridData[column][row] == 14:
                    tile = 12
                    self.gridData[column][row] = tile
                    continue
                if self.gridData[column][row] == 12:
                    tile = 0
                    self.gridData[column][row] = tile
                    continue


        if not self.finshed:
            taskMgr.doMethodLater(2.5, self._LaserGameAvoid__cycle, self.cycleName)
            self.funcSendGrid()

        return Task.done