oldschool-toontown/toontown/coghq/StageLayout.py
2019-12-30 01:07:56 -05:00

702 lines
8.9 KiB
Python

from direct.directnotify import DirectNotifyGlobal
from direct.showbase.PythonUtil import invertDictLossless
from toontown.coghq import StageRoomSpecs
from toontown.toonbase import ToontownGlobals
from direct.showbase.PythonUtil import normalDistrib, lerp
import random
def printAllCashbotInfo():
print('roomId: roomName')
for roomId, roomName in list(StageRoomSpecs.CashbotStageRoomId2RoomName.items()):
print('%s: %s' % (roomId, roomName))
print('\nroomId: numBattles')
for roomId, numBattles in list(StageRoomSpecs.roomId2numBattles.items()):
print('%s: %s' % (roomId, numBattles))
print('\nstageId floor roomIds')
printStageRoomIds()
print('\nstageId floor numRooms')
printNumRooms()
print('\nstageId floor numForcedBattles')
printNumBattles()
def iterateLawbotStages(func):
from toontown.toonbase import ToontownGlobals
for layoutId in range(len(stageLayouts)):
for floorNum in range(getNumFloors(layoutId)):
func(StageLayout(0, floorNum, layoutId))
def printStageInfo():
def func(sl):
print(sl)
iterateLawbotStages(func)
def printRoomUsage():
usage = {}
def func(sl):
for roomId in sl.getRoomIds():
usage.setdefault(roomId, 0)
usage[roomId] += 1
iterateLawbotStages(func)
roomIds = list(usage.keys())
roomIds.sort()
for roomId in roomIds:
print('%s: %s' % (roomId, usage[roomId]))
def printRoomInfo():
roomIds = list(StageRoomSpecs.roomId2numCogs.keys())
roomIds.sort()
for roomId in roomIds:
print('room %s: %s cogs, %s cogLevels, %s merit cogLevels' % (roomId,
StageRoomSpecs.roomId2numCogs[roomId],
StageRoomSpecs.roomId2numCogLevels[roomId],
StageRoomSpecs.roomId2numMeritCogLevels[roomId]))
def printStageRoomIds():
def func(ml):
print(ml.getStageId(), ml.getFloorNum(), ml.getRoomIds())
iterateCashbotStages(func)
def printStageRoomNames():
def func(ml):
print(ml.getStageId(), ml.getFloorNum(), ml.getRoomNames())
iterateCashbotStages(func)
def printNumRooms():
def func(ml):
print(ml.getStageId(), ml.getFloorNum(), ml.getNumRooms())
iterateCashbotStages(func)
def printNumBattles():
def func(ml):
print(ml.getStageId(), ml.getFloorNum(), ml.getNumBattles())
iterateCashbotStages(func)
DefaultLayout1 = ({0: (0,
1,
2,
3,
1,
2,
4),
1: (0,
1,
2,
3,
1,
2,
4),
2: (0,
1,
2,
3,
1,
2,
4),
3: (0,
1,
2,
3,
1,
2,
4),
4: (0,
1,
2,
3,
1,
2,
4),
5: (0,
1,
2,
3,
1,
2,
4),
6: (0,
1,
2,
3,
1,
2,
4),
7: (0,
1,
2,
3,
1,
2,
4),
8: (0,
1,
2,
3,
1,
2,
4),
9: (0,
1,
2,
3,
1,
2,
4),
10: (0,
1,
2,
3,
1,
2,
4),
11: (0,
1,
2,
3,
1,
2,
4),
12: (0,
1,
2,
3,
1,
2,
4),
13: (0,
1,
2,
3,
1,
2,
4),
14: (0,
1,
2,
3,
1,
2,
4),
15: (0,
1,
2,
3,
1,
2,
4),
16: (0,
1,
2,
3,
1,
2,
4),
17: (0,
1,
2,
3,
1,
2,
4),
18: (0,
1,
2,
3,
1,
2,
4),
19: (0,
1,
2,
3,
1,
2,
4)},)
DefaultLayout = [(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1),
(0,
5,
2,
3,
5,
2,
1)]
testLayout = [(0,
3,
8,
105,
1), (0,
7,
8,
105,
2)]
LawOfficeLayout2_0 = [(0,
7,
8,
105,
1), (0,
10,
104,
103,
1), (0,
105,
101,
12,
2)]
LawOfficeLayout2_1 = [(0,
10,
11,
104,
1), (0,
100,
105,
8,
1), (0,
103,
3,
104,
2)]
LawOfficeLayout2_2 = [(0,
8,
105,
102,
1), (0,
100,
104,
10,
1), (0,
101,
105,
3,
2)]
LawOfficeLayout3_0 = [(0,
8,
101,
104,
1),
(0,
7,
105,
103,
1),
(0,
100,
8,
104,
1),
(0,
105,
10,
12,
2)]
LawOfficeLayout3_1 = [(0,
100,
8,
105,
1),
(0,
103,
10,
104,
1),
(0,
8,
7,
105,
1),
(0,
104,
12,
101,
2)]
LawOfficeLayout3_2 = [(0,
103,
104,
100,
1),
(0,
102,
8,
105,
1),
(0,
10,
104,
3,
1),
(0,
105,
10,
11,
2)]
LawOfficeLayout4_0 = [(0,
3,
7,
105,
1),
(0,
103,
104,
8,
1),
(0,
102,
105,
11,
1),
(0,
8,
104,
100,
1),
(0,
10,
105,
12,
2)]
LawOfficeLayout4_1 = [(0,
7,
105,
102,
1),
(0,
103,
12,
104,
1),
(0,
101,
104,
8,
1),
(0,
10,
3,
105,
1),
(0,
8,
104,
102,
2)]
LawOfficeLayout4_2 = [(0,
11,
105,
102,
1),
(0,
3,
104,
8,
1),
(0,
100,
10,
104,
1),
(0,
8,
12,
105,
1),
(0,
104,
102,
11,
2)]
LawOfficeLayout5_0 = [(0,
104,
10,
7,
1),
(0,
105,
103,
3,
1),
(0,
104,
11,
12,
1),
(0,
101,
8,
105,
1),
(0,
10,
104,
12,
1),
(0,
105,
100,
7,
2)]
LawOfficeLayout5_1 = [(0,
11,
8,
104,
1),
(0,
102,
10,
105,
1),
(0,
104,
7,
101,
1),
(0,
105,
10,
12,
1),
(0,
8,
11,
105,
1),
(0,
104,
12,
3,
2)]
LawOfficeLayout5_2 = [(0,
105,
103,
8,
1),
(0,
10,
3,
104,
1),
(0,
105,
103,
101,
1),
(0,
12,
8,
104,
1),
(0,
7,
11,
104,
1),
(0,
105,
12,
10,
2)]
stageLayouts = [LawOfficeLayout2_0,
LawOfficeLayout2_1,
LawOfficeLayout2_2,
LawOfficeLayout3_0,
LawOfficeLayout3_1,
LawOfficeLayout3_2,
LawOfficeLayout4_0,
LawOfficeLayout4_1,
LawOfficeLayout4_2,
LawOfficeLayout5_0,
LawOfficeLayout5_1,
LawOfficeLayout5_2]
stageLayouts1 = [testLayout,
testLayout,
testLayout,
testLayout,
testLayout,
testLayout,
testLayout,
testLayout,
testLayout,
testLayout,
testLayout,
testLayout]
def getNumFloors(layoutIndex):
return len(stageLayouts[layoutIndex])
class StageLayout:
notify = DirectNotifyGlobal.directNotify.newCategory('StageLayout')
def __init__(self, stageId, floorNum, stageLayout = 0):
self.stageId = stageId
self.floorNum = floorNum
self.roomIds = []
self.hallways = []
self.layoutId = stageLayout
self.roomIds = stageLayouts[stageLayout][floorNum]
self.numRooms = 1 + len(self.roomIds)
self.numHallways = self.numRooms - 1
hallwayRng = self.getRng()
connectorRoomNames = StageRoomSpecs.CashbotStageConnectorRooms
for i in range(self.numHallways):
self.hallways.append(hallwayRng.choice(connectorRoomNames))
def getNumRooms(self):
return len(self.roomIds)
def getRoomId(self, n):
return self.roomIds[n]
def getRoomIds(self):
return self.roomIds[:]
def getRoomNames(self):
names = []
for roomId in self.roomIds:
names.append(StageRoomSpecs.CashbotStageRoomId2RoomName[roomId])
return names
def getNumHallways(self):
return len(self.hallways)
def getHallwayModel(self, n):
return self.hallways[n]
def getNumBattles(self):
numBattles = 0
for roomId in self.getRoomIds():
numBattles += StageRoomSpecs.roomId2numBattles[roomId]
return numBattles
def getNumCogs(self):
numCogs = 0
for roomId in self.getRoomIds():
numCogs += StageRoomSpecs.roomId2numCogs[roomId]
return numCogs
def getNumCogLevels(self):
numLevels = 0
for roomId in self.getRoomIds():
numLevels += StageRoomSpecs.roomId2numCogLevels[roomId]
return numLevels
def getNumMeritCogLevels(self):
numLevels = 0
for roomId in self.getRoomIds():
numLevels += StageRoomSpecs.roomId2numMeritCogLevels[roomId]
return numLevels
def getStageId(self):
return self.stageId
def getFloorNum(self):
return self.floorNum
def getRng(self):
return random.Random(self.stageId * self.floorNum)
def __str__(self):
return 'StageLayout: id=%s, layout=%s, floor=%s, meritCogLevels=%s, numRooms=%s, numBattles=%s, numCogs=%s' % (self.stageId,
self.layoutId,
self.floorNum,
self.getNumMeritCogLevels(),
self.getNumRooms(),
self.getNumBattles(),
self.getNumCogs())
def __repr__(self):
return str(self)