You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.2 KiB

6 months ago
extends RefCounted
class_name DialogicManualAdvance
## This class holds the settings for the Manual-Advance feature.
## Changing the variables will alter the behaviour of manually advancing
## the timeline, e.g. using the input action.
## The key giving access to the state info of Manual-Advance.
const STATE_INFO_KEY := "manual_advance"
## The key for the enabled state in the current state info.
const ENABLED_STATE_KEY := "enabled"
## The key for the temporary event state in the current state info.
const DISABLED_UNTIL_NEXT_EVENT_STATE_KEY := "temp_disabled"
## If `true`, Manual-Advance will be deactivated until the next event.
##
## Use this flag to create a temporary Manual-Advance block.
##
## Overrides [variable system_enabled] when true.
var disabled_until_next_event := false :
set(enabled):
disabled_until_next_event = enabled
DialogicUtil.autoload().current_state_info[STATE_INFO_KEY][DISABLED_UNTIL_NEXT_EVENT_STATE_KEY] = enabled
## If `true`, Manual-Advance will stay enabled until this is set to `false`.
##
## Use this flag to activate or disable Manual-Advance mode.
##
## Can be temporarily overwritten by [variable disabled_until_next_event].
var system_enabled := true :
set(enabled):
system_enabled = enabled
DialogicUtil.autoload().current_state_info[STATE_INFO_KEY][ENABLED_STATE_KEY] = enabled
## Checks if the current state info has the Manual-Advance settings.
## If not, populates the current state info with the default settings.
func _init() -> void:
if DialogicUtil.autoload().current_state_info.has(STATE_INFO_KEY):
var state_info := DialogicUtil.autoload().current_state_info
var manual_advance: Dictionary = state_info[STATE_INFO_KEY]
disabled_until_next_event = manual_advance.get(DISABLED_UNTIL_NEXT_EVENT_STATE_KEY, disabled_until_next_event)
system_enabled = manual_advance.get(ENABLED_STATE_KEY, system_enabled)
else:
DialogicUtil.autoload().current_state_info[STATE_INFO_KEY] = {
ENABLED_STATE_KEY: system_enabled,
DISABLED_UNTIL_NEXT_EVENT_STATE_KEY: disabled_until_next_event,
}
#region MANUAL ADVANCE HELPERS
## Whether the player can use Manual-Advance to advance the timeline.
func is_enabled() -> bool:
return system_enabled and not disabled_until_next_event
#endregion