working keyboard and plugin for better tilemaps
This commit is contained in:
62
addons/TileMapDual/Util.gd
Normal file
62
addons/TileMapDual/Util.gd
Normal file
@@ -0,0 +1,62 @@
|
||||
## 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
|
||||
Reference in New Issue
Block a user