Files
project-hood/addons/TileMapDual/Util.gd

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