Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @tool
- extends DialogicLayoutLayer
- class_name AnimatedPortraitLayer
- ## A layer that allows showing 5 portraits, like in a visual novel.
- enum SPEAK_ANIM_STYLE {NONE, TRANSLATION, ROTATION}
- ## The canvas layer that the portraits are on.
- @export var portrait_size_mode := DialogicNode_PortraitContainer.SizeModes.FIT_SCALE_HEIGHT
- @export var anim_style := SPEAK_ANIM_STYLE.TRANSLATION
- var dialogic : DialogicGameHandler
- var last_connected = null
- var last_connected_finish = null
- func _ready():
- super()
- dialogic = DialogicUtil.autoload()
- if dialogic:
- dialogic.event_handled.connect(_on_event_handled)
- func _apply_export_overrides():
- # apply portrait size
- for child in %Portraits.get_children():
- child.size_mode = portrait_size_mode
- child.anim_style = anim_style
- child.update_portrait_transforms()
- func _on_event_handled(resource) -> void:
- var text_event := resource as DialogicTextEvent
- if last_connected != null && dialogic.continued_revealing_text.is_connected(last_connected):
- dialogic.continued_revealing_text.disconnect(last_connected)
- dialogic.finished_revealing_text.disconnect(last_connected_finish)
- if !text_event || !text_event.character:
- return
- var position_index : int = dialogic.current_state_info.portraits[text_event.character.resource_path].position_index
- var speaking_portrait : DialogicNode_PortraitContainer_Animated = %Portraits.get_children()[position_index] as DialogicNode_PortraitContainer_Animated
- if !speaking_portrait:
- return
- last_connected = speaking_portrait._on_continued_revealing_text
- last_connected_finish = speaking_portrait._on_finished_revealing_text
- dialogic.continued_revealing_text.connect(last_connected)
- dialogic.finished_revealing_text.connect(last_connected_finish)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement