import_plugin.gd 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. tool
  2. extends EditorImportPlugin
  3. # Simple plugin that imports a text file with extension .mtxt
  4. # which contains 3 integers in format R,G,B (0-255)
  5. # (see example .mtxt in this folder)
  6. # Imported file is converted to a material
  7. var dialog = null
  8. func get_name():
  9. return "silly_material"
  10. func get_visible_name():
  11. return "Silly Material"
  12. func import_dialog(path):
  13. var md = null
  14. if (path!=""):
  15. md = ResourceLoader.load_import_metadata(path)
  16. dialog.configure(self,path,md)
  17. dialog.popup_centered()
  18. func import(path,metadata):
  19. assert(metadata.get_source_count() == 1)
  20. var source = metadata.get_source_path(0)
  21. var use_red_anyway = metadata.get_option("use_red_anyway")
  22. var f = File.new()
  23. var err = f.open(source,File.READ)
  24. if (err!=OK):
  25. return ERR_CANT_OPEN
  26. var l = f.get_line()
  27. f.close()
  28. var channels = l.split(",")
  29. if (channels.size()!=3):
  30. return ERR_PARSE_ERROR
  31. var color = Color8(int(channels[0]),int(channels[1]),int(channels[2]))
  32. var material
  33. if (ResourceLoader.has(path)):
  34. # Material is in use, update it
  35. material = ResourceLoader.load(path)
  36. else:
  37. # Material not in use, create
  38. material = FixedMaterial.new()
  39. if (use_red_anyway):
  40. color=Color8(255,0,0)
  41. material.set_parameter(FixedMaterial.PARAM_DIFFUSE,color)
  42. # Make sure import metadata links to this plugin
  43. metadata.set_editor("silly_material")
  44. # Update the md5 value of the source file
  45. metadata.set_source_md5(0, f.get_md5(source))
  46. # Update the import metadata
  47. material.set_import_metadata(metadata)
  48. # Save
  49. err = ResourceSaver.save(path,material)
  50. return err
  51. func config(base_control):
  52. dialog = preload("res://addons/custom_import_plugin/material_dialog.tscn").instance()
  53. base_control.add_child(dialog)