423 lines
10 KiB
Python
423 lines
10 KiB
Python
from pandac.PandaModules import Vec3, Vec4, Point3, TextNode, VBase4
|
|
from direct.gui.DirectGui import DirectFrame, DirectButton, DirectLabel, DirectScrolledList, DirectCheckButton
|
|
from direct.gui import DirectGuiGlobals
|
|
from direct.showbase import DirectObject
|
|
from direct.showbase import PythonUtil
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.parties import PartyGlobals
|
|
from toontown.parties.PartyInfo import PartyInfo
|
|
from toontown.parties import PartyUtils
|
|
from toontown.parties.PartyEditorGridSquare import PartyEditorGridSquare
|
|
|
|
class PartyEditorGrid:
|
|
notify = directNotify.newCategory('PartyEditorGrid')
|
|
|
|
def __init__(self, partyEditor):
|
|
self.partyEditor = partyEditor
|
|
self.initGrid()
|
|
self.lastActivityIdPlaced = None
|
|
return
|
|
|
|
def initGrid(self):
|
|
self.grid = [[None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None],
|
|
[None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None],
|
|
[None,
|
|
None,
|
|
None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None],
|
|
[None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None,
|
|
None,
|
|
None],
|
|
[None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True],
|
|
[True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True],
|
|
[True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True],
|
|
[True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True],
|
|
[True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True],
|
|
[None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True],
|
|
[None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None],
|
|
[None,
|
|
None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None],
|
|
[None,
|
|
None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None],
|
|
[None,
|
|
None,
|
|
None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None,
|
|
None],
|
|
[None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
True,
|
|
None,
|
|
None,
|
|
None]]
|
|
for y in range(len(self.grid)):
|
|
for x in range(len(self.grid[0])):
|
|
if self.grid[y][x]:
|
|
self.grid[y][x] = PartyEditorGridSquare(self.partyEditor, x, y)
|
|
|
|
return None
|
|
|
|
def getActivitiesOnGrid(self):
|
|
activities = []
|
|
for y in range(len(self.grid)):
|
|
for x in range(len(self.grid[0])):
|
|
if self.grid[y][x] and self.grid[y][x].gridElement:
|
|
if not self.grid[y][x].gridElement.isDecoration:
|
|
activityTuple = self.grid[y][x].gridElement.getActivityTuple(x, y)
|
|
if activityTuple not in activities:
|
|
activities.append(activityTuple)
|
|
|
|
return activities
|
|
|
|
def getActivitiesElementsOnGrid(self):
|
|
activities = []
|
|
activityElems = []
|
|
for y in range(len(self.grid)):
|
|
for x in range(len(self.grid[0])):
|
|
if self.grid[y][x] and self.grid[y][x].gridElement:
|
|
if not self.grid[y][x].gridElement.isDecoration:
|
|
activityTuple = self.grid[y][x].gridElement.getActivityTuple(x, y)
|
|
if activityTuple not in activities:
|
|
activities.append(activityTuple)
|
|
activityElems.append(self.grid[y][x].gridElement)
|
|
|
|
return activityElems
|
|
|
|
def getDecorationsOnGrid(self):
|
|
decorations = []
|
|
for y in range(len(self.grid)):
|
|
for x in range(len(self.grid[0])):
|
|
if self.grid[y][x] and self.grid[y][x].gridElement:
|
|
if self.grid[y][x].gridElement.isDecoration:
|
|
decorationTuple = self.grid[y][x].gridElement.getDecorationTuple(x, y)
|
|
if decorationTuple not in decorations:
|
|
decorations.append(decorationTuple)
|
|
|
|
return decorations
|
|
|
|
def getGridSquare(self, x, y):
|
|
if y < 0 or y >= PartyGlobals.PartyEditorGridSize[1]:
|
|
return None
|
|
if x < 0 or x >= PartyGlobals.PartyEditorGridSize[0]:
|
|
return None
|
|
return self.grid[y][x]
|
|
|
|
def checkGridSquareForAvailability(self, gridSquare, size):
|
|
xOffsetLow, xOffsetHigh, yOffset = self.getXYOffsets(size)
|
|
for y in range(int(gridSquare.y - size[1] / 2), int(gridSquare.y + size[1] / 2) + yOffset):
|
|
for x in range(int(gridSquare.x - size[0] / 2) + xOffsetLow, int(gridSquare.x + size[0] / 2) + xOffsetHigh):
|
|
testGridSquare = self.getGridSquare(x, y)
|
|
if testGridSquare is None:
|
|
return False
|
|
if testGridSquare.gridElement is not None:
|
|
return False
|
|
|
|
return True
|
|
|
|
def getClearGridSquare(self, size, desiredXY = None):
|
|
if desiredXY is not None:
|
|
x = desiredXY[0]
|
|
y = desiredXY[1]
|
|
if self.grid[y][x] is not None:
|
|
if self.checkGridSquareForAvailability(self.grid[y][x], size):
|
|
return self.grid[y][x]
|
|
for y in range(PartyGlobals.PartyEditorGridSize[1]):
|
|
for x in range(PartyGlobals.PartyEditorGridSize[0]):
|
|
if self.grid[y][x] is not None:
|
|
if self.checkGridSquareForAvailability(self.grid[y][x], size):
|
|
return self.grid[y][x]
|
|
|
|
return
|
|
|
|
def getXYOffsets(self, size):
|
|
if size[0] % 2 == 0:
|
|
xOffsetLow = 1
|
|
xOffsetHigh = 1
|
|
else:
|
|
xOffsetLow = 0
|
|
xOffsetHigh = 1
|
|
if size[1] % 2 == 0:
|
|
yOffset = 0
|
|
else:
|
|
yOffset = 1
|
|
return (xOffsetLow, xOffsetHigh, yOffset)
|
|
|
|
def registerNewElement(self, gridElement, centerGridSquare, size):
|
|
xOffsetLow, xOffsetHigh, yOffset = self.getXYOffsets(size)
|
|
for y in range(int(centerGridSquare.y - size[1] / 2), int(centerGridSquare.y + size[1] / 2) + yOffset):
|
|
for x in range(int(centerGridSquare.x - size[0] / 2) + xOffsetLow, int(centerGridSquare.x + size[0] / 2) + xOffsetHigh):
|
|
testGridSquare = self.getGridSquare(x, y)
|
|
if testGridSquare is None:
|
|
return False
|
|
if testGridSquare.gridElement is not None:
|
|
return False
|
|
else:
|
|
testGridSquare.gridElement = gridElement
|
|
if not gridElement.isDecoration:
|
|
self.lastActivityIdPlaced = gridElement.id
|
|
|
|
return
|
|
|
|
def removeElement(self, centerGridSquare, size):
|
|
xOffsetLow, xOffsetHigh, yOffset = self.getXYOffsets(size)
|
|
for y in range(int(centerGridSquare.y - size[1] / 2), int(centerGridSquare.y + size[1] / 2) + yOffset):
|
|
for x in range(int(centerGridSquare.x - size[0] / 2) + xOffsetLow, int(centerGridSquare.x + size[0] / 2) + xOffsetHigh):
|
|
testGridSquare = self.getGridSquare(x, y)
|
|
if testGridSquare is None:
|
|
return False
|
|
if testGridSquare.gridElement is None:
|
|
return False
|
|
else:
|
|
testGridSquare.gridElement = None
|
|
|
|
return
|
|
|
|
def destroy(self):
|
|
self.partyEditor = None
|
|
for y in range(len(self.grid)):
|
|
for x in range(len(self.grid[0])):
|
|
if self.grid[y][x]:
|
|
self.grid[y][x].destroy()
|
|
|
|
del self.grid
|
|
return
|