Building editing update
This commit is contained in:
@@ -56,8 +56,85 @@ func editor_event(evname: String, args: Array):
|
|||||||
$"%building_type".clear()
|
$"%building_type".clear()
|
||||||
for k in btypes.keys():
|
for k in btypes.keys():
|
||||||
$"%building_type".add_item(k)
|
$"%building_type".add_item(k)
|
||||||
|
elif evname == "editor_camera_moved":
|
||||||
|
$Area.global_transform.origin.x = $Camera.global_transform.origin.x
|
||||||
|
$Area.global_transform.origin.z = $Camera.global_transform.origin.z
|
||||||
|
# elif evname == "edit_update_building":
|
||||||
|
# check_edit_building()
|
||||||
|
elif evname == "mouse_press":
|
||||||
|
mouse_press(args[0])
|
||||||
|
elif evname == "mouse_drag":
|
||||||
|
mouse_drag(args[0])
|
||||||
|
elif evname == "mouse_drag_on":
|
||||||
|
pass
|
||||||
|
elif evname == "mouse_drag_off":
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
breakpoint
|
breakpoint
|
||||||
|
func mouse_drag(position):
|
||||||
|
if $WorldEditor.get_current_mode() != 2:
|
||||||
|
return
|
||||||
|
if $WorldEditor.get_camera_mode() != 3:
|
||||||
|
return
|
||||||
|
# breakpoint
|
||||||
|
var camera = get_viewport().get_camera()
|
||||||
|
var start = camera.project_ray_origin(position)
|
||||||
|
var normal = camera.project_ray_normal(position)
|
||||||
|
var end = start + normal * camera.get_zfar()
|
||||||
|
var space_state = get_world().direct_space_state
|
||||||
|
var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
||||||
|
if result.has("collider"):
|
||||||
|
var proj = result.position
|
||||||
|
var mode = $"%buildings_edit_mode".selected
|
||||||
|
if mode == 1:
|
||||||
|
# move
|
||||||
|
print(proj)
|
||||||
|
var newpos = proj
|
||||||
|
newpos.x = stepify(newpos.x, 2.0)
|
||||||
|
newpos.z = stepify(newpos.z, 2.0)
|
||||||
|
var gen: VoxelGeneratorImgMapper = $VoxelLodTerrain.generator
|
||||||
|
var hpos = gen.get_height_full(newpos)
|
||||||
|
newpos.y = hpos
|
||||||
|
$WorldEditor.editor_command("update_building_transform", [selected_building, Transform(selected_building_xform.basis, newpos)])
|
||||||
|
selected_building_xform = Transform(selected_building_xform.basis, newpos)
|
||||||
|
$building_cursor.global_transform.origin = newpos
|
||||||
|
elif mode == 2:
|
||||||
|
# rotate
|
||||||
|
var m = proj
|
||||||
|
m.y = selected_building_xform.origin.y
|
||||||
|
var xform = selected_building_xform.looking_at(m, Vector3.UP)
|
||||||
|
$WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
||||||
|
$building_rot_cursor.global_transform = xform
|
||||||
|
selected_building_xform = xform
|
||||||
|
func mouse_press(position):
|
||||||
|
if $WorldEditor.get_current_mode() != 2:
|
||||||
|
return
|
||||||
|
if $WorldEditor.get_camera_mode() != 3:
|
||||||
|
return
|
||||||
|
# breakpoint
|
||||||
|
# dragging = true
|
||||||
|
var camera = get_viewport().get_camera()
|
||||||
|
var start = camera.project_ray_origin(position)
|
||||||
|
var normal = camera.project_ray_normal(position)
|
||||||
|
var end = start + normal * camera.get_zfar()
|
||||||
|
var space_state = get_world().direct_space_state
|
||||||
|
var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
||||||
|
if result.has("collider"):
|
||||||
|
var proj = result.position
|
||||||
|
drag_start = proj
|
||||||
|
var mode = $"%buildings_edit_mode".selected
|
||||||
|
if mode == 0:
|
||||||
|
print("get closest building")
|
||||||
|
$WorldEditor.editor_command("get_closest_building", [Transform(Basis(), proj)])
|
||||||
|
elif mode == 2:
|
||||||
|
var m = proj
|
||||||
|
m.y = selected_building_xform.origin.y
|
||||||
|
var xform = selected_building_xform.looking_at(m, Vector3.UP)
|
||||||
|
$WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
||||||
|
$building_rot_cursor.global_transform = xform
|
||||||
|
selected_building_xform = xform
|
||||||
|
$WorldEditor.editor_command("buildings_checkpoint", [])
|
||||||
|
|
||||||
var selected_building
|
var selected_building
|
||||||
var selected_building_xform
|
var selected_building_xform
|
||||||
func select_building(xform, id, mid):
|
func select_building(xform, id, mid):
|
||||||
@@ -73,12 +150,12 @@ func select_building(xform, id, mid):
|
|||||||
$building_cursor.show()
|
$building_cursor.show()
|
||||||
$building_cursor.global_transform.origin = xform.origin
|
$building_cursor.global_transform.origin = xform.origin
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if Input.is_action_just_pressed("editor_cam1"):
|
# if Input.is_action_just_pressed("editor_cam1"):
|
||||||
setup_cam1()
|
# setup_cam1()
|
||||||
if Input.is_action_just_pressed("editor_cam2"):
|
# if Input.is_action_just_pressed("editor_cam2"):
|
||||||
setup_cam2()
|
# setup_cam2()
|
||||||
if Input.is_action_just_pressed("editor_cam3"):
|
# if Input.is_action_just_pressed("editor_cam3"):
|
||||||
setup_cam3()
|
# setup_cam3()
|
||||||
var mode = $"%buildings_edit_mode".selected
|
var mode = $"%buildings_edit_mode".selected
|
||||||
if mode == 2:
|
if mode == 2:
|
||||||
$building_rot_cursor.global_transform = selected_building_xform
|
$building_rot_cursor.global_transform = selected_building_xform
|
||||||
@@ -87,176 +164,96 @@ func _process(delta):
|
|||||||
else:
|
else:
|
||||||
if $building_rot_cursor.visible:
|
if $building_rot_cursor.visible:
|
||||||
$building_rot_cursor.hide()
|
$building_rot_cursor.hide()
|
||||||
if dragging:
|
# if dragging:
|
||||||
if !Input.is_action_pressed("mouse1"):
|
# if !Input.is_action_pressed("mouse1"):
|
||||||
dragging = false
|
# dragging = false
|
||||||
drag_delay = 0.2
|
# drag_delay = 0.2
|
||||||
else:
|
# else:
|
||||||
var position = get_viewport().get_mouse_position()
|
# var position = get_viewport().get_mouse_position()
|
||||||
var camera = get_viewport().get_camera()
|
# var camera = get_viewport().get_camera()
|
||||||
var start = camera.project_ray_origin(position)
|
# var start = camera.project_ray_origin(position)
|
||||||
var normal = camera.project_ray_normal(position)
|
# var normal = camera.project_ray_normal(position)
|
||||||
var end = start + normal * camera.get_zfar()
|
# var end = start + normal * camera.get_zfar()
|
||||||
var space_state = get_world().direct_space_state
|
# var space_state = get_world().direct_space_state
|
||||||
var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
# var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
||||||
if result.has("collider"):
|
# if result.has("collider"):
|
||||||
var proj = result.position
|
# var proj = result.position
|
||||||
if mode == 1:
|
# if mode == 1:
|
||||||
# move
|
# # move
|
||||||
print(proj)
|
# print(proj)
|
||||||
var newpos = proj
|
# var newpos = proj
|
||||||
newpos.x = stepify(newpos.x, 2.0)
|
# newpos.x = stepify(newpos.x, 2.0)
|
||||||
newpos.z = stepify(newpos.z, 2.0)
|
# newpos.z = stepify(newpos.z, 2.0)
|
||||||
var gen: VoxelGeneratorImgMapper = $VoxelLodTerrain.generator
|
# var gen: VoxelGeneratorImgMapper = $VoxelLodTerrain.generator
|
||||||
var hpos = gen.get_height_full(newpos)
|
# var hpos = gen.get_height_full(newpos)
|
||||||
newpos.y = hpos
|
# newpos.y = hpos
|
||||||
$WorldEditor.editor_command("update_building_transform", [selected_building, Transform(selected_building_xform.basis, newpos)])
|
# $WorldEditor.editor_command("update_building_transform", [selected_building, Transform(selected_building_xform.basis, newpos)])
|
||||||
selected_building_xform = Transform(selected_building_xform.basis, newpos)
|
# selected_building_xform = Transform(selected_building_xform.basis, newpos)
|
||||||
$building_cursor.global_transform.origin = newpos
|
# $building_cursor.global_transform.origin = newpos
|
||||||
elif mode == 2:
|
# elif mode == 2:
|
||||||
# rotate
|
# # rotate
|
||||||
var m = proj
|
|
||||||
m.y = selected_building_xform.origin.y
|
|
||||||
var xform = selected_building_xform.looking_at(m, Vector3.UP)
|
|
||||||
$WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
|
||||||
$building_rot_cursor.global_transform = xform
|
|
||||||
selected_building_xform = xform
|
|
||||||
# var o = selected_building_xform.origin
|
|
||||||
# var m = proj
|
# var m = proj
|
||||||
# o.y = 0
|
# m.y = selected_building_xform.origin.y
|
||||||
# m.y = 0
|
# var xform = selected_building_xform.looking_at(m, Vector3.UP)
|
||||||
# var d = m - o
|
|
||||||
# var rot: float = -0.01 * d.x * delta
|
|
||||||
# var basis: Basis = selected_building_xform.basis
|
|
||||||
# var pos: Vector3 = selected_building_xform.origin
|
|
||||||
# var xform = Transform(basis.rotated(Vector3.UP, rot), pos)
|
|
||||||
# $WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
# $WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
||||||
|
# $building_rot_cursor.global_transform = xform
|
||||||
# selected_building_xform = xform
|
# selected_building_xform = xform
|
||||||
var motion = Vector2()
|
## var o = selected_building_xform.origin
|
||||||
var old_mouse_pos = Vector2(-1, -1)
|
## var m = proj
|
||||||
|
## o.y = 0
|
||||||
|
## m.y = 0
|
||||||
|
## var d = m - o
|
||||||
|
## var rot: float = -0.01 * d.x * delta
|
||||||
|
## var basis: Basis = selected_building_xform.basis
|
||||||
|
## var pos: Vector3 = selected_building_xform.origin
|
||||||
|
## var xform = Transform(basis.rotated(Vector3.UP, rot), pos)
|
||||||
|
## $WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
||||||
|
## selected_building_xform = xform
|
||||||
|
## if drag_delay >= 0:
|
||||||
|
## drag_delay -= delta
|
||||||
|
#var motion = Vector2()
|
||||||
|
#var old_mouse_pos = Vector2(-1, -1)
|
||||||
var rotation_y = 0
|
var rotation_y = 0
|
||||||
var dragging = false
|
#var dragging = false
|
||||||
var drag_delay = 0.2
|
#var drag_delay = 0.2
|
||||||
var drag_start = Vector3()
|
var drag_start = Vector3()
|
||||||
func _unhandled_input(event):
|
#func _unhandled_input(event):
|
||||||
var editor_mode = $WorldEditor.get_current_mode()
|
# var editor_mode = $WorldEditor.get_current_mode()
|
||||||
var camera_mode = $WorldEditor.get_camera_mode()
|
# var camera_mode = $WorldEditor.get_camera_mode()
|
||||||
if camera_mode in [2, 3]:
|
# if camera_mode in [2, 3]:
|
||||||
if event is InputEventMouseMotion:
|
# if event is InputEventMouseMotion:
|
||||||
motion = event.relative
|
# motion = event.relative
|
||||||
if camera_mode == 3:
|
|
||||||
match editor_mode:
|
#func check_edit_building():
|
||||||
2:
|
# var mode = $"%buildings_edit_mode".selected
|
||||||
check_edit_building()
|
# breakpoint
|
||||||
func check_edit_building():
|
# if Input.is_action_just_pressed("mouse1"):
|
||||||
var mode = $"%buildings_edit_mode".selected
|
# var position = get_viewport().get_mouse_position()
|
||||||
if Input.is_action_just_pressed("mouse1"):
|
## var proj = get_viewport().get_camera().project_position(position, $cam.global_transform.origin.y + position.y * 0.5)
|
||||||
var position = get_viewport().get_mouse_position()
|
## print(position, proj)
|
||||||
# var proj = get_viewport().get_camera().project_position(position, $cam.global_transform.origin.y + position.y * 0.5)
|
## proj = get_viewport().get_camera().project_ray_origin(position)
|
||||||
# print(position, proj)
|
## proj.y = 0
|
||||||
# proj = get_viewport().get_camera().project_ray_origin(position)
|
## proj.x = stepify(proj.x, 100.0)
|
||||||
# proj.y = 0
|
## proj.z = stepify(proj.z, 100.0)
|
||||||
# proj.x = stepify(proj.x, 100.0)
|
## var mouse_pos = get_viewport().get_mouse_position()
|
||||||
# proj.z = stepify(proj.z, 100.0)
|
#
|
||||||
# var mouse_pos = get_viewport().get_mouse_position()
|
# var camera = get_viewport().get_camera()
|
||||||
var camera = get_viewport().get_camera()
|
# var start = camera.project_ray_origin(position)
|
||||||
var start = camera.project_ray_origin(position)
|
# var normal = camera.project_ray_normal(position)
|
||||||
var normal = camera.project_ray_normal(position)
|
# var end = start + normal * camera.get_zfar()
|
||||||
var end = start + normal * camera.get_zfar()
|
# var space_state = get_world().direct_space_state
|
||||||
var space_state = get_world().direct_space_state
|
# var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
||||||
var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
# if result.has("collider"):
|
||||||
if result.has("collider"):
|
# var proj = result.position
|
||||||
var proj = result.position
|
# if mode == 0:
|
||||||
if mode == 0:
|
# print("get closest building")
|
||||||
print("get closest building")
|
# $WorldEditor.editor_command("get_closest_building", [Transform(Basis(), proj)])
|
||||||
$WorldEditor.editor_command("get_closest_building", [Transform(Basis(), proj)])
|
# elif mode == 2:
|
||||||
elif mode == 2:
|
# var m = proj
|
||||||
var m = proj
|
# m.y = selected_building_xform.origin.y
|
||||||
m.y = selected_building_xform.origin.y
|
# var xform = selected_building_xform.looking_at(m, Vector3.UP)
|
||||||
var xform = selected_building_xform.looking_at(m, Vector3.UP)
|
# $WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
||||||
$WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
# $building_rot_cursor.global_transform = xform
|
||||||
$building_rot_cursor.global_transform = xform
|
# selected_building_xform = xform
|
||||||
selected_building_xform = xform
|
|
||||||
elif Input.is_action_pressed("mouse1"):
|
|
||||||
# Moving/rotating buildings
|
|
||||||
if mode in [1, 2]:
|
|
||||||
if ((mode == 1 && drag_delay < 0.0) || mode == 2) && !dragging:
|
|
||||||
dragging = true
|
|
||||||
var position = get_viewport().get_mouse_position()
|
|
||||||
var camera = get_viewport().get_camera()
|
|
||||||
var start = camera.project_ray_origin(position)
|
|
||||||
var normal = camera.project_ray_normal(position)
|
|
||||||
var end = start + normal * camera.get_zfar()
|
|
||||||
var space_state = get_world().direct_space_state
|
|
||||||
var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
|
||||||
if result.has("collider"):
|
|
||||||
var proj = result.position
|
|
||||||
drag_start = proj
|
|
||||||
if mode == 2:
|
|
||||||
var m = proj
|
|
||||||
m.y = selected_building_xform.origin.y
|
|
||||||
var xform = selected_building_xform.looking_at(m, Vector3.UP)
|
|
||||||
$WorldEditor.editor_command("update_building_transform", [selected_building, xform])
|
|
||||||
$building_rot_cursor.global_transform = xform
|
|
||||||
selected_building_xform = xform
|
|
||||||
$WorldEditor.editor_command("buildings_checkpoint", [])
|
|
||||||
else:
|
|
||||||
drag_delay -= get_process_delta_time()
|
|
||||||
else:
|
|
||||||
dragging = false
|
|
||||||
drag_delay = 0.2
|
|
||||||
else:
|
|
||||||
dragging = false
|
|
||||||
drag_delay = 0.2
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
assert($WorldEditor is WorldEditor)
|
assert($WorldEditor is WorldEditor)
|
||||||
var editor_mode = $WorldEditor.get_current_mode()
|
|
||||||
var camera_mode = $WorldEditor.get_camera_mode()
|
|
||||||
if camera_mode == 1:
|
|
||||||
var mouse_pos = get_viewport().get_mouse_position()
|
|
||||||
if old_mouse_pos.x < 0:
|
|
||||||
old_mouse_pos = mouse_pos
|
|
||||||
motion = Vector2()
|
|
||||||
else:
|
|
||||||
motion = mouse_pos - old_mouse_pos
|
|
||||||
old_mouse_pos = mouse_pos
|
|
||||||
var moved = false
|
|
||||||
match camera_mode:
|
|
||||||
1:
|
|
||||||
var xx = Input.get_axis("left", "right")
|
|
||||||
var zz = Input.get_axis("backward", "forward")
|
|
||||||
var hh = Input.get_axis("action2", "action")
|
|
||||||
var h = $Camera.global_transform.origin.y
|
|
||||||
if abs(zz) > 0.1:
|
|
||||||
$Camera.global_transform.origin.z -= abs(h) * zz * delta
|
|
||||||
moved = true
|
|
||||||
if abs(xx) > 0.1:
|
|
||||||
$Camera.global_transform.origin.x += abs(h) * xx * delta
|
|
||||||
moved = true
|
|
||||||
if abs(hh) > 0.1 && abs(xx) < 0.1 && abs(zz) < 0.1:
|
|
||||||
$Camera.global_transform.origin.y += 10 * hh * delta
|
|
||||||
moved = true
|
|
||||||
2:
|
|
||||||
var h = $Camera.global_transform.origin.y
|
|
||||||
var xx = motion.x
|
|
||||||
$Camera.rotate_y(-xx * 0.005)
|
|
||||||
var offset = -$Camera.global_transform.basis.z * 10.0 * delta
|
|
||||||
offset.y = 0
|
|
||||||
var hh = Input.get_axis("action2", "action")
|
|
||||||
if abs(hh) > 0.1:
|
|
||||||
$Camera.global_transform.origin.y += 10 * hh * delta
|
|
||||||
moved = true
|
|
||||||
var zz = Input.get_axis("backward", "forward")
|
|
||||||
if abs(zz) > 0.1:
|
|
||||||
$Camera.global_transform.origin += zz * abs(h) * offset
|
|
||||||
moved = true
|
|
||||||
motion = Vector2()
|
|
||||||
if moved:
|
|
||||||
$Area.global_transform.origin.x = $Camera.global_transform.origin.x
|
|
||||||
$Area.global_transform.origin.z = $Camera.global_transform.origin.z
|
|
||||||
func setup_cam1():
|
|
||||||
$WorldEditor.set_camera_mode(1)
|
|
||||||
func setup_cam2():
|
|
||||||
$WorldEditor.set_camera_mode(2)
|
|
||||||
func setup_cam3():
|
|
||||||
$WorldEditor.set_camera_mode(3)
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ WorldEditor::WorldEditor()
|
|||||||
, current_camera_mode(-1)
|
, current_camera_mode(-1)
|
||||||
, motion(Vector2())
|
, motion(Vector2())
|
||||||
, old_mouse_pos(Vector2(-1, -1))
|
, old_mouse_pos(Vector2(-1, -1))
|
||||||
|
, dragging(false)
|
||||||
|
, drag_delay(0.2f)
|
||||||
{
|
{
|
||||||
if (!InputMap::get_singleton()->has_action("left"))
|
if (!InputMap::get_singleton()->has_action("left"))
|
||||||
InputMap::get_singleton()->add_action("left");
|
InputMap::get_singleton()->add_action("left");
|
||||||
@@ -31,6 +33,14 @@ WorldEditor::WorldEditor()
|
|||||||
InputMap::get_singleton()->add_action("action");
|
InputMap::get_singleton()->add_action("action");
|
||||||
if (!InputMap::get_singleton()->has_action("action2"))
|
if (!InputMap::get_singleton()->has_action("action2"))
|
||||||
InputMap::get_singleton()->add_action("action2");
|
InputMap::get_singleton()->add_action("action2");
|
||||||
|
if (!InputMap::get_singleton()->has_action("editor_cam1"))
|
||||||
|
InputMap::get_singleton()->add_action("editor_cam1");
|
||||||
|
if (!InputMap::get_singleton()->has_action("editor_cam2"))
|
||||||
|
InputMap::get_singleton()->add_action("editor_cam2");
|
||||||
|
if (!InputMap::get_singleton()->has_action("editor_cam3"))
|
||||||
|
InputMap::get_singleton()->add_action("editor_cam3");
|
||||||
|
if (!InputMap::get_singleton()->has_action("mouse1"))
|
||||||
|
InputMap::get_singleton()->add_action("mouse1");
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldEditor::~WorldEditor()
|
WorldEditor::~WorldEditor()
|
||||||
@@ -245,8 +255,10 @@ void WorldEditor::_notification(int which)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_process_unhandled_input(true);
|
set_process_unhandled_input(true);
|
||||||
|
set_physics_process(true);
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_EXIT_TREE:
|
case NOTIFICATION_EXIT_TREE:
|
||||||
|
set_physics_process(false);
|
||||||
set_process_unhandled_input(false);
|
set_process_unhandled_input(false);
|
||||||
break;
|
break;
|
||||||
case NOTIFICATION_PHYSICS_PROCESS: {
|
case NOTIFICATION_PHYSICS_PROCESS: {
|
||||||
@@ -256,6 +268,29 @@ void WorldEditor::_notification(int which)
|
|||||||
if (!cam)
|
if (!cam)
|
||||||
return;
|
return;
|
||||||
float delta = get_physics_process_delta_time();
|
float delta = get_physics_process_delta_time();
|
||||||
|
if (Input::get_singleton()->is_action_just_pressed(
|
||||||
|
"editor_cam1"))
|
||||||
|
set_camera_mode(1);
|
||||||
|
if (Input::get_singleton()->is_action_just_pressed(
|
||||||
|
"editor_cam2"))
|
||||||
|
set_camera_mode(2);
|
||||||
|
if (Input::get_singleton()->is_action_just_pressed(
|
||||||
|
"editor_cam3"))
|
||||||
|
set_camera_mode(3);
|
||||||
|
if (dragging) {
|
||||||
|
if (!Input::get_singleton()->is_action_pressed(
|
||||||
|
"mouse1")) {
|
||||||
|
dragging = false;
|
||||||
|
drag_delay = 0.2f;
|
||||||
|
Array args;
|
||||||
|
Vector2 position =
|
||||||
|
get_viewport()->get_mouse_position();
|
||||||
|
args.push_back(position);
|
||||||
|
emit_signal("editor_event", "mouse_drag_off",
|
||||||
|
args);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
}
|
||||||
Transform cam_xform = cam->get_global_transform();
|
Transform cam_xform = cam->get_global_transform();
|
||||||
if (current_camera_mode == 1) {
|
if (current_camera_mode == 1) {
|
||||||
Vector2 mouse_pos =
|
Vector2 mouse_pos =
|
||||||
@@ -288,14 +323,50 @@ void WorldEditor::_notification(int which)
|
|||||||
cam_xform.origin.y += 10.0f * hh * delta;
|
cam_xform.origin.y += 10.0f * hh * delta;
|
||||||
moved = true;
|
moved = true;
|
||||||
}
|
}
|
||||||
|
if (moved) {
|
||||||
|
cam->set_global_transform(cam_xform);
|
||||||
|
Array move_args;
|
||||||
|
move_args.push_back(cam_xform);
|
||||||
|
emit_signal("editor_event",
|
||||||
|
"editor_camera_moved", move_args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (!dragging && drag_delay >= 0.0f)
|
||||||
|
drag_delay -= delta;
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldEditor::_unhandled_input(const Ref<InputEvent> &event)
|
void WorldEditor::_unhandled_input(const Ref<InputEvent> &event)
|
||||||
{
|
{
|
||||||
print_line("unhandled_input: " + event->as_text());
|
if (current_camera_mode != 1) {
|
||||||
|
Ref<InputEventMouseMotion> motionevt = event;
|
||||||
|
if (motionevt.is_valid())
|
||||||
|
motion = motionevt->get_relative();
|
||||||
|
}
|
||||||
|
if (Input::get_singleton()->is_action_just_pressed("mouse1")) {
|
||||||
|
Array args;
|
||||||
|
Vector2 position = get_viewport()->get_mouse_position();
|
||||||
|
args.push_back(position);
|
||||||
|
emit_signal("editor_event", "mouse_press", args);
|
||||||
|
} else if (Input::get_singleton()->is_action_pressed("mouse1")) {
|
||||||
|
if (dragging) {
|
||||||
|
Array args;
|
||||||
|
Vector2 position = get_viewport()->get_mouse_position();
|
||||||
|
args.push_back(position);
|
||||||
|
emit_signal("editor_event", "mouse_drag", args);
|
||||||
|
} else {
|
||||||
|
if (drag_delay < 0.0f && !dragging) {
|
||||||
|
dragging = true;
|
||||||
|
Array args;
|
||||||
|
Vector2 position =
|
||||||
|
get_viewport()->get_mouse_position();
|
||||||
|
args.push_back(position);
|
||||||
|
emit_signal("editor_event", "mouse_drag_on",
|
||||||
|
args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldEditor::world_exited()
|
void WorldEditor::world_exited()
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ private:
|
|||||||
int current_camera_mode;
|
int current_camera_mode;
|
||||||
Vector2 motion;
|
Vector2 motion;
|
||||||
Vector2 old_mouse_pos;
|
Vector2 old_mouse_pos;
|
||||||
|
bool dragging;
|
||||||
|
float drag_delay;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WorldEditor();
|
WorldEditor();
|
||||||
|
|||||||
Reference in New Issue
Block a user