Map.gd 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. extends Node2D
  2. const TiledMapReader = preload("../addons/vnen.tiled_importer/tiled_map_reader.gd")
  3. # Declare member variables here. Examples:
  4. # var a = 2
  5. # var b = "text"
  6. var Downloader = preload("res://lib/Downloader.gd")
  7. var mapLoaded = ""
  8. var mapImported = false
  9. var toDownload = {}
  10. var downloader
  11. func init():
  12. downloader = Downloader.new()
  13. downloader.connect("download_done", self, "_on_downloader_done")
  14. downloader.connect("download_failed", self, "_on_downloader_error")
  15. func _on_downloader_done(url):
  16. toDownload.erase(url)
  17. print(url+" saved")
  18. if downloader.urlToFilePath(url).split(".")[-1] == "json":
  19. mapLoaded = downloader.urlToFilePath(url)
  20. resolveMap(url)
  21. func _on_downloader_error(url, err):
  22. print("error saving "+url)
  23. # Called every frame. 'delta' is the elapsed time since the previous frame.
  24. func _process(delta):
  25. if mapLoaded and len(toDownload) == 0 and not mapImported:
  26. importMap()
  27. func getMap(url):
  28. mapImported = false
  29. toDownload[url] = OS.get_unix_time()
  30. downloader.download(url)
  31. func resolveMap(url):
  32. var file=File.new()
  33. var error = file.open(mapLoaded, File.READ)
  34. if error != OK:
  35. print("error resolving map: ", error)
  36. while not file.eof_reached():
  37. var line = file.get_line()
  38. if "\"image\"" in line:
  39. var geturl = line.split("\"")[-2]
  40. if not "http" in geturl:
  41. geturl = downloader.getBaseUrl(url)+"/"+geturl
  42. toDownload[geturl] = OS.get_unix_time()
  43. downloader.download(geturl)
  44. file.close()
  45. func importMap():
  46. print("importing map: ", mapLoaded)
  47. var map_reader = TiledMapReader.new()
  48. var options = {}
  49. options.add_background = true
  50. options.collision_layer = 1
  51. options.custom_properties = true
  52. options.save_tiled_properties = false
  53. options.tile_metadata = false
  54. options.uv_clip = true
  55. # Offset is only optional for importing TileSets
  56. options.apply_offset = true
  57. var scene = map_reader.build(mapLoaded, options)
  58. scene.name="TMX"
  59. add_child(scene, true)
  60. mapImported = true