Compare commits

..

2 Commits

Author SHA1 Message Date
65b0b39da3 NPC interraction and dialog receiver 2025-06-15 22:57:45 -07:00
f17b1f7402 setup NPC dialog interractable 2025-06-15 22:36:00 -07:00
9 changed files with 121 additions and 5 deletions

View File

@ -34,7 +34,7 @@ animations = [ {
"speed": 8.0
}, {
"frames": [ ExtResource( 8 ), ExtResource( 19 ), ExtResource( 5 ), ExtResource( 12 ), ExtResource( 17 ), ExtResource( 12 ), ExtResource( 17 ), ExtResource( 12 ), ExtResource( 5 ), ExtResource( 19 ), ExtResource( 19 ), ExtResource( 8 ) ],
"loop": true,
"loop": false,
"name": "draw_sword",
"speed": 8.0
}, {

View File

@ -66,8 +66,13 @@ func process_physics(delta):
physics_delta = delta
if has_method('_state_process_physics_' + current_state.name):
call('_state_process_physics_' + current_state.name)
# else:
# move_actor_as_desired()
else:
apply_movement_to_parent(
velocity_controller.calculate_velocity(
physics_delta ,
apply_state_modifier(current_state.get_movement_parameters()),
Vector2(0,1) )
)
# more likely needed for Players
func process_physics_input(delta):

View File

@ -54,6 +54,11 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://lib/templates/Interactable/Interactable.gd"
}, {
"base": "Interactable",
"class": "Interactable_NPC_Dialog",
"language": "GDScript",
"path": "res://src/Interactables/interactable_npc_dialog.gd"
}, {
"base": "Node",
"class": "Interactable_Receiver",
"language": "GDScript",
@ -184,6 +189,7 @@ _global_script_class_icons={
"HealthComponent": "",
"HealthPickup": "",
"Interactable": "",
"Interactable_NPC_Dialog": "",
"Interactable_Receiver": "",
"InventoryManager": "",
"Item": "",

View File

@ -0,0 +1,18 @@
class_name Interactable_NPC_Dialog
extends Interactable
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
export (String) var dialog_text
export (bool) var auto_start = false
# 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):
# pass

View File

@ -0,0 +1,10 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://src/Interactables/interactable_npc_dialog.gd" type="Script" id=1]
[node name="NPC_Dialog" type="Area2D"]
collision_layer = 0
script = ExtResource( 1 )
[connection signal="body_entered" from="." to="." method="_on_Interactable_Component_body_entered"]
[connection signal="body_exited" from="." to="." method="_on_Interactable_Component_body_exited"]

View File

@ -0,0 +1,24 @@
extends Actor
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
# 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):
# pass
func _on_NPC_Dialog_body_entered(body):
movement_state_machine.change_to_known_state("draw_sword")
func _on_NPC_Dialog_body_exited(body):
movement_state_machine.change_to_known_state("default")

View File

@ -1,19 +1,27 @@
[gd_scene load_steps=5 format=2]
[gd_scene load_steps=9 format=2]
[ext_resource path="res://lib/parent_scenes/actor.tscn" type="PackedScene" id=1]
[ext_resource path="res://assets/actors/npcs/WarriorGirl/WarriorGirl.tres" type="SpriteFrames" id=2]
[ext_resource path="res://src/actors/npcs/default.tres" type="Resource" id=3]
[ext_resource path="res://src/Interactables/interactable_npc_dialog.tscn" type="PackedScene" id=4]
[ext_resource path="res://src/actors/npcs/WarriorGirl/WarriorGirl.gd" type="Script" id=5]
[ext_resource path="res://src/actors/npcs/draw_sword.tres" type="Resource" id=6]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 9, 14 )
[sub_resource type="CapsuleShape2D" id=2]
radius = 6.0
height = 58.0
[node name="WarriorGirl" instance=ExtResource( 1 )]
scale = Vector2( -1, 1 )
collision_layer = 0
script = ExtResource( 5 )
actor_type = "NPC"
[node name="Movement_StateMachine" parent="." index="0"]
states = [ ExtResource( 3 ) ]
states = [ ExtResource( 3 ), ExtResource( 6 ) ]
[node name="AnimatedSprite_StateReceiver" parent="." index="1"]
frames = ExtResource( 2 )
@ -22,3 +30,16 @@ playing = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="4"]
position = Vector2( -5, 6 )
shape = SubResource( 1 )
[node name="NPC_Dialog" parent="." index="5" instance=ExtResource( 4 )]
collision_mask = 2
dialog_text = "Hello, I am a human."
[node name="CollisionShape2D" type="CollisionShape2D" parent="NPC_Dialog" index="0"]
modulate = Color( 0, 1, 0, 1 )
position = Vector2( -5, 6 )
rotation = 1.5708
shape = SubResource( 2 )
[connection signal="body_entered" from="NPC_Dialog" to="." method="_on_NPC_Dialog_body_entered"]
[connection signal="body_exited" from="NPC_Dialog" to="." method="_on_NPC_Dialog_body_exited"]

View File

@ -0,0 +1,29 @@
[gd_resource type="Resource" load_steps=2 format=2]
[ext_resource path="res://lib/classes/state_animated_actor.gd" type="Script" id=1]
[resource]
resource_local_to_scene = true
script = ExtResource( 1 )
debug_state = false
timeout_seconds = 0.0
name = "draw_sword"
speed_start = Vector2( 1.36422e-12, 1.36422e-12 )
speed_end = Vector2( 0, 1000 )
min_acceleration = Vector2( 0, 0 )
acceleration = Vector2( 0, 280 )
max_acceleration = Vector2( 0, 0 )
jerk_factor = Vector2( 1, 1 )
horizontal_speed = 1.36422e-12
horizontal_acceleration = 300.0
horizontal_speed_offset = 0.0
horizontal_speed_offset_acceleration = 0.0
vertical_speed = 0.0
vertical_acceleration = 0.0
vertical_speed_offset = 0.0
vertical_speed_offset_acceleration = 0.0
horizontal_jerk_factor = 1.0
vertical_jerk_factor = 1.0
preserve_inertia = true
is_grounded = true
animation_sequence = [ "draw_sword", "default" ]

View File

@ -144,6 +144,9 @@ func touch_the_thing(the_thing: Interactable) -> bool:
player_inventory.add_to_inventory(the_thing.item, the_thing.count)
#player_inventory.select_secondary(the_thing.item)
the_thing.trigger_interaction()
if the_thing is Interactable_NPC_Dialog:
## Get this to the UI mananger
print("NPC wants to say: ",the_thing.dialog_text)
return true