Upload files to "/"
This commit is contained in:
parent
e1f512e30b
commit
8c3cb0871c
|
@ -0,0 +1,30 @@
|
|||
extends Camera3D
|
||||
@export var movespeed: float
|
||||
@export var rotatespeed: float
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
if Input.is_action_pressed("W"):
|
||||
self.position += global_transform.basis.y*movespeed*delta
|
||||
if Input.is_action_pressed("S"):
|
||||
self.position += global_transform.basis.y*-movespeed*delta
|
||||
if Input.is_action_pressed("A"):
|
||||
self.position += global_transform.basis.x*-movespeed*delta
|
||||
if Input.is_action_pressed("D"):
|
||||
self.position += global_transform.basis.x*movespeed*delta
|
||||
if Input.is_action_pressed("zoom in"):
|
||||
self.position += Vector3(0,-movespeed*delta,0)
|
||||
if Input.is_action_pressed("zoom out"):
|
||||
self.position += Vector3(0,movespeed*delta,0)
|
||||
|
||||
if Input.is_action_pressed("rotate right"):
|
||||
self.rotation += Vector3(0,-rotatespeed*delta,0)
|
||||
if Input.is_action_pressed("rotate left"):
|
||||
self.rotation += Vector3(0,rotatespeed*delta,0)
|
||||
|
||||
pass
|
|
@ -0,0 +1,95 @@
|
|||
extends CharacterBody3D
|
||||
|
||||
|
||||
@export var speed = 2
|
||||
@export var accel = 2
|
||||
@onready var nav: NavigationAgent3D = $NavigationAgent3D
|
||||
@export var cam: Camera3D
|
||||
@export var navres: NavigationRegion3D
|
||||
@export var block: PackedScene
|
||||
var canMove
|
||||
var current = 0
|
||||
var path: PackedVector3Array
|
||||
signal redid_navmesh
|
||||
var destroy: Array
|
||||
var rayOrigin= Vector3()
|
||||
var rayEnd= Vector3()
|
||||
var pathDone = true
|
||||
|
||||
func _ready():
|
||||
canMove = false
|
||||
destroy = Array()
|
||||
print("new drone!")
|
||||
|
||||
func _physics_process(delta):
|
||||
|
||||
|
||||
var direction = Vector3()
|
||||
|
||||
#if Input.is_action_just_pressed("left_click"):
|
||||
# _do_path(_click_intersect())
|
||||
|
||||
if Time.get_ticks_msec()> 20 && current < (path.size()-1) && canMove:
|
||||
var next = path[current+1]
|
||||
look_at(Vector3(next.x,global_position.y,next.z))
|
||||
direction = next - global_position
|
||||
direction = direction.normalized()
|
||||
velocity = velocity.lerp(direction*speed, accel * delta);
|
||||
if self.position.distance_to(next)<nav.path_desired_distance:
|
||||
current=current+1
|
||||
elif current == path.size()-1 && !pathDone:
|
||||
velocity = velocity*0
|
||||
cleanUp()
|
||||
pathDone = true
|
||||
await get_tree().create_timer(0.05).timeout
|
||||
#navres.bake_navigation_mesh()
|
||||
move_and_slide()
|
||||
|
||||
func _do_path(goal:Vector3):
|
||||
_coverPath(goal)
|
||||
navres.bake_navigation_mesh()
|
||||
current = 0
|
||||
pathDone = false
|
||||
|
||||
func _click_intersect():
|
||||
cleanUp()
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
var mouse_position = get_viewport().get_mouse_position()
|
||||
rayOrigin = cam.project_ray_origin(mouse_position)
|
||||
rayEnd = rayOrigin + cam.project_ray_normal(mouse_position)*2000
|
||||
var query = PhysicsRayQueryParameters3D.create(rayOrigin,rayEnd)
|
||||
var intersection = space_state.intersect_ray(query)
|
||||
|
||||
|
||||
if intersection.is_empty():
|
||||
intersection = get_global_position()
|
||||
print("nothing found")
|
||||
#else:
|
||||
#print (get_name())
|
||||
|
||||
|
||||
return intersection.position
|
||||
|
||||
func _coverPath(Target:Vector3): #generates navmesh obstacles where drone is going
|
||||
path = NavigationServer3D.map_get_path(get_world_3d().get_navigation_map(),global_position,Target,true)
|
||||
#for point in path:
|
||||
# var barrier = block.instantiate()
|
||||
# navres.add_child(barrier)
|
||||
# barrier.position=point
|
||||
# destroy.append(barrier)
|
||||
for n in (path.size()-1):
|
||||
var barrier = block.instantiate()
|
||||
navres.add_child(barrier)
|
||||
barrier.position=(path[n+1]-path[n])/2+path[n]
|
||||
barrier.scale=Vector3(barrier.scale.x,1,(path[n+1]-path[n]).length())
|
||||
barrier.look_at(path[n+1])
|
||||
destroy.append(barrier)
|
||||
|
||||
func cleanUp(): ##cleans navmesh obstacles
|
||||
for d in destroy:
|
||||
d.queue_free()
|
||||
destroy.clear()
|
||||
|
||||
|
||||
#func _on_navigation_agent_3d_navigation_finished():
|
||||
#cleanUp()
|
Binary file not shown.
|
@ -0,0 +1,33 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://dp41b4l8rtmd"]
|
||||
|
||||
[ext_resource type="Script" path="res://Navdrone.gd" id="1_8s1ap"]
|
||||
[ext_resource type="PackedScene" uid="uid://dyajrcmw1xovo" path="res://testbin.tscn" id="2_icho2"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://c63wm5ikugi4n" path="res://dmesho.obj" id="3_i17ly"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_414ve"]
|
||||
|
||||
[node name="Navdrone" type="CharacterBody3D"]
|
||||
transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2.048, 0)
|
||||
script = ExtResource("1_8s1ap")
|
||||
speed = 15
|
||||
block = ExtResource("2_icho2")
|
||||
|
||||
[node name="DroneMeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, -0.5, 0, 0, 0)
|
||||
mesh = ExtResource("3_i17ly")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("CapsuleShape3D_414ve")
|
||||
|
||||
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."]
|
||||
path_desired_distance = 3.0
|
||||
target_desired_distance = 3.0
|
||||
path_max_distance = 13.01
|
||||
avoidance_enabled = true
|
||||
time_horizon_agents = 4.46
|
||||
time_horizon_obstacles = 1.0
|
||||
max_speed = 2.0
|
||||
debug_enabled = true
|
||||
|
||||
[connection signal="navigation_finished" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_navigation_finished"]
|
||||
[connection signal="path_changed" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_path_changed"]
|
|
@ -0,0 +1,82 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="rtstest"
|
||||
run/main_scene="res://DronePather.tscn"
|
||||
config/features=PackedStringArray("4.1", "Mobile")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[filesystem]
|
||||
|
||||
import/fbx/enabled=false
|
||||
|
||||
[input]
|
||||
|
||||
left_click={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
right_click={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
W={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
A={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
S={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
D={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
"rotate left"={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
"rotate right"={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
"zoom in"={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
"zoom out"={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
renderer/rendering_method="gl_compatibility"
|
||||
textures/vram_compression/import_etc2_astc=true
|
Loading…
Reference in New Issue