[022] Spatial Grid
[022] Spatial Grid
[24h] Simple and Fast Query using a Dense Array
[Feb 03] 5h - Spatial Hash Learn [Feb 04] 2h - Spatial Hash Learn [Feb 05] 4h - Spatial Hash Learn [Feb 07] 2h - Flocking Spatial Hash [Feb 09] 4h - Flocking Spatial Hash [Feb 10] 7h - Spatial Grid KISS (Keep it Simple Stupid) simpler to implement and easier to maintain no need to implement objects and recursions var _found: Array[int] var _unit_count: int = 5000 var _unit_array: Array[Vector2] var _cell_count: Array[int] # number of units in cell var _cell_start: Array[int] # start_index of cell in dense array var _dense_array: Array[int] # compact list of unit index func _ready() -> void: _cell_count.resize(_grid_size) _cell_start.resize(_grid_size) _dense_array.resize(_unit_array.size()) func _position_to_grid(_position: Vector2) -> Vector2i: var pos_x: int = floori(_position.x / _cell_size) var pos_y: int = floori(_position.y / _cell_size) return Vector2i(pos_x, pos_y) func _create_spatial_grid() -> void: _cell_start.fill(-1) # -1 if empty _cell_count.fill(0) var _grid_index: int = 0 for index in _unit_array.size(): # loop vector_array to get _cell_count _grid_index = _position_to_grid_index(_unit_array[index]) _cell_count[_grid_index] += 1 var cell_sum: int = 0 for index in _grid_size: # loop grid_array to get partial sums cell_sum += _cell_count[index] _cell_start[index] = cell_sum for index in _unit_array.size(): # loop vector_array to correct _cell_start _grid_index = _position_to_grid_index(_unit_array[index]) _cell_start[_grid_index] -= 1 _dense_array[_cell_start[_grid_index] = index # add point_index to _dense_array
Status | Released |
Platforms | HTML5 |
Author | QuietGodot |
Made with | Godot |
Leave a comment
Log in with itch.io to leave a comment.