Added camera mode to c++
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
extends Spatial
|
||||
|
||||
var camera_mode = -1
|
||||
#var camera_mode = -1
|
||||
|
||||
onready var vmode = {
|
||||
2: $"%v_buildings",
|
||||
@@ -10,6 +10,10 @@ onready var vmode = {
|
||||
7: $"%v_npc",
|
||||
}
|
||||
|
||||
func change_building_type(index):
|
||||
var item = $"%building_type".get_item_text(index)
|
||||
$WorldEditor.editor_command("change_building_type", [selected_building, item])
|
||||
|
||||
func _ready():
|
||||
for b in [
|
||||
$"%select_buildings",
|
||||
@@ -24,6 +28,7 @@ func _ready():
|
||||
for k in vmode.keys():
|
||||
vmode[k].hide()
|
||||
$building_cursor.hide()
|
||||
$"%building_type".connect("item_selected", self, "change_building_type")
|
||||
|
||||
func editor_event(evname: String, args: Array):
|
||||
print(evname, args)
|
||||
@@ -40,6 +45,8 @@ func editor_event(evname: String, args: Array):
|
||||
vmode[mode_next].show()
|
||||
if mode_next == 2:
|
||||
$WorldEditor.editor_command("get_building_types", [])
|
||||
elif mode_next == 6:
|
||||
$WorldEditor.editor_command("get_lines_list", [])
|
||||
elif evname == "result:get_closest_building":
|
||||
print(evname, args)
|
||||
select_building(args[0], args[3], args[4])
|
||||
@@ -72,6 +79,14 @@ func _process(delta):
|
||||
setup_cam2()
|
||||
if Input.is_action_just_pressed("editor_cam3"):
|
||||
setup_cam3()
|
||||
var mode = $"%buildings_edit_mode".selected
|
||||
if mode == 2:
|
||||
$building_rot_cursor.global_transform = selected_building_xform
|
||||
if !$building_rot_cursor.visible:
|
||||
$building_rot_cursor.show()
|
||||
else:
|
||||
if $building_rot_cursor.visible:
|
||||
$building_rot_cursor.hide()
|
||||
if dragging:
|
||||
if !Input.is_action_pressed("mouse1"):
|
||||
dragging = false
|
||||
@@ -86,7 +101,8 @@ func _process(delta):
|
||||
var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
||||
if result.has("collider"):
|
||||
var proj = result.position
|
||||
if $"%buildings_edit_mode".selected == 1:
|
||||
if mode == 1:
|
||||
# move
|
||||
print(proj)
|
||||
var newpos = proj
|
||||
newpos.x = stepify(newpos.x, 2.0)
|
||||
@@ -97,6 +113,25 @@ func _process(delta):
|
||||
$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
|
||||
# var o = selected_building_xform.origin
|
||||
# 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
|
||||
var motion = Vector2()
|
||||
var old_mouse_pos = Vector2(-1, -1)
|
||||
var rotation_y = 0
|
||||
@@ -105,6 +140,7 @@ var drag_delay = 0.2
|
||||
var drag_start = Vector3()
|
||||
func _unhandled_input(event):
|
||||
var editor_mode = $WorldEditor.get_current_mode()
|
||||
var camera_mode = $WorldEditor.get_camera_mode()
|
||||
if camera_mode in [2, 3]:
|
||||
if event is InputEventMouseMotion:
|
||||
motion = event.relative
|
||||
@@ -113,6 +149,7 @@ func _unhandled_input(event):
|
||||
2:
|
||||
check_edit_building()
|
||||
func check_edit_building():
|
||||
var mode = $"%buildings_edit_mode".selected
|
||||
if Input.is_action_just_pressed("mouse1"):
|
||||
var position = get_viewport().get_mouse_position()
|
||||
# var proj = get_viewport().get_camera().project_position(position, $cam.global_transform.origin.y + position.y * 0.5)
|
||||
@@ -130,13 +167,20 @@ func check_edit_building():
|
||||
var result = space_state.intersect_ray(start, end, [], 1 << 15, false, true)
|
||||
if result.has("collider"):
|
||||
var proj = result.position
|
||||
if $"%buildings_edit_mode".selected == 0:
|
||||
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
|
||||
elif Input.is_action_pressed("mouse1"):
|
||||
# Moving buildings
|
||||
if $"%buildings_edit_mode".selected == 1:
|
||||
if drag_delay < 0.0 && !dragging:
|
||||
# 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()
|
||||
@@ -148,7 +192,14 @@ func check_edit_building():
|
||||
if result.has("collider"):
|
||||
var proj = result.position
|
||||
drag_start = proj
|
||||
$WorldEditor.editor_command("buildings_checkpoint", [])
|
||||
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:
|
||||
@@ -159,6 +210,7 @@ func check_edit_building():
|
||||
drag_delay = 0.2
|
||||
func _physics_process(delta):
|
||||
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:
|
||||
@@ -203,16 +255,17 @@ func _physics_process(delta):
|
||||
$Area.global_transform.origin.z = $Camera.global_transform.origin.z
|
||||
func setup_cam1():
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
camera_mode = 1
|
||||
var camera_mode = $WorldEditor.get_camera_mode()
|
||||
if camera_mode == -1:
|
||||
$Camera.global_transform.origin.y = 80.0
|
||||
$Camera.global_transform.basis = Basis().rotated(Vector3(1, 0, 0), -PI / 2.0)
|
||||
func setup_cam2():
|
||||
camera_mode = 2
|
||||
var camera_mode = $WorldEditor.get_camera_mode()
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
if camera_mode == -1:
|
||||
$Camera.global_transform.origin.y = 80.0
|
||||
$WorldEditor.set_camera_mode(2)
|
||||
$Camera.global_transform.basis = Basis().rotated(Vector3(1, 0, 0), -PI / 4.0)
|
||||
func setup_cam3():
|
||||
camera_mode = 3
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
$WorldEditor.set_camera_mode(3)
|
||||
|
||||
Reference in New Issue
Block a user