toontown-just-works/toontown/cogdominium/CogdoUtil.py

171 lines
4.3 KiB
Python
Raw Normal View History

2024-07-07 18:08:39 -05:00
from pandac.PandaModules import ColorBlendAttrib
from toontown.suit import SuitDNA
import random
ModelPhase = 5
ModelTypes = {'animation': 'a',
'model': 'm',
'rig': 'r'}
ModelGroups = {'area': 'ara',
'gui': 'gui'}
Games = {'flying': 'cfg',
'maze': 'cmg',
'shared': 'csa'}
def getAllowedTracks():
tracks = []
if config.GetBool('want-sellbot-cogdo', True):
tracks.append('s')
if config.GetBool('want-lawbot-cogdo', True):
tracks.append('l')
return tracks
def getCogdoTrack(suitName):
tracks = getAllowedTracks()
if not tracks:
return None
track = SuitDNA.getSuitDept(suitName)
return track if track in tracks else random.choice(tracks)
def loadFlyingModel(baseName, type = 'model', group = 'area'):
return loadModel(baseName, 'flying', type=type, group=group)
def loadMazeModel(baseName, type = 'model', group = 'area'):
return loadModel(baseName, 'maze', type=type, group=group)
def getModelPath(baseName, game = 'shared', type = 'model', group = 'area'):
extension = ''
if hasattr(getBase(), 'air'):
extension = '.bam'
return 'phase_%i/models/cogdominium/tt_%s_%s_%s_%s%s' % (ModelPhase,
ModelTypes[type],
ModelGroups[group],
Games[game],
baseName,
extension)
def loadModel(baseName, game = 'shared', type = 'model', group = 'area'):
return loader.loadModel(getModelPath(baseName, game, type, group))
class VariableContainer:
pass
class DevVariableContainer:
def __init__(self, name):
self.__dict__['_enabled'] = config.GetBool('%s-dev' % name, False)
def __setattr__(self, name, value):
self.__dict__[name] = self._enabled and value
def getRandomDialogueLine(lineList, rng):
return lineList[rng.randint(0, len(lineList) - 1)]
class CogdoGameMovie:
def __init__(self):
self._ival = None
self._task = None
return
def load(self):
from toontown.toonbase import ToontownGlobals
from pandac.PandaModules import TextNode
textNode = TextNode('moviedialogue')
textNode.setTextColor(0, 0, 0, 1)
textNode.setCardColor(1, 1, 1, 1)
textNode.setCardAsMargin(0, 0, 0, 0)
textNode.setCardDecal(True)
textNode.setWordwrap(27.0)
textNode.setAlign(TextNode.ACenter)
textNode.setFont(ToontownGlobals.getToonFont())
self._dialogueLabel = aspect2d.attachNewNode(textNode)
self._dialogueLabel.setScale(0.06, 0.06, 0.06)
self._dialogueLabel.setPos(0.32, 0, -0.75)
self._dialogueLabel.reparentTo(hidden)
def unload(self):
if self._ival is not None and self._ival.isPlaying():
self.finish()
self._ival = None
self._dialogueLabel.removeNode()
del self._dialogueLabel
return
def getIval(self):
return self._ival
def play(self, elapsedTime = 0.0):
self._dialogueLabel.reparentTo(aspect2d)
self._ival.start(elapsedTime)
def _startUpdateTask(self):
self._task = taskMgr.add(self._updateTask, 'CogdoGameMovie_updateTask', 45)
def _stopUpdateTask(self):
if self._task is not None:
taskMgr.remove(self._task)
self._task = None
return
def _updateTask(self, task):
return task.cont
def end(self):
self._ival.finish()
def initializeLightCone(np, bin = 'fixed', sorting = 3):
np.node().setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne))
if bin:
np.setBin(bin, sorting)
np.setDepthWrite(False)
np.setTwoSided(True, 10000)
ROTATE_TABLE_ALLOWED_ANGLES = (0, 90, 180, 270)
def rotateTable(table, angle):
if angle == 0:
t = table[:]
elif angle == 90:
t = []
width = len(table[0])
height = len(table)
for j in xrange(width):
row = []
for i in xrange(height):
row.append(table[height - 1 - i][j])
t.append(row)
elif angle == 180:
t = table[:]
for row in t:
row.reverse()
t.reverse()
elif angle == 270:
t = []
width = len(table[0])
height = len(table)
for j in xrange(width):
row = []
for i in xrange(height):
row.append(table[i][width - 1 - j])
t.append(row)
return t