114 lines
3.0 KiB
GDScript
114 lines
3.0 KiB
GDScript
class_name RPGH_Event, "res://addons/rpgh_engine/nodes/event/icon_event.svg"
|
|
extends Node
|
|
# This is the main class for interacting with the RPGH Engine's
|
|
# core system. Adds behaviour to the game.
|
|
|
|
signal triggered
|
|
|
|
export(bool) var auto_start = false
|
|
export(bool) var block_player = true
|
|
|
|
var map: RPGH_Map = RPGH.get_node("DataManager").current_map
|
|
var state setget _set_state, _get_state
|
|
|
|
var _state := Storable("State")
|
|
var _is_first_run := Storable("IsFirstRun", true)
|
|
|
|
|
|
func _ready():
|
|
if auto_start:
|
|
_run()
|
|
|
|
|
|
func is_first_run() -> bool:
|
|
return _is_first_run.value
|
|
|
|
|
|
# This function currently simply plays the event without further
|
|
# preparations or clean up. So that the event can be called
|
|
# within another one.
|
|
#
|
|
# TODO: automate this somehow please :pray:
|
|
func append():
|
|
var filtered_state_value = "default" if _state.value == null else _state.value
|
|
var func_state = call(filtered_state_value)
|
|
if func_state is GDScriptFunctionState:
|
|
yield(func_state, "completed")
|
|
_is_first_run.value = false
|
|
|
|
|
|
# --- INGAME_CAMERA -----------------------------------------------------------
|
|
|
|
|
|
func set_camera_setup(camera_setup):
|
|
RPGH.Camera.set_camera_setup(camera_setup)
|
|
|
|
|
|
func fade_over_camera_setup(camera_setup, duration, smooth = false):
|
|
RPGH.Camera.fade_over_camera_setup(camera_setup, duration, smooth)
|
|
|
|
|
|
func CameraSetup():
|
|
return RPGH.Camera.CameraSetup.new()
|
|
|
|
|
|
# --- UI_DIALOG ---------------------------------------------------------------
|
|
|
|
|
|
func textbox(id: String, left_bust: Texture = null, right_bust: Texture = null):
|
|
RPGH.Dialog.textbox(id, left_bust, right_bust)
|
|
|
|
|
|
func screen_text(id: String):
|
|
RPGH.Dialog.screen_text(id)
|
|
|
|
|
|
func close_textbox():
|
|
var func_state = RPGH.Dialog.close_textbox()
|
|
if func_state is GDScriptFunctionState:
|
|
yield(func_state, "completed")
|
|
if !block_player:
|
|
_enable_character_movement()
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
func _run():
|
|
emit_signal("triggered")
|
|
if block_player:
|
|
RPGH.Player._player_movement_disabled = true
|
|
RPGH.Player._player_interact_disabled = true
|
|
var filtered_state_value = "default" if _state.value == null else _state.value
|
|
var func_state = call(filtered_state_value)
|
|
if func_state is GDScriptFunctionState:
|
|
yield(func_state, "completed")
|
|
close_textbox()
|
|
_is_first_run.value = false
|
|
_enable_character_movement()
|
|
|
|
|
|
func _enable_character_movement():
|
|
RPGH.Player._player_movement_disabled = false
|
|
yield(RPGH.get_tree(), "physics_frame")
|
|
yield(RPGH.get_tree(), "physics_frame")
|
|
RPGH.Player._player_interact_disabled = false
|
|
|
|
|
|
func _set_state(new_state):
|
|
if !new_state is String:
|
|
push_error("State can only be set to string.")
|
|
return
|
|
_state.value = new_state
|
|
|
|
|
|
func _get_state():
|
|
return _state.value
|
|
|
|
|
|
# Just a fast wrapper for "storable.gd".
|
|
class RPGH_Storable:
|
|
extends "res://addons/rpgh_engine/data_management/storable.gd"
|
|
func _init(key: String, value = null, map = null, event = null).(key, value, map, event): pass
|
|
func Storable(key: String, value = null) -> RPGH_Storable:
|
|
return RPGH_Storable.new(name + key, value, map, self)
|