mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-12-21 13:16:49 +01:00
Added events for mesh data resource. Also simple half-baked vertex translation implementation.
This commit is contained in:
parent
696887b44c
commit
c05519244d
@ -1,19 +1,32 @@
|
|||||||
tool
|
tool
|
||||||
extends PanelContainer
|
extends PanelContainer
|
||||||
|
|
||||||
func _ready():
|
var plugin
|
||||||
pass # Replace with function body.
|
|
||||||
|
|
||||||
func _unhandled_key_input(event : InputEventKey) -> void:
|
func _unhandled_key_input(event : InputEventKey) -> void:
|
||||||
|
if event.echo:
|
||||||
|
return
|
||||||
|
|
||||||
#if event.key
|
#if event.key
|
||||||
if event.scancode == KEY_G:
|
if event.scancode == KEY_G:
|
||||||
|
|
||||||
#translate
|
#translate
|
||||||
pass
|
if plugin:
|
||||||
|
plugin.translate_request(event.pressed)
|
||||||
elif event.scancode == KEY_S:
|
elif event.scancode == KEY_S:
|
||||||
#scale? probably needs a differrent key
|
#scale? probably needs a differrent key
|
||||||
pass
|
if plugin:
|
||||||
|
plugin.scale_request(event.pressed)
|
||||||
elif event.scancode == KEY_R:
|
elif event.scancode == KEY_R:
|
||||||
#rotate
|
#rotate
|
||||||
pass
|
if plugin:
|
||||||
|
plugin.rotate_request(event.pressed)
|
||||||
pass
|
elif event.scancode == KEY_X:
|
||||||
|
if plugin:
|
||||||
|
plugin.axis_key_x(event.pressed)
|
||||||
|
elif event.scancode == KEY_Y:
|
||||||
|
if plugin:
|
||||||
|
plugin.axis_key_y(event.pressed)
|
||||||
|
elif event.scancode == KEY_Z:
|
||||||
|
if plugin:
|
||||||
|
plugin.axis_key_z(event.pressed)
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
tool
|
tool
|
||||||
extends EditorSpatialGizmo
|
extends EditorSpatialGizmo
|
||||||
|
|
||||||
|
enum EditMode {
|
||||||
|
NONE, TRANSLATE, SCALE, ROTATE
|
||||||
|
}
|
||||||
|
|
||||||
|
enum AxisConstraint {
|
||||||
|
X, Y, Z
|
||||||
|
}
|
||||||
|
|
||||||
var gizmo_size = 3.0
|
var gizmo_size = 3.0
|
||||||
|
|
||||||
var plugin
|
var plugin
|
||||||
@ -9,9 +17,15 @@ var vertices : PoolVector3Array
|
|||||||
var indices : PoolIntArray
|
var indices : PoolIntArray
|
||||||
var selected_indices : PoolIntArray
|
var selected_indices : PoolIntArray
|
||||||
var selected_vertices : PoolVector3Array
|
var selected_vertices : PoolVector3Array
|
||||||
|
var selected_vertices_original : PoolVector3Array
|
||||||
|
|
||||||
|
var edit_mode = EditMode.NONE
|
||||||
|
var axis_constraint = AxisConstraint.NONE
|
||||||
|
|
||||||
func set_handle(index: int, camera: Camera, point: Vector2):
|
func set_handle(index: int, camera: Camera, point: Vector2):
|
||||||
pass
|
print("set_handle")
|
||||||
|
|
||||||
|
edit_mode = EditMode.NONE
|
||||||
|
|
||||||
func redraw():
|
func redraw():
|
||||||
clear()
|
clear()
|
||||||
@ -28,7 +42,8 @@ func redraw():
|
|||||||
|
|
||||||
var handles_material : SpatialMaterial = get_plugin().get_material("handles", self)
|
var handles_material : SpatialMaterial = get_plugin().get_material("handles", self)
|
||||||
|
|
||||||
vertices = mdr.array[ArrayMesh.ARRAY_VERTEX]
|
if vertices.size() == 0:
|
||||||
|
vertices = mdr.array[ArrayMesh.ARRAY_VERTEX]
|
||||||
#add_handles(vertices, handles_material)
|
#add_handles(vertices, handles_material)
|
||||||
|
|
||||||
var material = get_plugin().get_material("main", self)
|
var material = get_plugin().get_material("main", self)
|
||||||
@ -83,17 +98,83 @@ func forward_spatial_gui_input(index, camera, event):
|
|||||||
closest_idx = i;
|
closest_idx = i;
|
||||||
|
|
||||||
if (closest_idx >= 0):
|
if (closest_idx >= 0):
|
||||||
|
for si in selected_indices:
|
||||||
|
if si == closest_idx:
|
||||||
|
return false
|
||||||
|
|
||||||
|
var cv : Vector3 = vertices[closest_idx]
|
||||||
|
selected_vertices.append(cv)
|
||||||
selected_indices.append(closest_idx)
|
selected_indices.append(closest_idx)
|
||||||
selected_vertices.append(vertices[closest_idx])
|
|
||||||
|
selected_vertices_original.append(cv)
|
||||||
|
|
||||||
|
#also find and mark duplicate vertices, but not as handles
|
||||||
|
for k in range(vertices.size()):
|
||||||
|
if k == closest_idx:
|
||||||
|
continue
|
||||||
|
|
||||||
|
var vn : Vector3 = vertices[k]
|
||||||
|
|
||||||
|
if is_equal_approx(cv.x, vn.x) && is_equal_approx(cv.y, vn.y) && is_equal_approx(cv.z, vn.z):
|
||||||
|
selected_indices.append(k)
|
||||||
|
selected_vertices_original.append(vn)
|
||||||
|
|
||||||
redraw()
|
redraw()
|
||||||
else:
|
else:
|
||||||
selected_indices.resize(0)
|
selected_indices.resize(0)
|
||||||
selected_vertices.resize(0)
|
selected_vertices.resize(0)
|
||||||
|
|
||||||
|
selected_vertices_original.resize(0)
|
||||||
|
|
||||||
redraw()
|
redraw()
|
||||||
|
|
||||||
|
elif event is InputEventMouseMotion:
|
||||||
|
if edit_mode == EditMode.NONE:
|
||||||
|
return false
|
||||||
|
elif edit_mode == EditMode.TRANSLATE:
|
||||||
|
for i in selected_indices:
|
||||||
|
var v : Vector3 = vertices[i]
|
||||||
|
|
||||||
|
if axis_constraint == AxisConstraint.X:
|
||||||
|
v.x += event.relative.x * -0.001
|
||||||
|
elif axis_constraint == AxisConstraint.Y:
|
||||||
|
v.y += event.relative.y * 0.001
|
||||||
|
elif axis_constraint == AxisConstraint.Z:
|
||||||
|
v.z += event.relative.x * 0.001
|
||||||
|
|
||||||
|
vertices.set(i, v)
|
||||||
|
|
||||||
|
redraw()
|
||||||
|
elif edit_mode == EditMode.SCALE:
|
||||||
|
print("SCALE")
|
||||||
|
elif edit_mode == EditMode.ROTATE:
|
||||||
|
print("ROTATE")
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
func translate_request(on : bool) -> void:
|
||||||
|
if on:
|
||||||
|
edit_mode = EditMode.TRANSLATE
|
||||||
|
|
||||||
|
func scale_request(on : bool) -> void:
|
||||||
|
if on:
|
||||||
|
edit_mode = EditMode.SCALE
|
||||||
|
|
||||||
|
func rotate_request(on : bool) -> void:
|
||||||
|
if on:
|
||||||
|
edit_mode = EditMode.ROTATE
|
||||||
|
|
||||||
|
func axis_key_x(on : bool) -> void:
|
||||||
|
if on:
|
||||||
|
axis_constraint = AxisConstraint.X
|
||||||
|
|
||||||
|
func axis_key_y(on : bool) -> void:
|
||||||
|
if on:
|
||||||
|
axis_constraint = AxisConstraint.Y
|
||||||
|
|
||||||
|
func axis_key_z(on : bool) -> void:
|
||||||
|
if on:
|
||||||
|
axis_constraint = AxisConstraint.Z
|
||||||
|
|
||||||
func _notification(what):
|
func _notification(what):
|
||||||
if what == NOTIFICATION_PREDELETE:
|
if what == NOTIFICATION_PREDELETE:
|
||||||
|
@ -14,6 +14,7 @@ func _enter_tree():
|
|||||||
|
|
||||||
gizmo_plugin = MdiGizmoPlugin.new()
|
gizmo_plugin = MdiGizmoPlugin.new()
|
||||||
mdi_ed_gui = MDIEdGui.instance()
|
mdi_ed_gui = MDIEdGui.instance()
|
||||||
|
mdi_ed_gui.plugin = self
|
||||||
active_gizmos = []
|
active_gizmos = []
|
||||||
|
|
||||||
gizmo_plugin.plugin = self
|
gizmo_plugin.plugin = self
|
||||||
@ -76,6 +77,30 @@ func unregister_gizmo(gizmo):
|
|||||||
active_gizmos.remove(i)
|
active_gizmos.remove(i)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
func translate_request(on : bool) -> void:
|
||||||
|
for g in active_gizmos:
|
||||||
|
g.translate_request(on)
|
||||||
|
|
||||||
|
func scale_request(on : bool) -> void:
|
||||||
|
for g in active_gizmos:
|
||||||
|
g.scale_request(on)
|
||||||
|
|
||||||
|
func rotate_request(on : bool) -> void:
|
||||||
|
for g in active_gizmos:
|
||||||
|
g.rotate_request(on)
|
||||||
|
|
||||||
|
func axis_key_x(on : bool) -> void:
|
||||||
|
for g in active_gizmos:
|
||||||
|
g.axis_key_x(on)
|
||||||
|
|
||||||
|
func axis_key_y(on : bool) -> void:
|
||||||
|
for g in active_gizmos:
|
||||||
|
g.axis_key_y(on)
|
||||||
|
|
||||||
|
func axis_key_z(on : bool) -> void:
|
||||||
|
for g in active_gizmos:
|
||||||
|
g.axis_key_z(on)
|
||||||
|
|
||||||
func forward_spatial_gui_input(camera, event):
|
func forward_spatial_gui_input(camera, event):
|
||||||
for g in active_gizmos:
|
for g in active_gizmos:
|
||||||
if g.forward_spatial_gui_input(0, camera, event):
|
if g.forward_spatial_gui_input(0, camera, event):
|
||||||
|
Loading…
Reference in New Issue
Block a user