Partition Grid

What is it?

The partition grid is an internal data structure used by the game board to make finding objects on the map easy and efficient.

It works by splitting up the map of 500x500 game units into squares that are each 20x20 units. This means that the map consists of 25x25 partitions.

Your client is passed in a PartitionGrid object within the GameBoard object by default named game_board. You can access the PartitionGrid object by calling game_board.partition

Obfuscation

The partition grid given to your client isn’t the same partition grid used by the engine, instead it is a deepcopy of the internal one.

During this process of deep copying, it is also filtered to remove any players or items that are outside of your client’s view. See the page on what your client can see to learn more.

How to use it

The partition grid is meant to make it easy for you to find all the objects you need, however, if your team decides it is too complex, buggy, or not right for you, there is another option.

Instead of using the partitions you can get a list of all the objects in the map. To do this, you can use this method:

partition_grid.get_all_objects() -> list

This will return a list of all objects contained in a python list object.


If you do want to use the partition as the partition grid object, there are a number of helpful methods to allow you to efficiently find objects in particular locations.

The PartitionGrid is a 3 dimensional list, with the most interior list containing a subset of the objects within the map.

Properties

The partition grid has a couple of properties:

partition_grid.partition_width

Width of a single partition in game units

partition_grid.partition_height

Height of a single partition in game units

partition_grid.partitions_tall

How many partitions tall the grid is

partition_grid.partitions_wide

How many partitions wide the grid is

Methods

get_partition_objects

partition_grid.get_partition_objects(x: float, y: float) -> list

This method returns all objects within the partition that encompasses point (x, y)

get_partition_objects_by_index

partition_grid.get_partition_objects_by_index(row: int, column: int) -> list

This method returns all objects at the partition at the given row and column.

find_object_coordinates

partition_grid.find_object_coordinates(x: float, y: float) -> obj, bool

Returns the object at point (x, y) if there is an object at those coordinates, false otherwise

find_objects_hitbox

partition_grid.find_object_hitbox(hitbox: Hitbox) -> obj, bool

Returns the object if there is an object on the map that collides with the given hitbox, false otherwise

find_object_object

partition_grid.find_object_object(given_obj: MapObject) -> obj, bool

Returns object if there is an object that collides with the given object, false otherwise

remove_object

partition_grid.remove_object(obj: MapObject) -> None

Removes a given object from the structure. Note, because the client has it’s own copy of the partition grid, it will not remove it from the game entirely. Will most likely not be useful to you, but it’s here if you want to use it.