Skip to content

Instantly share code, notes, and snippets.

@TeddyDD
Created August 6, 2017 22:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TeddyDD/a5b9315250b6c9eba314347eb806dfc2 to your computer and use it in GitHub Desktop.
Save TeddyDD/a5b9315250b6c9eba314347eb806dfc2 to your computer and use it in GitHub Desktop.
Tiled post import script
tool
extends Reference
const MARGIN = 10
func post_import(scene):
# scene = scene.duplicate()
# create nav poly
var nav = NavigationPolygonInstance.new()
var nav_poly = NavigationPolygon.new()
# get all tile layers in scene
var tilemaps = get_tilemaps(scene)
for y in range(tilemaps[0].get_used_rect().size.y):
for x in range(tilemaps[0].get_used_rect().size.x):
var outlines = []
for tmap in tilemaps:
var set = tmap.get_tileset()
var id = tmap.get_cell(x,y)
var n = set.tile_get_navigation_polygon(id)
if n != null:
for o_idx in range(n.get_outline_count()):
var res = n.get_outline(o_idx)
if not outlines.has(res):
for el_idx in range(res.size()):
res[el_idx] = (res[el_idx] + (Vector2(x,y)\
* tmap.get_cell_size()) + set.tile_get_navigation_polygon_offset(id)).snapped(Vector2(1,1))
outlines.append(res)
for i in range(outlines.size()):
nav_poly.add_outline_at_index(outlines[i], i)
printerr(outlines[i])
nav_poly.make_polygons_from_outlines()
# insert navigation into scene
nav.set_navigation_polygon(nav_poly)
nav.set_name("nav")
scene.add_child(nav)
nav.set_owner(scene)
return scene
func get_tilemaps(scene):
var tilemaps = []
for node in scene.get_children():
if node extends TileMap:
tilemaps.append(node)
return tilemaps
func get_poly_from_rect(rect):
return Vector2Array(\
[Vector2(-MARGIN, -MARGIN),
Vector2(rect.end.x + MARGIN, -MARGIN),
Vector2(rect.end.x + MARGIN, rect.end.y + MARGIN),
Vector2(-MARGIN, rect.end.y + MARGIN)])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment