Advertisement
Guest User

Godot script leak

a guest
Aug 24th, 2016
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. tool
  2. extends EditorPlugin
  3.  
  4. const BUTTON_START_ID = 0
  5. const BUTTON_WIRE_ID = 1
  6. const BUTTON_CLOUD_ID = 2
  7. const BUTTON_HELP_ID = 4
  8.  
  9. var meshInstance #edited meshInstance
  10. var editedMaterial = preload("res://addons/Line Tool/editMat.tres") #material for vertex color preview (unshaded)
  11. var toolsMenu = preload("res://addons/Line Tool/toolsMenu.tscn").instance()
  12. var helpDialog = preload("res://addons/Line Tool/helpDialog.tscn").instance()
  13. var alertPopup = AcceptDialog.new()
  14. var edgeSelector1 = -1
  15. var edgeSelector2 = -1
  16. var selectorColor = Color(1.0, 0.0, 0.0)
  17.  
  18. func _enter_tree():
  19. toolsMenu.hide()
  20. toolsMenu.get_popup().connect("item_pressed", self, "menuItemPressed")
  21. get_base_control().add_child(alertPopup)
  22. get_base_control().add_child(helpDialog)
  23. add_control_to_container(1, toolsMenu)
  24.  
  25. func _exit_tree():
  26. toolsMenu.get_popup().disconnect("item_pressed", self, "menuItemPressed")
  27. toolsMenu.free()
  28. get_base_control().remove_child(alertPopup)
  29. get_base_control().remove_child(helpDialog)
  30. alertPopup.free()
  31. helpDialog.free()
  32.  
  33. func forward_spatial_input_event(camera, event):
  34. if (event.type == InputEvent.MOUSE_BUTTON):
  35. if (event.button_index == BUTTON_LEFT and event.pressed):
  36. if (meshInstance.has_meta("orgMesh")):
  37. var meshTool = MeshDataTool.new()
  38. meshTool.create_from_surface(meshInstance.get_meta("orgMesh"), 0)
  39. var index
  40. var oldDistance = 400000
  41. for i in range(meshTool.get_vertex_count()):
  42. var unprVer = camera.unproject_position(meshTool.get_vertex(i))
  43. var distance = unprVer.distance_to(event.pos)
  44. if (distance < oldDistance):
  45. oldDistance = distance
  46. index = i
  47. if (event.alt):
  48. edgeSelector2 = index
  49. else:
  50. edgeSelector1 = index
  51. meshTool.set_vertex_color(index, selectorColor)
  52. print("sel1: ", edgeSelector1, " - ", "sel2: ", edgeSelector2)
  53.  
  54. #possible memory leak?
  55. var newWireMesh = generateWireframeMesh(meshTool)
  56. meshInstance.get_meta("orgMesh").surface_remove(0)
  57. meshTool.commit_to_surface(meshInstance.get_meta("orgMesh"))
  58. #if you comment out these two lines, no memory is leaking
  59. meshInstance.get_mesh().surface_remove(0)
  60. meshInstance.set_mesh(newWireMesh)
  61. elif (event.type == InputEvent.KEY):
  62. pass #check delete key
  63.  
  64. func startEditing():
  65. if (!meshInstance.has_meta("orgMesh")):
  66. var meshTool = MeshDataTool.new()
  67. meshTool.create_from_surface(meshInstance.get_mesh(), 0)
  68. var previewMesh = generateWireframeMesh(meshTool)
  69. meshInstance.set_meta("orgMesh", meshInstance.get_mesh())
  70. meshInstance.set_mesh(previewMesh)
  71. meshInstance.set_material_override(editedMaterial)
  72.  
  73. func generateWireframeMesh(meshTool):
  74. var surfaceTool = SurfaceTool.new()
  75. surfaceTool.begin(Mesh.PRIMITIVE_LINES)
  76.  
  77. for i in range(meshTool.get_edge_count()):
  78.  
  79. if (meshTool.get_edge_vertex(i, 0) == edgeSelector1 or meshTool.get_edge_vertex(i, 0) == edgeSelector2):
  80. surfaceTool.add_color(selectorColor.inverted())
  81. else:
  82. surfaceTool.add_color(meshTool.get_vertex_color(meshTool.get_edge_vertex(i, 0)))
  83. surfaceTool.add_normal(meshTool.get_vertex_normal(meshTool.get_edge_vertex(i, 0)))
  84. surfaceTool.add_vertex(meshTool.get_vertex(meshTool.get_edge_vertex(i, 0)))
  85.  
  86. if (meshTool.get_edge_vertex(i, 1) == edgeSelector1 or meshTool.get_edge_vertex(i, 1) == edgeSelector2):
  87. surfaceTool.add_color(selectorColor.inverted())
  88. else:
  89. surfaceTool.add_color(meshTool.get_vertex_color(meshTool.get_edge_vertex(i, 1)))
  90. surfaceTool.add_normal(meshTool.get_vertex_normal(meshTool.get_edge_vertex(i, 1)))
  91. surfaceTool.add_vertex(meshTool.get_vertex(meshTool.get_edge_vertex(i, 1)))
  92.  
  93. var wireMesh = surfaceTool.commit()
  94. return wireMesh
  95.  
  96. func commitWireframe():
  97. if (meshInstance.has_meta("orgMesh")):
  98. ##not implemented
  99. pass
  100.  
  101. func menuItemPressed(ID):
  102. if (ID == BUTTON_WIRE_ID):
  103. pass
  104. elif (ID == BUTTON_CLOUD_ID):
  105. pass
  106. elif (ID == BUTTON_START_ID):
  107. startEditing()
  108. elif (ID == BUTTON_HELP_ID):
  109. helpDialog.popup_centered()
  110.  
  111. func showWarning(message):
  112. alertPopup.set_text(message)
  113. alertPopup.popup_centered()
  114.  
  115. func handles(object):
  116. if (object.is_type("MeshInstance")):
  117. return true
  118. else:
  119. return false
  120.  
  121. func edit(object):
  122. meshInstance = object
  123. print("newSelection")
  124. edgeSelector1 = -1
  125. edgeSelector2 = -1
  126.  
  127. func clear():
  128. meshInstance = null
  129.  
  130. func make_visible(visible):
  131. if (visible == true):
  132. toolsMenu.show()
  133. else:
  134. toolsMenu.hide()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement