diff --git a/scenes/TestScene.tscn b/scenes/TestScene.tscn index 289793d..953b9a2 100644 --- a/scenes/TestScene.tscn +++ b/scenes/TestScene.tscn @@ -38,11 +38,10 @@ point_count = 2 [node name="Player" parent="." instance=ExtResource("2_rlkm5")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.06402, 1.54702, -2.35884) -[node name="NPC" parent="." node_paths=PackedStringArray("interactCamera") instance=ExtResource("4_nb1wl")] +[node name="NPC" parent="." instance=ExtResource("4_nb1wl")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.20455, 1.94676, -3.51349) interactType = 1 interactTexts = Array[String](["test"]) -interactCamera = NodePath("../TestChatCamera") [node name="Camera3D" type="Camera3D" parent="." node_paths=PackedStringArray("targetFollow", "pathFollow", "pathMap")] transform = Transform3D(0.996991, 0.0418507, -0.0652558, 0, 0.841762, 0.539849, 0.0775229, -0.538225, 0.839228, 1.25757, 8.21861, 8.01254) @@ -53,10 +52,6 @@ pathFollow = NodePath("../PathCamera/PathFollow3D") pathMap = NodePath("../PathWorld") metadata/_custom_type_script = "uid://csb0i132lcu0w" -[node name="TestChatCamera" type="Camera3D" parent="."] -transform = Transform3D(0.854722, 0.231437, -0.464637, 0, 0.895106, 0.445854, 0.519087, -0.381081, 0.765066, -6.8472, 4.22457, 0.61366) -fov = 47.0 - [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_m5dm6") diff --git a/scripts/entities/NPC.gd b/scripts/entities/NPC.gd index bfa4041..37a7114 100644 --- a/scripts/entities/NPC.gd +++ b/scripts/entities/NPC.gd @@ -1,5 +1,7 @@ class_name NPC extends CharacterBody3D +const CONVERSATION_FADE_DURATION:float = 0.3 + enum InteractType { NONE, TEXTBOX, @@ -43,6 +45,7 @@ func lookAtPlayer() -> void: func showTexts(): TRANSITION.fadeOutStart.disconnect(showTexts) + TRANSITION.fadeInEnd.disconnect(showTexts) # Any texts? if interactTexts.size() == 0: @@ -59,7 +62,7 @@ func endTexts(): # Do we fade out the camera? if interactCamera: - TRANSITION.fade(TRANSITION.FadeType.FADE_OUT) + TRANSITION.fade(TRANSITION.FadeType.FADE_OUT, CONVERSATION_FADE_DURATION) TRANSITION.fadeOutEnd.connect(onFadeOutEnd) return @@ -67,6 +70,7 @@ func endTexts(): if previousCamera: previousCamera.current = true previousCamera = null + PAUSE.cutsceneResume() func _enter_tree() -> void: $InteractableArea.interactEvent.connect(onInteract) @@ -95,12 +99,13 @@ func onInteract(playerEntity:Player) -> void: PAUSE.cutscenePause() # If a camera is set, switch to it, otherwise chat immediately. - if !interactCamera: + if interactCamera == null: + lookAtPlayer() showTexts() return # Fade out. - TRANSITION.fade(TRANSITION.FadeType.FADE_OUT) + TRANSITION.fade(TRANSITION.FadeType.FADE_OUT, CONVERSATION_FADE_DURATION) TRANSITION.fadeOutEnd.connect(onFadeOutEnd) InteractType.CUTSCENE: @@ -123,7 +128,7 @@ func onTextboxClosing() -> void: func onFadeOutEnd() -> void: # Begin fade back in. TRANSITION.fadeOutEnd.disconnect(onFadeOutEnd) - TRANSITION.fade(TRANSITION.FadeType.FADE_IN) + TRANSITION.fade(TRANSITION.FadeType.FADE_IN, CONVERSATION_FADE_DURATION) TRANSITION.fadeInEnd.connect(onFadeInEnd) # Is the conversation ending?