This commit is contained in:
2025-11-28 15:55:42 -06:00
parent 5573ad815f
commit 5805ac2260
9 changed files with 64 additions and 33 deletions

View File

@@ -1,9 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://bhvoo48bpbkf3"]
[ext_resource type="PackedScene" uid="uid://d3rtd0ln7l2gr" path="res://scenes/maps/MapTundra.tscn" id="1_fsb0j"]
[node name="CutsceneTest" type="Node3D"]
[node name="MapTundra" parent="." instance=ExtResource("1_fsb0j")]
[node name="Camera3D" type="Camera3D" parent="."]

View File

@@ -2,28 +2,33 @@
class_name NPC extends CharacterBody3D class_name NPC extends CharacterBody3D
@export var _movement:NPCMovement @export var _movement:NPCMovement
@export var _interact:NPCInteract
@export var walkSpeed:float = 48.0: # NPC Movement Accessors
@export var walkSpeed:float:
set(value): set(value):
if _movement: if _movement:
_movement.walkSpeed = value _movement.walkSpeed = value
get: get:
if _movement: if _movement:
return _movement.walkSpeed return _movement.walkSpeed
return 48.0 return 0
@export var runSpeed:float = 64.0: @export var runSpeed:float:
set(value): set(value):
if _movement: if _movement:
_movement.runSpeed = value _movement.runSpeed = value
get: get:
if _movement: if _movement:
return _movement.runSpeed return _movement.runSpeed
return 64.0 return 0
func onInteract(player:Player) -> void: # NPC Interact Accessors
UI.TEXTBOX.setText("Hello, I'm an NPC!\nThis is the second line here, I am purposefully adding a tonne of words so that it is forced to go across multiple lines and you can see how the word wrapping works, not only using Godot's built in word wrapping but with my advanced visibile characters smart wrapping. Now I am doing a multiline thing\nLine 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8\nLine 9\nLine 10"); @export var interactType:NPCInteract.InteractType:
pass set(value):
if _interact:
func _enter_tree() -> void: _interact.interactType = value
pass get:
if _interact:
return _interact.interactType
return NPCInteract.InteractType.NONE

View File

@@ -1,8 +1,9 @@
[gd_scene load_steps=8 format=3 uid="uid://kabs7mopalmo"] [gd_scene load_steps=9 format=3 uid="uid://kabs7mopalmo"]
[ext_resource type="Script" uid="uid://crw7ls7t8cwct" path="res://entity/npc/NPC.gd" id="1_00k55"] [ext_resource type="Script" uid="uid://crw7ls7t8cwct" path="res://entity/npc/NPC.gd" id="1_00k55"]
[ext_resource type="Script" uid="uid://b00rxpveu3v4m" path="res://InteractableArea.gd" id="2_x8luf"] [ext_resource type="Script" uid="uid://b00rxpveu3v4m" path="res://InteractableArea.gd" id="2_x8luf"]
[ext_resource type="Script" uid="uid://tlfthv88ki0y" path="res://entity/npc/NPCMovement.gd" id="3_1seh5"] [ext_resource type="Script" uid="uid://tlfthv88ki0y" path="res://entity/npc/NPCMovement.gd" id="3_1seh5"]
[ext_resource type="Script" uid="uid://dunhfgdwp8wjh" path="res://entity/npc/NPCInteract.gd" id="3_binvk"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_jphom"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_jphom"]
@@ -15,12 +16,12 @@ shading_mode = 0
[sub_resource type="CapsuleMesh" id="CapsuleMesh_jphom"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_jphom"]
material = SubResource("StandardMaterial3D_jphom") material = SubResource("StandardMaterial3D_jphom")
[node name="NPC" type="CharacterBody3D" node_paths=PackedStringArray("_movement")] [node name="NPC" type="CharacterBody3D" node_paths=PackedStringArray("_movement", "_interact")]
script = ExtResource("1_00k55") script = ExtResource("1_00k55")
facingDirection = null
walkSpeed = null
runSpeed = null
_movement = NodePath("Scripts/NPCMovement") _movement = NodePath("Scripts/NPCMovement")
_interact = NodePath("Scripts/NPCInteract")
walkSpeed = 8.0
runSpeed = 12.0
[node name="Scripts" type="Node" parent="."] [node name="Scripts" type="Node" parent="."]
@@ -28,6 +29,10 @@ _movement = NodePath("Scripts/NPCMovement")
script = ExtResource("3_1seh5") script = ExtResource("3_1seh5")
body = NodePath("../..") body = NodePath("../..")
[node name="NPCInteract" type="Node" parent="Scripts"]
script = ExtResource("3_binvk")
metadata/_custom_type_script = "uid://dunhfgdwp8wjh"
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_jphom") shape = SubResource("CapsuleShape3D_jphom")
@@ -45,4 +50,6 @@ shape = SubResource("BoxShape3D_jphom")
mesh = SubResource("CapsuleMesh_jphom") mesh = SubResource("CapsuleMesh_jphom")
skeleton = NodePath("../..") skeleton = NodePath("../..")
[connection signal="interactEvent" from="Rotate/InteractableArea" to="." method="onInteract"] [connection signal="interactEvent" from="Rotate/InteractableArea" to="Scripts/NPCInteract" method="onInteract"]
[connection signal="interactable" from="Rotate/InteractableArea" to="Scripts/NPCInteract" method="onInteractable"]
[connection signal="notInteractable" from="Rotate/InteractableArea" to="Scripts/NPCInteract" method="onNotInteractable"]

20
entity/npc/NPCInteract.gd Normal file
View File

@@ -0,0 +1,20 @@
@tool
class_name NPCInteract extends Node
enum InteractType {
NONE,
TEXT,
CUTSCENE
}
@export var interactType:InteractType = InteractType.NONE
func onInteract(player:Player) -> void:
print("NPC Interacted with by Player: %s" % player.name)
pass
func onInteractable(player:Player) -> void:
pass
func onNotInteractable(player:Player) -> void:
pass

View File

@@ -0,0 +1 @@
uid://dunhfgdwp8wjh

View File

@@ -3,20 +3,20 @@ class_name Player extends CharacterBody3D
@export var _movement:PlayerMovement @export var _movement:PlayerMovement
@export var walkSpeed:float = EntityMovement.WALK_SPEED_DEFAULT: @export var walkSpeed:float:
set(value): set(value):
if _movement: if _movement:
_movement.walkSpeed = value _movement.walkSpeed = value
get: get:
if _movement: if _movement:
return _movement.walkSpeed return _movement.walkSpeed
return EntityMovement.WALK_SPEED_DEFAULT return 0.0
@export var runSpeed:float = EntityMovement.RUN_SPEED_DEFAULT: @export var runSpeed:float:
set(value): set(value):
if _movement: if _movement:
_movement.runSpeed = value _movement.runSpeed = value
get: get:
if _movement: if _movement:
return _movement.runSpeed return _movement.runSpeed
return EntityMovement.RUN_SPEED_DEFAULT return 0.0

View File

@@ -11,9 +11,14 @@ script = ExtResource("1_6ms5s")
[node name="TestMapBase" parent="." instance=ExtResource("1_ox0si")] [node name="TestMapBase" parent="." instance=ExtResource("1_ox0si")]
[node name="Player" parent="." instance=ExtResource("2_0d2qr")] [node name="Player" parent="." instance=ExtResource("2_0d2qr")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.5777, 1.74123, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.5777, 1.09878, 0)
walkSpeed = 8.0
runSpeed = 12.0
[node name="NPC" parent="." instance=ExtResource("3_0vfw4")] [node name="NPC" parent="." instance=ExtResource("3_0vfw4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.3026, 1.9909, -2.12904) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.3026, 1.11551, -2.12904)
walkSpeed = 48.0 interactType = 1
runSpeed = 64.0
[node name="Meta" type="Node" parent="."]
[node name="Cutscenes" type="Node" parent="Meta"]

View File

@@ -19,4 +19,5 @@ PAUSE = NodePath("PauseMenu")
layout_mode = 1 layout_mode = 1
[node name="VNTextbox" parent="." instance=ExtResource("1_1mtk3")] [node name="VNTextbox" parent="." instance=ExtResource("1_1mtk3")]
visible = false
layout_mode = 1 layout_mode = 1

View File

@@ -16,6 +16,7 @@ MAIN = NodePath("PauseMain")
SETTINGS = NodePath("PauseSettings") SETTINGS = NodePath("PauseSettings")
[node name="PauseSettings" parent="." instance=ExtResource("2_3djnw")] [node name="PauseSettings" parent="." instance=ExtResource("2_3djnw")]
visible = false
layout_mode = 1 layout_mode = 1
[node name="PauseMain" parent="." instance=ExtResource("1_33nyv")] [node name="PauseMain" parent="." instance=ExtResource("1_33nyv")]