Ejemplo n.º 1
0
    def load(self):
        Entity.load(self)

        self.setPos(self.cEntity.getOrigin())
        self.setHpr(self.cEntity.getAngles())

        self.setDepthWrite(False, 1)
        col = self.getEntityValueColor("_light")
        self.rgbColor = col
        self.setAttrib(
            ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OOne,
                                  ColorBlendAttrib.OOne), 1)

        self.hide(CIGlobals.ShadowCameraBitmask)

        self.spotlightLength = self.getEntityValueFloat(
            "SpotlightLength") / 16.0
        self.spotlightWidth = self.getEntityValueFloat("SpotlightWidth") / 16.0

        beamAndHalo = loader.loadModel(
            "phase_14/models/misc/light_beam_and_halo.bam")

        # Blend between halo and beam
        spotlightroot = self.attachNewNode('spotlightRoot')
        spotlightroot.setP(90)
        self.spotlight = beamAndHalo.find("**/beam")
        self.spotlight.setBillboardAxis()
        self.spotlight.reparentTo(spotlightroot)

        self.halo = CIGlobals.makeLightGlow(self.spotlightWidth)
        self.halo.reparentTo(self)

        beamAndHalo.removeNode()

        entPos = self.getPos()

        spotDir = self.getQuat().getForward()
        # User specified a max length, but clip that length so the spot effect doesn't appear to go through a floor or wall
        traceEnd = entPos + (spotDir * self.spotlightLength)
        endPos = self.bspLoader.clipLine(entPos, traceEnd)
        realLength = (endPos - entPos).length()
        self.spotlight.setSz(realLength)
        self.spotlight.setSx(self.spotlightWidth)

        self.spotlightDir = spotDir
        self.negSpotlightDir = -self.spotlightDir

        # Full beam, no halo
        self.setBeamHaloFactor(1.0)

        self.reparentTo(render)

        # Only update the spotlight if the object passes the Cull test.
        self.node().setFinal(True)
        clbk = CallbackNode('point_spotlight_callback')
        clbk.setCullCallback(CallbackObject.make(self.__spotlightThink))
        clbk.setBounds(BoundingSphere((0, 0, 0), 0))
        self.callback = self.attachNewNode(clbk)
        self.callback.hide(CIGlobals.ReflectionCameraBitmask)
        self.callback.hide(CIGlobals.ShadowCameraBitmask)
Ejemplo n.º 2
0
    def load(self):
        Entity.load(self)

        entnum = self.cEntity.getBspEntnum()
        loader = base.bspLoader

        lightColor = self.getEntityValueColor("_light")
        width = self.getEntityValueFloat("width")
        height = self.getEntityValueFloat("height")
        self.lightGlow = CIGlobals.makeLightGlow((width, 1, height))
        self.lightGlow.reparentTo(self)
        self.lightGlow.setTwoSided(True)
        self.lightGlow.setColorScale(lightColor, 1)

        self.reparentTo(render)
        self.setPos(self.cEntity.getOrigin())