from panda3d.core import *
from direct.interval.IntervalGlobal import *
from direct.showbase import DirectObject
from DroppedGag import *
types = ['',
 'Pie',
 'Banana',
 'Anvil']

class RaceGag(DirectObject.DirectObject):

    def __init__(self, parent, slot, testPos):
        DirectObject.DirectObject.__init__(self)
        self.parent = parent
        self.name = 'gag-' + str(slot)
        self.geom = DroppedGag(self.name, base.race.qbox)
        self.geom.dropShadow.setScale(0.7)
        self.geom.setPos(testPos + Vec3(0, 0, -1))
        qc = CollisionTube(Point3(0, 0, -2.5), Point3(0, 0, 2.5), 1)
        self.gagnp = NodePath(CollisionNode(self.name))
        self.gagnp.node().addSolid(qc)
        self.gagnp.reparentTo(self.geom)
        self.gagnp.node().setIntoCollideMask(BitMask32(32768))
        self.gagnp.node().setFromCollideMask(BitMask32(32768))
        self.slot = slot
        self.type = 0
        self.accept('imIn-' + self.name, self.hitGag)
        self.pickupSound = base.loadSfx('phase_6/audio/sfx/KART_getGag.ogg')
        self.fadeout = None
        return

    def delete(self):
        if self.fadeout:
            self.fadeout.finish()
            self.fadeout = None
        self.gagnp.removeNode()
        self.gagnp = None
        self.geom.delete()
        self.geom = None
        del self.parent
        self.ignore('imIn-' + self.name)
        return

    def getType(self):
        return self.type

    def isActive(self):
        if self.type:
            return True
        else:
            return False

    def genGag(self, spot, type):
        self.type = type
        fadein = self.geom.scaleInterval(1, 4)
        self.geom.setScale(0.001)
        self.geom.reparentTo(self.parent.geom)
        self.gagnp.reparentTo(self.geom)
        fadein.start()

    def hideGeom(self):
        self.geom.detachNode()

    def disableGag(self):
        self.gagnp.reparentTo(hidden)
        self.type = 0
        if self.fadeout:
            self.fadeout.finish()
        self.fadeout = Sequence(self.geom.scaleInterval(0.2, 0), Func(self.hideGeom))
        self.fadeout.start()

    def hitGag(self, cevent):
        if not self.parent.currGag:
            self.pickupSound.play()
            self.parent.pickupGag(self.slot, self.type)
            self.disableGag()
