grid.Grid: finally add that stupid print() method I'm always writing for debugging

grid.Grid: add(), sub() and set() return what they've actually wrote to the cell
This commit is contained in:
Stefan Harmuth 2021-12-11 06:45:24 +01:00
parent 55a12f7dc8
commit abbf1c85e1

View File

@ -1,7 +1,7 @@
from __future__ import annotations
from .coordinate import Coordinate
from enum import Enum
from typing import Union, Any
from typing import Any, List, Union
OFF = False
ON = True
@ -46,7 +46,7 @@ class Grid:
self.__trackBoundaries(pos)
self.__grid[pos] = not self.__default
def set(self, pos: Coordinate, value: Any = True):
def set(self, pos: Coordinate, value: Any = True) -> Any:
if pos.z is not None:
self.mode3D = True
@ -56,6 +56,8 @@ class Grid:
self.__trackBoundaries(pos)
self.__grid[pos] = value
return value
def get(self, pos: Coordinate) -> Any:
if pos in self.__grid:
return self.__grid[pos]
@ -98,11 +100,11 @@ class Grid:
else:
return self.minX <= pos.x <= self.maxX and self.minY <= pos.y <= self.maxY
def add(self, pos: Coordinate, value: Union[float, int] = 1):
self.set(pos, self.get(pos) + value)
def add(self, pos: Coordinate, value: Union[float, int] = 1) -> Union[float, int]:
return self.set(pos, self.get(pos) + value)
def sub(self, pos: Coordinate, value: Union[float, int] = 1):
self.set(pos, self.get(pos) - value)
def sub(self, pos: Coordinate, value: Union[float, int] = 1) -> Union[float, int]:
return self.set(pos, self.get(pos) - value)
def getActiveCells(self):
return list(self.__grid.keys())
@ -115,6 +117,18 @@ class Grid:
return grid_sum
def getNeighboursOf(self, pos: Coordinate, includeDefault: bool = False, includeDiagonal: bool = True) \
-> List[Coordinate]:
neighbours = pos.getNeighbours(
includeDiagonal=includeDiagonal,
minX=self.minX, minY=self.minY, minZ=self.minZ,
maxX=self.maxX, maxY=self.maxY, maxZ=self.maxZ
)
if includeDefault:
return neighbours
else:
return [x for x in neighbours if self.get(x) != self.__default]
def getNeighbourSum(self, pos: Coordinate, includeNegative: bool = True, includeDiagonal: bool = True) \
-> Union[float, int]:
neighbour_sum = 0
@ -169,3 +183,11 @@ class Grid:
elif mode == GridTransformation.ROTATE_TWICE:
self.transform(GridTransformation.ROTATE_RIGHT)
self.transform(GridTransformation.ROTATE_RIGHT)
def print(self, spacer: str = ""):
for y in range(self.minY, self.maxY + 1):
for x in range(self.minX, self.maxX + 1):
print(self.get(Coordinate(x, y)), end="")
print(spacer, end="")
print()