Initial commit

This commit is contained in:
2024-02-08 22:16:58 +01:00
commit 89e97a200c
524 changed files with 15626 additions and 0 deletions

54
scenes/characters/Npc.gd Normal file
View File

@@ -0,0 +1,54 @@
extends Area2D
"""
It just wraps around a sequence of dialogs. If it contains a child node named 'Quest'
which should be an instance of Quest.gd it'll become a quest giver and show whatever
text Quest.process() returns
"""
var active = false
@export var character_name: String = "Nameless NPC"
@export var dialogs = ["..."] # (Array, String, MULTILINE)
var current_dialog = 0
# Called when the node enters the scene tree for the first time.
func _ready():
randomize()
# warning-ignore:return_value_discarded
body_entered.connect(_on_body_entered)
# warning-ignore:return_value_discarded
body_exited.connect(_on_body_exited)
pass # Replace with function body.
func _input(event):
# Bail if npc not active (player not inside the collider)
if not active:
return
# Bail if Dialogs singleton is showing another dialog
if Dialogs.active:
return
# Bail if the event is not a pressed "interact" action
if not event.is_action_pressed("interact"):
return
# If the character is a questgiver delegate getting the text
# to the Quest node, show it and end the function
if has_node("Quest"):
var quest_dialog = get_node("Quest").process()
if quest_dialog != "":
Dialogs.show_dialog(quest_dialog, character_name)
return
# If we reached here and there are generic dialogs to show, rotate among them
if not dialogs.is_empty():
Dialogs.show_dialog(dialogs[current_dialog], character_name)
current_dialog = wrapi(current_dialog + 1, 0, dialogs.size())
func _on_body_entered(body):
if body is Player:
active = true
func _on_body_exited(body):
if body is Player:
active = false