284 lines
10 KiB
GDScript
284 lines
10 KiB
GDScript
extends Spatial
|
|
|
|
#var camera_mode = -1
|
|
|
|
#onready var vmode = {
|
|
# 2: $"%v_buildings",
|
|
# 3: $"%v_navigation",
|
|
# 5: $"%v_poi",
|
|
# 6: $"%v_road_lines",
|
|
# 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])
|
|
|
|
#var nav_active = false
|
|
#func nav_gui_input(event: InputEvent):
|
|
# if Input.is_action_just_pressed("mouse1"):
|
|
# Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
|
# nav_active = true
|
|
# elif Input.is_action_just_released("mouse1"):
|
|
# Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
|
# nav_active = false
|
|
# if nav_active && Input.is_action_pressed("mouse1"):
|
|
# if event is InputEventMouseMotion:
|
|
# get_viewport().get_camera().global_transform.origin.x += event.relative.x
|
|
# get_viewport().get_camera().global_transform.origin.z -= event.relative.y
|
|
|
|
#func _ready():
|
|
# for b in [
|
|
# $"%select_buildings",
|
|
# $"%select_navigation",
|
|
# $"%select_poi",
|
|
# $"%select_road_lines",
|
|
# $"%select_npc",
|
|
# $"%buildings_save",
|
|
# ]:
|
|
# b.connect("pressed", $WorldEditor, "editor_command", [b.name, []])
|
|
# $WorldEditor.connect("editor_event", self, "editor_event")
|
|
# for k in vmode.keys():
|
|
# vmode[k].hide()
|
|
# $"%building_cursor".hide()
|
|
# $"%line_cursor".hide()
|
|
# $"%building_type".connect("item_selected", self, "change_building_type")
|
|
# $"%NavPanel".connect("gui_input", self, "nav_gui_input")
|
|
#var ignore_events = [
|
|
# "mode_change_pre",
|
|
# "mode_change_post",
|
|
# "result:get_closest_building",
|
|
# "result:get_building_types",
|
|
# "mouse_drag",
|
|
# "mouse_press",
|
|
# "mouse_drag_on",
|
|
# "mouse_drag_off",
|
|
# "line_cursor_motion",
|
|
# "button:create_building",
|
|
# "lines_select_line",
|
|
# "lines_changed_line"
|
|
#]
|
|
func editor_event(evname: String, args: Array):
|
|
print(evname, args)
|
|
# if evname == "mode_change_pre":
|
|
# var mode_prev = args[0]
|
|
# if mode_prev == -1:
|
|
# for k in vmode.keys():
|
|
# vmode[k].hide()
|
|
# elif vmode.has(mode_prev):
|
|
# vmode[mode_prev].hide()
|
|
# elif evname == "mode_change_post":
|
|
# var mode_next = args[1]
|
|
# if vmode.has(mode_next):
|
|
# 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_building_types":
|
|
# pass
|
|
# print(evname, args)
|
|
# var btypes = args[0]
|
|
# $"%building_type".clear()
|
|
# for k in btypes.keys():
|
|
# $"%building_type".add_item(k)
|
|
# if evname == "editor_camera_moved":
|
|
# var cam = get_viewport().get_camera()
|
|
# $"%selection_area".global_transform.origin.x = cam.global_transform.origin.x
|
|
# $"%selection_area".global_transform.origin.z = cam.global_transform.origin.z
|
|
# elif evname == "edit_update_building":
|
|
# check_edit_building()
|
|
# elif evname in ignore_events:
|
|
# pass
|
|
# else:
|
|
# 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 == 1:
|
|
# $WorldEditor.editor_command("checkpoint", [])
|
|
# elif mode == 2:
|
|
# $WorldEditor.editor_command("checkpoint", [])
|
|
# 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 selected_building
|
|
#var selected_building_xform
|
|
#func select_building(xform, id, mid):
|
|
# selected_building = id
|
|
# selected_building_xform = xform
|
|
# print("selected id: ", id)
|
|
# $WorldEditor.select_building(xform, id, mid)
|
|
# for h in range($"%building_type".get_item_count()):
|
|
# var item = $"%building_type".get_item_text(h)
|
|
# if item == mid:
|
|
# $"%building_type".select(h)
|
|
# break
|
|
# if !$"%building_cursor".visible:
|
|
# $"%building_cursor".show()
|
|
# $"%building_cursor".global_transform.origin = xform.origin
|
|
#func _process(delta):
|
|
# if Input.is_action_just_pressed("editor_cam1"):
|
|
# setup_cam1()
|
|
# if Input.is_action_just_pressed("editor_cam2"):
|
|
# 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
|
|
# drag_delay = 0.2
|
|
# else:
|
|
# 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
|
|
# 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
|
|
## 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
|
|
## if drag_delay >= 0:
|
|
## drag_delay -= delta
|
|
#var motion = Vector2()
|
|
#var old_mouse_pos = Vector2(-1, -1)
|
|
#var rotation_y = 0
|
|
#var dragging = false
|
|
#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
|
|
|
|
#func check_edit_building():
|
|
# var mode = $"%buildings_edit_mode".selected
|
|
# breakpoint
|
|
# 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)
|
|
## print(position, proj)
|
|
## proj = get_viewport().get_camera().project_ray_origin(position)
|
|
## proj.y = 0
|
|
## proj.x = stepify(proj.x, 100.0)
|
|
## proj.z = stepify(proj.z, 100.0)
|
|
## var mouse_pos = 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
|
|
# 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
|
|
#func _physics_process(delta):
|
|
# assert($WorldEditor is WorldEditor)
|