26 lines
890 B
GDScript
26 lines
890 B
GDScript
class_name Grid
|
|
## Central grid constants and utilities for the dungeon crawler.
|
|
## Cell size: 64x64x128 TrenchBroom units = 2x2x4 Godot units.
|
|
|
|
## Size of one grid cell in world units (64 TrenchBroom units).
|
|
const CELL_SIZE: float = 2.0
|
|
## Half-cell offset. Cell centers sit halfway between wall planes, so with TB
|
|
## walls on the 64-unit grid (even Godot units) cell centers land on odd units.
|
|
const HALF_CELL: float = CELL_SIZE * 0.5
|
|
|
|
|
|
## Snap a world position to the nearest cell center (Y axis unchanged).
|
|
static func snap(pos: Vector3) -> Vector3:
|
|
return Vector3(
|
|
floorf(pos.x / CELL_SIZE) * CELL_SIZE + HALF_CELL,
|
|
pos.y,
|
|
floorf(pos.z / CELL_SIZE) * CELL_SIZE + HALF_CELL,
|
|
)
|
|
|
|
|
|
## Convert a world position to integer cell coordinates.
|
|
static func world_to_cell(pos: Vector3) -> Vector2i:
|
|
return Vector2i(
|
|
int(floorf(pos.x / CELL_SIZE)),
|
|
int(floorf(pos.z / CELL_SIZE)),
|
|
)
|