implement #144 scrolling support for mouse input

This commit is contained in:
betalars 2025-05-07 19:30:55 +02:00
parent ecc1d4af9c
commit 6115eb6438
2 changed files with 53 additions and 3 deletions

View File

@ -22,6 +22,7 @@ var max_lines: float = 0
substring_sizes.append(TranslationServer.translate(str_array[i]).strip_edges().length() + 1) substring_sizes.append(TranslationServer.translate(str_array[i]).strip_edges().length() + 1)
if not paragraph_lengths[-1] == story_array.size()-1: if not paragraph_lengths[-1] == story_array.size()-1:
paragraph_lengths.append(story_array.size()-1) paragraph_lengths.append(story_array.size()-1)
push_warning("Paragraph lenghts of scene %s are misconfigured!" % name)
if paragraph_lengths[p] == i: if paragraph_lengths[p] == i:
p += 1 p += 1
label.text += "[/p][p][font_size=8] [/font_size][/p][p]" label.text += "[/p][p][font_size=8] [/font_size][/p][p]"
@ -29,12 +30,12 @@ var max_lines: float = 0
label.text += "[/p]" label.text += "[/p]"
max_lines = float(label.get_line_count()) max_lines = float(label.get_line_count())
@export var paragraph_lengths: PackedInt32Array = [] @export var paragraph_lengths: PackedInt32Array = [1]
@export var progress: float = 0: @export var progress: float = 0:
set(value): set(value):
progress = value progress = value
if is_node_ready(): if is_node_ready() and not all_text_revealed:
var start_index = 0 var start_index = 0
if progress >= substring_sizes.size() or progress < 0: if progress >= substring_sizes.size() or progress < 0:
label.visible_ratio = 1 label.visible_ratio = 1
@ -46,6 +47,19 @@ var max_lines: float = 0
else: else:
label.visible_ratio = 0 label.visible_ratio = 0
var all_text_revealed: bool = false:
set(revealed):
var reset_progress := false
if revealed and not all_text_revealed:
var tween: Tween = get_tree().create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.tween_property(label, "visible_ratio", 1, 1.5)
elif not revealed and all_text_revealed:
reset_progress = true
all_text_revealed = revealed
if all_text_revealed: progress = -1
if reset_progress: progress = 0
@export var test_scroll: bool: @export var test_scroll: bool:
set(scroll): set(scroll):
try_scroll() try_scroll()
@ -114,6 +128,7 @@ func play_scene():
trigger_intro() trigger_intro()
animation_complete = true animation_complete = true
all_text_revealed = true
skip_control.start_proceed_countdown() skip_control.start_proceed_countdown()
@ -125,6 +140,29 @@ func play_scene():
finished.emit() finished.emit()
func _unhandled_input(event: InputEvent) -> void:
var just_revealed_text = false
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
scroll_target += 40
if not all_text_revealed: just_revealed_text
all_text_revealed = true
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
scroll_target -= 40
if not all_text_revealed: just_revealed_text
all_text_revealed = true
if just_revealed_text:
if animation_complete: all_text_revealed = true
var scroll_target: float = 0:
set(value):
scroll_target = clampf(value, 0, label.size.y - scroll_container.size.y)
func _process(delta: float) -> void:
# FIXME: maybe change this to has stage?
if visible and not Engine.is_editor_hint():
if scroll_container.scroll_vertical != scroll_target:
scroll_container.scroll_vertical += (scroll_target-scroll_container.scroll_vertical)*delta*6
var intro_triggered:= false var intro_triggered:= false
func trigger_intro(): func trigger_intro():
if not intro_triggered: if not intro_triggered:

View File

@ -31,6 +31,17 @@ var proceeding: bool = false:
# while this is true, a counter counts up to automatically proceed. # while this is true, a counter counts up to automatically proceed.
var is_auto_proceeding: bool = true: var is_auto_proceeding: bool = true:
set(value): set(value):
if is_auto_proceeding and not value:
var tween = get_tree().create_tween()
tween.set_ease(Tween.EASE_IN)
tween.set_trans(Tween.TRANS_QUAD)
tween.tween_property(progress, "value", 0.0, 0.3)
time_pressed = 0
$AnimationPlayer.play("replace_text")
# use this to disable the updates during progress.
is_auto_proceeding = false
await _transition_text
button.text = "continue (press)"
is_auto_proceeding = value is_auto_proceeding = value
#resets progress bar on button #resets progress bar on button
@ -55,7 +66,7 @@ func _process(delta):
reset() reset()
func _unhandled_input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
if is_visible_in_tree(): if is_visible_in_tree():
if not event is InputEventMouseMotion and unrevealed: if not event is InputEventMouseMotion and unrevealed:
$AnimationPlayer.play("reveal_skip") $AnimationPlayer.play("reveal_skip")
@ -98,6 +109,7 @@ func transition_text():
func reset(): func reset():
$AnimationPlayer.play("RESET") $AnimationPlayer.play("RESET")
await(get_tree().create_timer(1).timeout)
unrevealed = true unrevealed = true
pressed = false pressed = false
proceeding = false proceeding = false