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
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
|