Grid.range[XYZ]: ability to pad the range
Grid.toggleGrid(): toggle everything! Grid.getSum(): give correct sum even if the default is not 0
This commit is contained in:
parent
d8d7112098
commit
3b0a6480a3
@ -51,14 +51,16 @@ class Grid:
|
||||
self.minZ = min(pos.z, self.minZ)
|
||||
self.maxZ = max(pos.z, self.maxZ)
|
||||
|
||||
def rangeX(self):
|
||||
return range(self.minX, self.maxX + 1)
|
||||
def rangeX(self, pad: int = 0):
|
||||
return range(self.minX - pad, self.maxX + pad + 1)
|
||||
|
||||
def rangeY(self):
|
||||
return range(self.minY, self.maxY + 1)
|
||||
def rangeY(self, pad: int = 0):
|
||||
return range(self.minY - pad, self.maxY + pad + 1)
|
||||
|
||||
def rangeZ(self):
|
||||
return range(self.minZ, self.maxZ + 1)
|
||||
def rangeZ(self, pad: int = 0):
|
||||
if not self.mode3D:
|
||||
raise ValueError("rangeZ not available in 2D space")
|
||||
return range(self.minZ - pad, self.maxZ + pad + 1)
|
||||
|
||||
def toggle(self, pos: Coordinate):
|
||||
if pos in self.__grid:
|
||||
@ -67,6 +69,15 @@ class Grid:
|
||||
self.__trackBoundaries(pos)
|
||||
self.__grid[pos] = not self.__default
|
||||
|
||||
def toggleGrid(self):
|
||||
for x in self.rangeX():
|
||||
for y in self.rangeY():
|
||||
if not self.mode3D:
|
||||
self.toggle(Coordinate(x, y))
|
||||
else:
|
||||
for z in self.rangeZ():
|
||||
self.toggle(Coordinate(x, y, z))
|
||||
|
||||
def set(self, pos: Coordinate, value: Any = True) -> Any:
|
||||
if pos.z is not None:
|
||||
self.mode3D = True
|
||||
@ -139,12 +150,21 @@ class Grid:
|
||||
return list(self.__grid.keys())
|
||||
|
||||
def getSum(self, includeNegative: bool = True) -> Numeric:
|
||||
grid_sum = 0
|
||||
for value in self.__grid.values():
|
||||
if includeNegative or value > 0:
|
||||
grid_sum += value
|
||||
|
||||
return grid_sum
|
||||
if not self.mode3D:
|
||||
return sum(
|
||||
self.get(Coordinate(x, y))
|
||||
for x in self.rangeX()
|
||||
for y in self.rangeY()
|
||||
if includeNegative or self.get(Coordinate(x, y)) >= 0
|
||||
)
|
||||
else:
|
||||
return sum(
|
||||
self.get(Coordinate(x, y, z))
|
||||
for x in self.rangeX()
|
||||
for y in self.rangeY()
|
||||
for z in self.rangeZ()
|
||||
if includeNegative or self.get(Coordinate(x, y)) >= 0
|
||||
)
|
||||
|
||||
def getNeighboursOf(self, pos: Coordinate, includeDefault: bool = False, includeDiagonal: bool = True) \
|
||||
-> List[Coordinate]:
|
||||
@ -259,11 +279,11 @@ class Grid:
|
||||
|
||||
return pathCoords
|
||||
|
||||
def print(self, spacer: str = "", true_char: str = None):
|
||||
def print(self, spacer: str = "", true_char: str = None, false_char: str = " "):
|
||||
for y in range(self.minY, self.maxY + 1):
|
||||
for x in range(self.minX, self.maxX + 1):
|
||||
if true_char:
|
||||
print(true_char if self.get(Coordinate(x, y)) else " ", end="")
|
||||
print(true_char if self.get(Coordinate(x, y)) else false_char, end="")
|
||||
else:
|
||||
print(self.get(Coordinate(x, y)), end="")
|
||||
print(spacer, end="")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user