Almost separated the buildings editor
This commit is contained in:
@@ -10,9 +10,9 @@ 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 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 [
|
||||
@@ -27,9 +27,9 @@ func _ready():
|
||||
$WorldEditor.connect("editor_event", self, "editor_event")
|
||||
for k in vmode.keys():
|
||||
vmode[k].hide()
|
||||
$building_cursor.hide()
|
||||
$"%building_cursor".hide()
|
||||
$"%line_cursor".hide()
|
||||
$"%building_type".connect("item_selected", self, "change_building_type")
|
||||
# $"%building_type".connect("item_selected", self, "change_building_type")
|
||||
|
||||
func editor_event(evname: String, args: Array):
|
||||
print(evname, args)
|
||||
@@ -49,8 +49,9 @@ func editor_event(evname: String, args: Array):
|
||||
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])
|
||||
pass
|
||||
# print(evname, args)
|
||||
# select_building(args[0], args[3], args[4])
|
||||
elif evname == "result:get_building_types":
|
||||
print(evname, args)
|
||||
var btypes = args[0]
|
||||
@@ -63,9 +64,11 @@ func editor_event(evname: String, args: Array):
|
||||
# elif evname == "edit_update_building":
|
||||
# check_edit_building()
|
||||
elif evname == "mouse_press":
|
||||
mouse_press(args[0])
|
||||
pass
|
||||
# mouse_press(args[0])
|
||||
elif evname == "mouse_drag":
|
||||
mouse_drag(args[0])
|
||||
pass
|
||||
# mouse_drag(args[0])
|
||||
elif evname == "mouse_drag_on":
|
||||
pass
|
||||
elif evname == "mouse_drag_off":
|
||||
@@ -74,87 +77,87 @@ func editor_event(evname: String, args: Array):
|
||||
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
|
||||
#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
|
||||
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)
|
||||
#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
|
||||
# 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()
|
||||
@@ -163,13 +166,13 @@ func _process(delta):
|
||||
# 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 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
|
||||
|
||||
@@ -116,7 +116,7 @@ text = "NPC Mode"
|
||||
unique_name_in_owner = true
|
||||
margin_top = 154.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 298.0
|
||||
margin_bottom = 322.0
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_buildings"]
|
||||
margin_right = 232.0
|
||||
@@ -134,7 +134,7 @@ margin_top = 26.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 46.0
|
||||
text = "Select"
|
||||
items = [ "Select", null, false, 0, null, "Move", null, false, 1, null, "Rotate", null, false, 2, null ]
|
||||
items = [ "Select", null, false, 0, null, "Move", null, false, 1, null, "Rotate", null, false, 2, null, "Create", null, false, 3, null ]
|
||||
selected = 0
|
||||
|
||||
[node name="Label2" type="Label" parent="VBoxContainer/v_buildings"]
|
||||
@@ -162,18 +162,25 @@ margin_right = 232.0
|
||||
margin_bottom = 120.0
|
||||
text = "Delete building"
|
||||
|
||||
[node name="buildings_save" type="Button" parent="VBoxContainer/v_buildings"]
|
||||
[node name="buildings_create_building" type="Button" parent="VBoxContainer/v_buildings"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 124.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 144.0
|
||||
text = "Create building"
|
||||
|
||||
[node name="buildings_save" type="Button" parent="VBoxContainer/v_buildings"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 148.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 168.0
|
||||
text = "Save Buildings"
|
||||
|
||||
[node name="v_navigation" type="VBoxContainer" parent="VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 302.0
|
||||
margin_top = 326.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 324.0
|
||||
margin_bottom = 348.0
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_navigation"]
|
||||
margin_right = 232.0
|
||||
@@ -187,9 +194,9 @@ text = "Navigation mode"
|
||||
|
||||
[node name="v_poi" type="VBoxContainer" parent="VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 328.0
|
||||
margin_top = 352.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 350.0
|
||||
margin_bottom = 374.0
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_poi"]
|
||||
margin_right = 232.0
|
||||
@@ -203,9 +210,9 @@ text = "POI mode"
|
||||
|
||||
[node name="v_road_lines" type="VBoxContainer" parent="VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 354.0
|
||||
margin_top = 378.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 962.0
|
||||
margin_bottom = 986.0
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_road_lines"]
|
||||
margin_right = 232.0
|
||||
@@ -462,9 +469,9 @@ text = "Cancel"
|
||||
|
||||
[node name="v_npc" type="VBoxContainer" parent="VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 966.0
|
||||
margin_top = 990.0
|
||||
margin_right = 232.0
|
||||
margin_bottom = 988.0
|
||||
margin_bottom = 1012.0
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_npc"]
|
||||
margin_right = 232.0
|
||||
@@ -479,6 +486,7 @@ text = "NPC mode"
|
||||
[node name="StreamWorld" type="StreamWorld" parent="."]
|
||||
|
||||
[node name="VoxelLodTerrain" type="VoxelLodTerrain" parent="."]
|
||||
unique_name_in_owner = true
|
||||
generator = SubResource( 5 )
|
||||
mesher = SubResource( 6 )
|
||||
voxel_bounds = AABB( -5.36871e+08, -2048, -5.36871e+08, 1.07374e+09, 4096, 1.07374e+09 )
|
||||
@@ -505,6 +513,8 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0 )
|
||||
shape = SubResource( 9 )
|
||||
|
||||
[node name="building_cursor" type="MeshInstance" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
mesh = SubResource( 10 )
|
||||
material/0 = SubResource( 11 )
|
||||
|
||||
@@ -518,6 +528,8 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0 )
|
||||
shape = SubResource( 12 )
|
||||
|
||||
[node name="building_rot_cursor" type="Spatial" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
||||
[node name="building_rot_cursor" type="MeshInstance" parent="building_rot_cursor"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -60 )
|
||||
|
||||
Reference in New Issue
Block a user