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)
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())