This commit is contained in:
E250429F
2026-09-17 23:19:43 +02:00
parent 025a866eef
commit 3e857fa9f3
281 changed files with 38006 additions and 970 deletions
+25 -9
View File
@@ -1,11 +1,14 @@
extends CharacterBody3D
@export var have_dialog : bool = false
@export var dialog : String = ""
@export var alrdy_talking : bool = false
@export var can_wander : bool = false
@onready var sprite_label: Sprite3D = $Sprite3D
@onready var label: Label = $Sprite3D/SubViewport/Label
@onready var anim_player: AnimationPlayer = $character/AnimationPlayer
@onready var mesh: MeshInstance3D = $character/Root/Skeleton3D/characterMedium
# navigation
@export var dest_array:Array[Marker3D]
@@ -19,11 +22,21 @@ var cur_state : NPCSTATE
var cur_destination: Marker3D
var speed = 2
var first_time : bool = false
func _ready() -> void:
mesh.set_instance_shader_parameter("skin_index", randi_range(1, 16))
sprite_label.visible = false
if alrdy_talking:
await get_tree().create_timer( randf_range(1.0, 2.5) ).timeout
anim_player.play("RootAction")
if !first_time:
first_time = true
else:
await get_tree().create_timer( randf_range(1.0, 2.5) ).timeout
anim_player.play("talking")
if have_dialog:
anim_player.play("Idling")
if can_wander:
_set_state( NPCSTATE.IDLE )
@@ -35,10 +48,14 @@ func _set_state(new_state:NPCSTATE):
cur_state = new_state
match cur_state:
NPCSTATE.IDLE:
idle_timer.start( randf_range(1, 2) )
anim_player.play("RootAction", -1, 10)
if !first_time:
first_time = true
idle_timer.start( 0 )
else:
idle_timer.start( randf_range(10, 20) )
anim_player.play("Idling", -1, 1)
NPCSTATE.WALKING:
anim_player.play("RootAction_001", -1, 2.5)
anim_player.play("walking", -1, randf_range(2, 2.5) )
func _physics_process(delta: float) -> void:
@@ -66,12 +83,11 @@ func decide_next_state():
func _on_area_3d_body_entered(body: Node3D) -> void:
if have_dialog and body.is_in_group("player"):
sprite_label.visible = true
label.text = dialog
body.set_dialog_mode( global_position )
func _on_area_3d_body_exited(body: Node3D) -> void:
if have_dialog and body.is_in_group("player"):
await get_tree().create_timer( 3 ).timeout
body.set_dialog_mode( )
sprite_label.visible = false
body.set_dialog_mode()
func _on_navigation_agent_3d_navigation_finished() -> void: