56 lines
1.6 KiB
GDScript
56 lines
1.6 KiB
GDScript
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.5;
|
|
@export var randomLookMaxTime:float = 4.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
|