generated from SGDA/GodotExampleProject
feat: base
This commit is contained in:
100
addons/maaacks_menus_template/base/scenes/opening/opening.gd
Normal file
100
addons/maaacks_menus_template/base/scenes/opening/opening.gd
Normal file
@ -0,0 +1,100 @@
|
||||
extends Control
|
||||
|
||||
@export_file("*.tscn") var next_scene : String
|
||||
@export var images : Array[Texture2D]
|
||||
@export_group("Animation")
|
||||
@export var fade_in_time : float = 0.2
|
||||
@export var fade_out_time : float = 0.2
|
||||
@export var visible_time : float = 1.6
|
||||
@export_group("Transition")
|
||||
@export var start_delay : float = 0.5
|
||||
@export var end_delay : float = 0.5
|
||||
@export var show_loading_screen : bool = false
|
||||
|
||||
var tween : Tween
|
||||
var next_image_index : int = 0
|
||||
|
||||
func _load_next_scene() -> void:
|
||||
var status = SceneLoader.get_status()
|
||||
if show_loading_screen or status != ResourceLoader.THREAD_LOAD_LOADED:
|
||||
SceneLoader.change_scene_to_loading_screen()
|
||||
else:
|
||||
SceneLoader.change_scene_to_resource()
|
||||
|
||||
func _add_textures_to_container(textures : Array[Texture2D]) -> void:
|
||||
for texture in textures:
|
||||
var texture_rect : TextureRect = TextureRect.new()
|
||||
texture_rect.texture = texture
|
||||
texture_rect.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
texture_rect.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
texture_rect.modulate.a = 0.0
|
||||
%ImagesContainer.call_deferred("add_child", texture_rect)
|
||||
|
||||
func _event_skips_image(event : InputEvent) -> bool:
|
||||
return event.is_action_released(&"ui_accept") or event.is_action_released(&"ui_select")
|
||||
|
||||
func _event_skips_intro(event : InputEvent) -> bool:
|
||||
return event.is_action_released(&"ui_cancel")
|
||||
|
||||
func _event_is_mouse_button_released(event : InputEvent) -> bool:
|
||||
return event is InputEventMouseButton and not event.is_pressed()
|
||||
|
||||
func _unhandled_input(event : InputEvent) -> void:
|
||||
if _event_skips_intro(event):
|
||||
_load_next_scene()
|
||||
elif _event_skips_image(event):
|
||||
_show_next_image(false)
|
||||
|
||||
func _gui_input(event : InputEvent) -> void:
|
||||
if _event_is_mouse_button_released(event):
|
||||
_show_next_image(false)
|
||||
|
||||
func _transition_out() -> void:
|
||||
await get_tree().create_timer(end_delay).timeout
|
||||
_load_next_scene()
|
||||
|
||||
func _transition_in() -> void:
|
||||
await get_tree().create_timer(start_delay).timeout
|
||||
if next_image_index == 0:
|
||||
_show_next_image()
|
||||
|
||||
func _wait_and_fade_out(texture_rect : TextureRect) -> void:
|
||||
var _compare_next_index = next_image_index
|
||||
await get_tree().create_timer(visible_time, false).timeout
|
||||
if _compare_next_index != next_image_index : return
|
||||
tween = create_tween()
|
||||
tween.tween_property(texture_rect, "modulate:a", 0.0, fade_out_time)
|
||||
await tween.finished
|
||||
_show_next_image.call_deferred()
|
||||
|
||||
func _hide_previous_image() -> void:
|
||||
if tween and tween.is_running():
|
||||
tween.stop()
|
||||
if %ImagesContainer.get_child_count() == 0:
|
||||
return
|
||||
var current_image = %ImagesContainer.get_child(next_image_index - 1)
|
||||
if current_image:
|
||||
current_image.modulate.a = 0.0
|
||||
|
||||
func _show_next_image(animated : bool = true) -> void:
|
||||
_hide_previous_image()
|
||||
if next_image_index >= %ImagesContainer.get_child_count():
|
||||
if animated:
|
||||
_transition_out()
|
||||
else:
|
||||
_load_next_scene()
|
||||
return
|
||||
var texture_rect = %ImagesContainer.get_child(next_image_index)
|
||||
if animated:
|
||||
tween = create_tween()
|
||||
tween.tween_property(texture_rect, "modulate:a", 1.0, fade_in_time)
|
||||
await tween.finished
|
||||
else:
|
||||
texture_rect.modulate.a = 1.0
|
||||
next_image_index += 1
|
||||
_wait_and_fade_out(texture_rect)
|
||||
|
||||
func _ready() -> void:
|
||||
SceneLoader.load_scene(next_scene, true)
|
||||
_add_textures_to_container(images)
|
||||
_transition_in()
|
@ -0,0 +1 @@
|
||||
uid://dtco0s8byckx6
|
@ -0,0 +1,27 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://sikc02ddepyt"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dtco0s8byckx6" path="res://addons/maaacks_menus_template/base/scenes/opening/opening.gd" id="1_fcjph"]
|
||||
|
||||
[node name="Opening" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_fcjph")
|
||||
next_scene = "res://addons/maaacks_menus_template/base/scenes/menus/main_menu/main_menu.tscn"
|
||||
|
||||
[node name="BackgroundMusicPlayer" type="AudioStreamPlayer" parent="."]
|
||||
process_mode = 3
|
||||
autoplay = true
|
||||
bus = &"Music"
|
||||
|
||||
[node name="ImagesContainer" type="MarginContainer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
Reference in New Issue
Block a user