implement #144 scrolling support for mouse input
This commit is contained in:
parent
ecc1d4af9c
commit
6115eb6438
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue