Misc changes.

This commit is contained in:
Nekojimi 2025-04-21 20:49:48 +01:00
parent 1f561c6f7a
commit cf0be406ee
8 changed files with 462 additions and 73 deletions

View File

@ -0,0 +1,26 @@
{
"column_properties": {
"res://items/": {
"metadata/_custom_type_script": {
"visibility": 0.0
},
"resource_local_to_scene": {
"visibility": 0.0
},
"resource_name": {
"visibility": 0.0
}
}
},
"recent_paths": [
"res://items/"
],
"table_functions": {
"filter": [
"return true"
],
"process": [
"return value"
]
}
}

View File

@ -1 +1,24 @@
extends GridMap
var postprocess_done: bool = false
var postprocess_delay: float = 5.0
func _process(delta: float) -> void:
if postprocess_delay > 0:
postprocess_delay -= delta
if postprocess_delay <= 0 and !postprocess_done:
if !NavigationServer3D.get_maps().is_empty():
postprocess_done = true
var regions_deleted: int = 0
var map_rid: RID = NavigationServer3D.get_maps()[0]
for cell in get_used_cells():
var nav_region_rid: RID = NavigationServer3D.map_get_closest_point_owner(map_rid, to_global(map_to_local(cell)))
var upstairs_neighbour: Vector3 = cell + Vector3i(0,1,0)
if get_cell_item(upstairs_neighbour) != INVALID_CELL_ITEM:
DebugDraw3D.draw_box(to_global(map_to_local(cell)), Quaternion(), Vector3(2,1,2), Color.RED, true, 50)
NavigationServer3D.region_set_enabled(nav_region_rid, false)
regions_deleted += 1
NavigationServer3D.map_force_update(map_rid)
print("Navmesh postprocess done; %d regions deleted." % regions_deleted)

File diff suppressed because one or more lines are too long

284
node_3d.tscn.orig Normal file

File diff suppressed because one or more lines are too long

View File

@ -33,7 +33,6 @@ max_speed = 5.0
path_desired_distance = 0.5
target_desired_distance = 0.5
path_max_distance = 1.01
avoidance_enabled = true
max_speed = 5.0
debug_enabled = true
debug_path_custom_color = Color(1, 0, 0.0808306, 1)
@ -46,3 +45,8 @@ mesh = SubResource("QuadMesh_i5arm")
[node name="ShapeCast3D" type="ShapeCast3D" parent="."]
shape = SubResource("SphereShape3D_a202f")
[node name="Label3D" type="Label3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.668082, 0)
billboard = 1
text = "blablabla"

View File

@ -45,6 +45,20 @@ version_control/autoload_on_startup=true
enabled=PackedStringArray("res://addons/PathMesh3D/plugin.cfg", "res://addons/git_describe/plugin.cfg", "res://addons/resources_spreadsheet_view/plugin.cfg")
[layer_names]
3d_render/layer_1="Terrain"
3d_render/layer_2="Buildings"
3d_render/layer_3="Units"
3d_physics/layer_1="Terrain"
3d_navigation/layer_1="Enemies Small"
3d_physics/layer_2="Buildings"
3d_navigation/layer_2="Enemies Large"
3d_physics/layer_3="Enemies"
3d_navigation/layer_3="Citizens"
3d_physics/layer_4="Citizens"
3d_physics/layer_5="Projectiles"
[navigation]
3d/default_edge_connection_margin=0.6

View File

@ -3,37 +3,62 @@ class_name Unit
@export var movement_force: float = 100
@export var max_speed: float = 100
@export var minimum_progress_rate: float = 1.0
@export var stuck_time: float = 1.0
var target_velocity: Vector3 = Vector3()
var last_distance_to_target: float = 0.0
var stuck_timer: float = 0.0
func _ready() -> void:
$NavigationAgent3D.connect("velocity_computed", avoidance_velocity_computed)
#$NavigationAgent3D.connect("velocity_computed", avoidance_velocity_computed)
pass
func avoidance_velocity_computed(velocity: Vector3) -> void:
if velocity != target_velocity:
DebugDraw3D.draw_line(global_position, global_position + velocity, Color.ORANGE)
#DebugDraw3D.draw_line(global_position, global_position + velocity, Color.ORANGE)
#print("Avoidance issued!")
target_velocity = velocity
func _process(delta: float) -> void:
if $NavigationAgent3D.is_target_reached() or $NavigationAgent3D.target_position.is_zero_approx():
if $NavigationAgent3D.is_target_reached() \
or $NavigationAgent3D.target_position.is_zero_approx() \
or !$NavigationAgent3D.is_target_reachable():
$NavigationAgent3D.target_position = NavigationServer3D.map_get_random_point(NavigationServer3D.get_maps()[0], 1, true)
last_distance_to_target = $NavigationAgent3D.distance_to_target()
else:
#DebugDraw3D.draw_sphere($NavigationAgent3D.target_position, 0.5, Color.RED)
var distance_to_target: float = $NavigationAgent3D.distance_to_target()
var progress_rate: float = (last_distance_to_target - distance_to_target) / delta
$Label3D.text = "Prog: %f" % progress_rate
last_distance_to_target = distance_to_target
if progress_rate < minimum_progress_rate:
$Label3D.modulate = Color.RED
stuck_timer += delta
if stuck_timer >= stuck_time:
unstuck()
else:
$Label3D.modulate = Color.WHITE
stuck_timer = 0
DebugDraw3D.draw_sphere($NavigationAgent3D.target_position, 0.5, Color.RED)
var next_point: Vector3 = $NavigationAgent3D.get_next_path_position()
DebugDraw3D.draw_sphere(next_point, 0.1, Color.YELLOW)
var direction: Vector3 = (next_point - global_position).normalized()
#DebugDraw3D.draw_line(global_position, global_position + linear_velocity, Color.BLUE)
var target_velocity: Vector3 = direction * max_speed
$NavigationAgent3D.velocity = target_velocity
DebugDraw3D.draw_line(global_position, global_position + target_velocity, Color.MAGENTA)
target_velocity= direction * max_speed
#$NavigationAgent3D.velocity = target_velocity
#DebugDraw3D.draw_line(global_position, global_position + target_velocity, Color.MAGENTA)
#DebugDraw3D.draw_text(global_position + Vector3(0,1,0), "%f" % $NavigationAgent3D.distance_to_target())
func unstuck() -> void:
# teleport to next path point
global_position = $NavigationAgent3D.get_next_path_position()
stuck_timer = 0
func _physics_process(delta: float) -> void:
if $ShapeCast3D.is_colliding():
var force_direction: Vector3 = (target_velocity-linear_velocity)
var normal: Vector3 = $ShapeCast3D.get_collision_normal(0)
DebugDraw3D.draw_line(global_position, global_position + normal, Color.DODGER_BLUE)
#DebugDraw3D.draw_line(global_position, global_position + normal, Color.DODGER_BLUE)
var force: Vector3 = (force_direction * movement_force).slide(normal)
DebugDraw3D.draw_line(global_position, global_position + force, Color.GREEN)
#DebugDraw3D.draw_line(global_position, global_position + force, Color.GREEN)
apply_central_force(force)

View File

@ -1,9 +1,4 @@
[gd_scene load_steps=17 format=3 uid="uid://bexxobgiojrfa"]
[ext_resource type="ArrayMesh" uid="uid://bs13eo8off8ee" path="res://assets/models/Ramp Corner Inner.obj" id="1_k6t24"]
[ext_resource type="ArrayMesh" uid="uid://ca1wobe3qgakn" path="res://assets/models/Ramp Corner Inner Nav.obj" id="2_d6bvg"]
[ext_resource type="ArrayMesh" uid="uid://1ud15exgl668" path="res://assets/models/Ramp Corner Outer.obj" id="3_7ivye"]
[ext_resource type="ArrayMesh" uid="uid://bai5bvubpu4ec" path="res://assets/models/Ramp Corner Outer Nav.obj" id="4_vra4g"]
[gd_scene load_steps=9 format=3 uid="uid://bexxobgiojrfa"]
[sub_resource type="BoxMesh" id="BoxMesh_qra7f"]
size = Vector3(2, 1, 2)
@ -32,7 +27,7 @@ size = Vector3(2, 1, 2)
points = PackedVector3Array(-1, -0.5, -1, -1, 0.5, -1, 1, -0.5, -1, -1, -0.5, 1, -1, 0.5, 1, 1, -0.5, 1)
[sub_resource type="NavigationMesh" id="NavigationMesh_7h0kd"]
vertices = PackedVector3Array(-0.735052, 0.760437, -0.75, -0.735052, 0.760437, 0.75, 0.764948, 0.010437, 0.75, 0.764948, 0.010437, -0.75)
vertices = PackedVector3Array(-0.735052, 0.760437, -0.75, -0.735052, 0.760437, 0.75, 0.764948, 0.0104373, 0.75, 0.764948, 0.0104373, -0.75)
polygons = [PackedInt32Array(3, 2, 0), PackedInt32Array(0, 2, 1)]
agent_radius = 0.2
@ -40,22 +35,6 @@ agent_radius = 0.2
size = Vector2(2.2, 2)
orientation = 1
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_7ivye"]
data = PackedVector3Array(-1, 0.5, -1, -1, -0.5, 1, -1, -0.5, -1, 1, 0.5, -1, 1, -0.5, -1, 1, 0.5, 1, 1, 0.5, 1, 1, -0.5, -1, 1, -0.5, 1, 1, 0.5, 1, 1, -0.5, 1, -1, -0.5, 1, 1, -0.5, -1, -1, -0.5, -1, 1, -0.5, 1, 1, -0.5, 1, -1, -0.5, -1, -1, -0.5, 1, -1, 0.5, -1, -1, -0.5, -1, 1, 0.5, -1, 1, 0.5, -1, -1, -0.5, -1, 1, -0.5, -1, -1, 0.5, -1, 1, 0.5, -1, -1, -0.5, 1, 1, 0.5, -1, 1, 0.5, 1, -1, -0.5, 1)
[sub_resource type="NavigationMesh" id="NavigationMesh_vra4g"]
vertices = PackedVector3Array(-0.75, 0.75, -0.75, -0.75, 0, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, -0.75)
polygons = [PackedInt32Array(3, 2, 0), PackedInt32Array(0, 2, 1)]
agent_radius = 0.2
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_xlp04"]
points = PackedVector3Array(1, -0.5, -1, -1, -0.5, 1, 1, 0.5, 1, 1, -0.5, 1)
[sub_resource type="NavigationMesh" id="NavigationMesh_341ea"]
vertices = PackedVector3Array(-1, 0, 0.75, 1, 0.75, 1, 1, 0, -1)
polygons = [PackedInt32Array(2, 1, 0)]
agent_radius = 0.0
[node name="Tiles" type="Node3D"]
[node name="Cube" type="MeshInstance3D" parent="."]
@ -73,7 +52,7 @@ navigation_mesh = SubResource("NavigationMesh_qra7f")
mesh = SubResource("QuadMesh_7h0kd")
[node name="Ramp" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.99928, -0.00256312, 0.000191689)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.40447, -0.00256312, 0.000191689)
mesh = SubResource("PrismMesh_qra7f")
[node name="StaticBody3D" type="StaticBody3D" parent="Ramp"]
@ -87,33 +66,3 @@ navigation_mesh = SubResource("NavigationMesh_7h0kd")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ramp/NavigationRegion3D"]
transform = Transform3D(0.895502, 0.445057, 0, -0.445057, 0.895502, 0, 0, 0, 1, 0, 0, 0)
mesh = SubResource("QuadMesh_k6t24")
[node name="Ramp Inner Corner" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
mesh = ExtResource("1_k6t24")
[node name="StaticBody3D" type="StaticBody3D" parent="Ramp Inner Corner"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ramp Inner Corner/StaticBody3D"]
shape = SubResource("ConcavePolygonShape3D_7ivye")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="Ramp Inner Corner"]
navigation_mesh = SubResource("NavigationMesh_vra4g")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ramp Inner Corner/NavigationRegion3D"]
mesh = ExtResource("2_d6bvg")
[node name="Ramp Outer Corner" type="MeshInstance3D" parent="."]
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 2, 0, 2)
mesh = ExtResource("3_7ivye")
[node name="StaticBody3D" type="StaticBody3D" parent="Ramp Outer Corner"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ramp Outer Corner/StaticBody3D"]
shape = SubResource("ConvexPolygonShape3D_xlp04")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="Ramp Outer Corner"]
navigation_mesh = SubResource("NavigationMesh_341ea")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ramp Outer Corner/NavigationRegion3D"]
mesh = ExtResource("4_vra4g")