63 lines
1.9 KiB
GDScript
63 lines
1.9 KiB
GDScript
## Utility functions.
|
|
class_name Util
|
|
|
|
|
|
## Merges an Array of keys and an Array of values into a Dictionary.
|
|
static func arrays_to_dict(keys: Array, values: Array) -> Dictionary:
|
|
var out := {}
|
|
for i in keys.size():
|
|
out[keys[i]] = values[i]
|
|
return out
|
|
|
|
|
|
## Swaps the X and Y axes of a Vector2i.
|
|
static func transpose_vec(v: Vector2i) -> Vector2i:
|
|
return Vector2i(v.y, v.x)
|
|
|
|
|
|
# TODO: transposed(TileSet.CellNeighbor) -> Tileset.CellNeighbor
|
|
|
|
|
|
## Reverses the direction of a CellNeighbor.
|
|
static func reverse_neighbor(neighbor: TileSet.CellNeighbor) -> TileSet.CellNeighbor:
|
|
return (neighbor + 8) % 16
|
|
|
|
|
|
## Returns a shorthand name for a CellNeighbor.
|
|
static func neighbor_name(neighbor: TileSet.CellNeighbor) -> String:
|
|
const DIRECTIONS := ['E', 'SE', 'S', 'SW', 'W', 'NW', 'N', 'NE']
|
|
return DIRECTIONS[neighbor >> 1]
|
|
|
|
|
|
## Returns a pretty-printable neighborhood.
|
|
static func neighborhood_str(neighborhood: Array) -> String:
|
|
var neighbors := array_of(-1, 16)
|
|
for i in neighborhood.size():
|
|
neighbors[neighborhood[i]] = i
|
|
|
|
var get := func(neighbor: TileSet.CellNeighbor) -> String:
|
|
var terrain = neighbors[neighbor]
|
|
return '-' if terrain == -1 else str(terrain)
|
|
|
|
var nw = get.call(TileSet.CELL_NEIGHBOR_TOP_LEFT_CORNER)
|
|
var n = get.call(TileSet.CELL_NEIGHBOR_TOP_CORNER)
|
|
var ne = get.call(TileSet.CELL_NEIGHBOR_TOP_RIGHT_CORNER)
|
|
var w = get.call(TileSet.CELL_NEIGHBOR_LEFT_CORNER)
|
|
var e = get.call(TileSet.CELL_NEIGHBOR_RIGHT_CORNER)
|
|
var sw = get.call(TileSet.CELL_NEIGHBOR_BOTTOM_LEFT_CORNER)
|
|
var s = get.call(TileSet.CELL_NEIGHBOR_BOTTOM_CORNER)
|
|
var se = get.call(TileSet.CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER)
|
|
|
|
return (
|
|
"%2s %2s %2s\n" % [nw, n, ne] +
|
|
"%2s C %2s\n" % [w, e] +
|
|
"%2s %2s %2s\n" % [sw, s, se]
|
|
)
|
|
|
|
## Returns an Array of the given size, all filled with the given value.
|
|
static func array_of(value: Variant, size: int) -> Array[Variant]:
|
|
var out := []
|
|
out.resize(size)
|
|
out.fill(value)
|
|
return out
|