refactor
This commit is contained in:
39
systems/npc_system.gd
Normal file
39
systems/npc_system.gd
Normal file
@@ -0,0 +1,39 @@
|
||||
extends Node
|
||||
|
||||
const NPC_SCENE: PackedScene = preload("res://scenes/entities/npc/npc.tscn")
|
||||
|
||||
func _npc_root() -> Node3D:
|
||||
var n: Node = get_node_or_null("/root/World/EntityRoot/Npcs")
|
||||
return n
|
||||
|
||||
func spawn_default_npcs() -> void:
|
||||
var root := _npc_root()
|
||||
if root == null:
|
||||
return
|
||||
var profiles: Array = [
|
||||
_make_profile(&"barkeep", "Brena", "Barkeep at the Crooked Wheel tavern.", "Warm, gossipy, has lived here her whole life."),
|
||||
_make_profile(&"smith", "Halvor", "Village blacksmith. Lost an eye to a portal monster.", "Gruff, terse, cares deeply for the village."),
|
||||
_make_profile(&"sage", "Eyrie", "Village sage. Reads the portals, claims to remember the time before.", "Cryptic, slow-spoken, weary."),
|
||||
_make_profile(&"farmer", "Rolf", "Tends the small fields east of the village.", "Anxious, practical, wants the wars to end."),
|
||||
]
|
||||
var radius: float = 6.0
|
||||
for i in range(profiles.size()):
|
||||
var angle: float = float(i) * TAU / float(profiles.size()) + 0.3
|
||||
var pos := Vector3(cos(angle) * radius, 0.0, sin(angle) * radius)
|
||||
var npc: StaticBody3D = NPC_SCENE.instantiate()
|
||||
npc.profile = profiles[i]
|
||||
npc.profile_id = profiles[i].npc_id
|
||||
npc.name = "Npc_%s" % str(profiles[i].npc_id)
|
||||
root.add_child(npc, true)
|
||||
npc.global_position = pos
|
||||
|
||||
func _make_profile(id: StringName, name: String, lore: String, pers: String) -> NpcProfile:
|
||||
var p := NpcProfile.new()
|
||||
p.npc_id = id
|
||||
p.display_name = name
|
||||
p.lore = lore
|
||||
p.personality = pers
|
||||
p.fallback_text = "..."
|
||||
p.greeting = "Hallo, Reisender."
|
||||
p.color = Color(0.55 + randf() * 0.35, 0.5 + randf() * 0.3, 0.4 + randf() * 0.3)
|
||||
return p
|
||||
Reference in New Issue
Block a user