class_name BasicNPCEntity extends "res://scripts/Entities/OverworldEntity.gd" const Cutscene = preload("res://scripts/Cutscene/Cutscene.gd"); const OverworldConversationEvent = preload("res://scripts/Cutscene/Scene/OverworldConversationEvent.gd"); enum BasicNPCInteractType { NONE, CUTSCENE, TEXTS }; enum BasicNPCMoveType { STILL, RANDOM_LOOK }; @export var interactType:BasicNPCInteractType = BasicNPCInteractType.NONE; @export var interactCutscene:GDScript; @export var interactTexts:Array[String]; @export var moveType:BasicNPCMoveType = BasicNPCMoveType.STILL; @export var randomLookMinTime:float = 1.0; @export var randomLookMaxTime:float = 3.0; var randomLookTimer:float = 0.0; func interact(interactor:OverworldEntity) -> void: if interactType == BasicNPCInteractType.NONE: return if interactType == BasicNPCInteractType.CUTSCENE: # Cutscene in this manner must take two entities # (self, speaker, and interactor, player) var cs:Cutscene = interactCutscene.new(self, interactor); getSystems().CUTSCENE.setCurrentCutscene(cs); return if interactType == BasicNPCInteractType.TEXTS: var cs:Cutscene = OverworldConversationEvent.new(self, interactor, interactTexts); getSystems().CUTSCENE.setCurrentCutscene(cs); return pass func updateMovement(delta:float) -> void: if moveType == BasicNPCMoveType.STILL: return if moveType == BasicNPCMoveType.RANDOM_LOOK: randomLookTimer -= delta; if randomLookTimer <= 0: randomLookTimer = randf_range(randomLookMinTime, randomLookMaxTime); self.direction = randi_range(0, 3); return pass