| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # Utility functions that are useful to both AI and client CartesianGrid code
- class CartesianGridBase:
- def isValidZone(self, zoneId):
- if self.style == "Cartesian":
- if ((zoneId < self.startingZone) or
- (zoneId > self.startingZone + self.gridSize * self.gridSize - 1)):
- return 0
- return 1
- elif self.style == "CartesianStated":
- return 1
- else:
- return 0
-
- def getZoneFromXYZ(self, pos):
- # NOTE: pos should be relative to our own grid origin
- # Convert a 3d position to a zone
- dx = self.cellWidth * self.gridSize * .5
- x = pos[0] + dx
- y = pos[1] + dx
- col = x // self.cellWidth
- row = y // self.cellWidth
- # Compute which zone we are in
- zoneId = int(self.startingZone + ((row * self.gridSize) + col))
- return zoneId
- def getGridSizeFromSphereRadius(self, sphereRadius, cellWidth, gridRadius):
- # NOTE: This ensures that the grid is at least a "gridRadius" number of cells
- # larger than the trigger sphere that loads the grid. This gives us some
- # room to start setting interest to the grid before we expect to see any objects
- # on it.
- sphereRadius = max(sphereRadius, gridRadius*cellWidth)
- return 2 * (sphereRadius // cellWidth)
-
- def getZoneCellOrigin(self, zoneId):
- dx = self.cellWidth * self.gridSize * .5
- zone = zoneId - self.startingZone
- row = zone // self.gridSize
- col = zone % self.gridSize
- x = col * self.cellWidth - dx
- y = row * self.cellWidth - dx
- return (x,y,0)
-
|