mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-11-01 01:07:54 +00:00
128 lines
No EOL
4.5 KiB
Python
128 lines
No EOL
4.5 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.showbase.ShadowPlacer import ShadowPlacer
|
|
from pandac.PandaModules import *
|
|
|
|
from otp.otpbase import OTPGlobals
|
|
|
|
|
|
globalDropShadowFlag = 1
|
|
def setGlobalDropShadowFlag(flag):
|
|
global globalDropShadowFlag
|
|
if flag != globalDropShadowFlag:
|
|
globalDropShadowFlag = flag
|
|
messenger.send('globalDropShadowFlagChanged')
|
|
|
|
|
|
globalDropShadowGrayLevel = 0.5
|
|
def setGlobalDropShadowGrayLevel(grayLevel):
|
|
global globalDropShadowGrayLevel
|
|
if grayLevel != globalDropShadowGrayLevel:
|
|
globalDropShadowGrayLevel = grayLevel
|
|
messenger.send('globalDropShadowGrayLevelChanged')
|
|
|
|
|
|
class ShadowCaster:
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('ShadowCaster')
|
|
|
|
def __init__(self, squareShadow = False):
|
|
if squareShadow:
|
|
self.shadowFileName = 'phase_3/models/props/square_drop_shadow'
|
|
else:
|
|
self.shadowFileName = 'phase_3/models/props/drop_shadow'
|
|
self.dropShadow = None
|
|
self.shadowPlacer = None
|
|
self.activeShadow = 0
|
|
self.wantsActive = 1
|
|
self.storedActiveState = 0
|
|
if hasattr(base, 'wantDynamicShadows') and base.wantDynamicShadows:
|
|
messenger.accept('globalDropShadowFlagChanged', self, self.__globalDropShadowFlagChanged)
|
|
messenger.accept('globalDropShadowGrayLevelChanged', self, self.__globalDropShadowGrayLevelChanged)
|
|
|
|
def delete(self):
|
|
if hasattr(base, 'wantDynamicShadows') and base.wantDynamicShadows:
|
|
messenger.ignore('globalDropShadowFlagChanged', self)
|
|
messenger.ignore('globalDropShadowGrayLevelChanged', self)
|
|
self.deleteDropShadow()
|
|
self.shadowJoint = None
|
|
|
|
def initializeDropShadow(self, hasGeomNode = True):
|
|
self.deleteDropShadow()
|
|
if hasGeomNode:
|
|
self.getGeomNode().setTag('cam', 'caster')
|
|
dropShadow = loader.loadModel(self.shadowFileName)
|
|
dropShadow.setScale(0.4)
|
|
dropShadow.flattenMedium()
|
|
dropShadow.setBillboardAxis(2)
|
|
dropShadow.setColor(0.0, 0.0, 0.0, globalDropShadowGrayLevel, 1)
|
|
self.shadowPlacer = ShadowPlacer(base.shadowTrav, dropShadow, OTPGlobals.WallBitmask, OTPGlobals.FloorBitmask)
|
|
self.dropShadow = dropShadow
|
|
if not globalDropShadowFlag:
|
|
self.dropShadow.hide()
|
|
if self.getShadowJoint():
|
|
dropShadow.reparentTo(self.getShadowJoint())
|
|
else:
|
|
self.dropShadow.hide()
|
|
self.setActiveShadow(self.wantsActive)
|
|
self.__globalDropShadowFlagChanged()
|
|
self.__globalDropShadowGrayLevelChanged()
|
|
|
|
def update(self):
|
|
pass
|
|
|
|
def deleteDropShadow(self):
|
|
if self.shadowPlacer:
|
|
self.shadowPlacer.delete()
|
|
self.shadowPlacer = None
|
|
if self.dropShadow:
|
|
self.dropShadow.removeNode()
|
|
self.dropShadow = None
|
|
|
|
def setActiveShadow(self, isActive = 1):
|
|
isActive = isActive and self.wantsActive
|
|
if not globalDropShadowFlag:
|
|
self.storedActiveState = isActive
|
|
if self.shadowPlacer != None:
|
|
isActive = isActive and globalDropShadowFlag
|
|
if self.activeShadow != isActive:
|
|
self.activeShadow = isActive
|
|
if isActive:
|
|
self.shadowPlacer.on()
|
|
else:
|
|
self.shadowPlacer.off()
|
|
|
|
def setShadowHeight(self, shadowHeight):
|
|
if self.dropShadow:
|
|
self.dropShadow.setZ(-shadowHeight)
|
|
|
|
def getShadowJoint(self):
|
|
if hasattr(self, 'shadowJoint'):
|
|
return self.shadowJoint
|
|
shadowJoint = self.find('**/attachShadow')
|
|
if shadowJoint.isEmpty():
|
|
self.shadowJoint = NodePath(self)
|
|
else:
|
|
self.shadowJoint = shadowJoint
|
|
return self.shadowJoint
|
|
|
|
def hideShadow(self):
|
|
self.dropShadow.hide()
|
|
|
|
def showShadow(self):
|
|
if not globalDropShadowFlag:
|
|
self.dropShadow.hide()
|
|
else:
|
|
self.dropShadow.show()
|
|
|
|
def __globalDropShadowFlagChanged(self):
|
|
if self.dropShadow != None:
|
|
if globalDropShadowFlag == 0:
|
|
if self.activeShadow == 1:
|
|
self.storedActiveState = 1
|
|
self.setActiveShadow(0)
|
|
elif self.activeShadow == 0:
|
|
self.setActiveShadow(1)
|
|
self.showShadow()
|
|
|
|
def __globalDropShadowGrayLevelChanged(self):
|
|
if self.dropShadow != None:
|
|
self.dropShadow.setColor(0.0, 0.0, 0.0, globalDropShadowGrayLevel, 1) |