from panda3d.core 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