from panda3d.core import *
from direct.showbase.PythonUtil import Functor
from toontown.toonbase import ToontownGlobals
from direct.directnotify import DirectNotifyGlobal

class FactoryCameraViews:
    notify = DirectNotifyGlobal.directNotify.newCategory('FactoryCameraViews')

    def __init__(self, factory):
        self.factory = factory
        av = base.localAvatar
        self.currentCamPos = None
        self.views = [['signatureRoomView', (Point3(0.0, -14.8419799805, 13.212685585),
           Point3(0.0, -13.9563484192, 12.749215126),
           Point3(0.0, 1.5, 15.75),
           Point3(0.0, 1.5, -3.9375),
           1), ['localToonLeftBattle']], ['lookoutTrigger', (Point3(0, -17.7, 28.8),
           Point3(0, 10, 0),
           Point3(0.0, 1.5, 15.75),
           Point3(0.0, 1.5, -3.9375),
           1), []], ['moleFieldView', (Point3(0, -17.7, 28.8),
           Point3(0, 10, 0),
           Point3(0.0, 1.5, 15.75),
           Point3(0.0, 1.5, -3.9375),
           1), []]]
        camHeight = av.getClampedAvatarHeight()
        for i in xrange(len(self.views)):
            camPos = self.views[i][1]
            av.auxCameraPositions.append(camPos)
            factory.accept('enter' + self.views[i][0], Functor(self.switchCamPos, i))
            for msg in self.views[i][2]:
                factory.accept(msg, self.checkCamPos)

        return

    def delete(self):
        for i in xrange(len(self.views)):
            base.localAvatar.auxCameraPositions.remove(self.views[i][1])
            self.factory.ignore('enter' + self.views[i][0])
            self.factory.ignore('exit' + self.views[i][0])
            for msg in self.views[i][2]:
                self.factory.ignore(msg)

        base.localAvatar.resetCameraPosition()
        del self.views

    def switchCamPos(self, viewIndex, colEntry = None):
        av = base.localAvatar
        prevView = av.cameraIndex
        self.currentCamPos = viewIndex
        av.accept('exit' + self.views[viewIndex][0], Functor(self.prevCamPos, prevView))
        self.notify.info('auto-switching to camera position %s' % viewIndex)
        av.setCameraSettings(self.views[viewIndex][1])

    def prevCamPos(self, index, colEntry = None):
        av = base.localAvatar
        if len(av.cameraPositions) > index:
            av.setCameraPositionByIndex(index)
        self.currentCamPos = None
        return

    def checkCamPos(self):
        if self.currentCamPos != None:
            av = base.localAvatar
            viewIndex = self.currentCamPos
            self.notify.info('returning to camera position %s' % viewIndex)
            av.setCameraSettings(self.views[viewIndex][1])
        return
