add new transaction and add splash screen
This commit is contained in:
@@ -42,10 +42,12 @@ func _ready() -> void:
|
||||
choo_choo_button.pressed.connect(_on_choo_choo_button_pressed)
|
||||
resume_button.pressed.connect(_on_resume_button_pressed)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
if time_label and dist_label and GameState.is_loaded:
|
||||
var time = GameState.save_data.total_time_played_seconds
|
||||
@warning_ignore("integer_division")
|
||||
var hours = int(time) / 3600
|
||||
@warning_ignore("integer_division")
|
||||
var minutes = (int(time) % 3600) / 60
|
||||
var seconds = int(time) % 60
|
||||
time_label.text = "Travel Time: %02d:%02d:%02d" % [hours, minutes, seconds]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class_name SceneConfig
|
||||
extends Resource
|
||||
|
||||
enum SceneName { MAIN_MENU, GAME }
|
||||
enum SceneName { MAIN_MENU, GAME, SPLASH_SCREEN }
|
||||
|
||||
@export var scenes: Dictionary[SceneName, PackedScene]
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
[ext_resource type="PackedScene" uid="uid://btcpge7cj2041" path="res://core/main_menu/main_menu.tscn" id="1_72aup"]
|
||||
[ext_resource type="Script" uid="uid://bbgyhmb8a17i7" path="res://core/scene_manager/scene_config.gd" id="1_km45g"]
|
||||
[ext_resource type="PackedScene" uid="uid://vjf4bdxd8saj" path="res://tgcc/main_scene.tscn" id="2_prsyo"]
|
||||
[ext_resource type="PackedScene" uid="uid://ri5kxx4mipo" path="res://core/splash_screen/splash_screen.tscn" id="3_aasbo"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_km45g")
|
||||
scenes = Dictionary[int, PackedScene]({
|
||||
0: ExtResource("1_72aup"),
|
||||
1: ExtResource("2_prsyo")
|
||||
1: ExtResource("2_prsyo"),
|
||||
2: ExtResource("3_aasbo")
|
||||
})
|
||||
metadata/_custom_type_script = "uid://bbgyhmb8a17i7"
|
||||
|
||||
@@ -4,12 +4,74 @@ extends CanvasLayer
|
||||
@onready var color_rect = $ColorRect
|
||||
@onready var loading_screen = $LoadingScreen
|
||||
@export var transition_duration: float = 1
|
||||
|
||||
const SHADER_PATH := "res://core/transition.gdshader"
|
||||
|
||||
func _ready() -> void:
|
||||
color_rect.color.a = 0.0
|
||||
color_rect.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
loading_screen.hide()
|
||||
_build_material()
|
||||
_update_resolution()
|
||||
get_viewport().size_changed.connect(_update_resolution)
|
||||
_set_factor(0.0)
|
||||
color_rect.visible = false
|
||||
|
||||
func _build_material() -> void:
|
||||
var mat := ShaderMaterial.new()
|
||||
mat.shader = load(SHADER_PATH)
|
||||
|
||||
#directional gradient: botto-left-> black; top-right -> white
|
||||
var g := Gradient.new()
|
||||
g.set_color(0, Color.BLACK)
|
||||
g.set_color(1, Color.WHITE)
|
||||
var grad_tex := GradientTexture2D.new()
|
||||
grad_tex.gradient = g
|
||||
grad_tex.fill = GradientTexture2D.FILL_LINEAR
|
||||
grad_tex.fill_from = Vector2(0.0, 1.0) # bottom-left
|
||||
grad_tex.fill_to = Vector2(1.0, 0.0) # top-right
|
||||
grad_tex.width = 256
|
||||
grad_tex.height = 256
|
||||
|
||||
#shape: sphere (white at the center, black around)
|
||||
var sg := Gradient.new()
|
||||
sg.set_color(0, Color.WHITE)
|
||||
sg.set_color(1, Color.BLACK)
|
||||
var shape_tex := GradientTexture2D.new()
|
||||
shape_tex.gradient = sg
|
||||
shape_tex.fill = GradientTexture2D.FILL_RADIAL
|
||||
shape_tex.fill_from = Vector2(0.5, 0.5) # center
|
||||
shape_tex.fill_to = Vector2(0.5, 0.0) # ray
|
||||
shape_tex.width = 64
|
||||
shape_tex.height = 64
|
||||
|
||||
mat.set_shader_parameter("base_color", Color.BLACK)
|
||||
mat.set_shader_parameter("gradient_texture", grad_tex)
|
||||
mat.set_shader_parameter("gradient_fixed", false)
|
||||
mat.set_shader_parameter("shape_texture", shape_tex)
|
||||
mat.set_shader_parameter("shape_tiling", 16.0)
|
||||
mat.set_shader_parameter("shape_rotation", 0.0)
|
||||
mat.set_shader_parameter("shape_scroll", Vector2.ZERO)
|
||||
mat.set_shader_parameter("shape_feathering", 0.0)
|
||||
mat.set_shader_parameter("shape_treshold", 1.15) # >1 = full at the end of the transation
|
||||
mat.set_shader_parameter("width", 0.5)
|
||||
|
||||
color_rect.material = mat
|
||||
|
||||
func _update_resolution() -> void:
|
||||
var s := get_viewport().get_visible_rect().size
|
||||
color_rect.material.set_shader_parameter("node_resolution", s)
|
||||
|
||||
func _set_factor(v: float) -> void:
|
||||
color_rect.material.set_shader_parameter("factor", v)
|
||||
|
||||
func cover(duration := 0.5) -> void:
|
||||
color_rect.visible = true
|
||||
var t := create_tween()
|
||||
t.tween_method(_set_factor, 0.0, 1.0, duration)
|
||||
await t.finished
|
||||
|
||||
func reveal(duration := 0.5) -> void:
|
||||
var t := create_tween()
|
||||
t.tween_method(_set_factor, 1.0, 0.0, duration)
|
||||
await t.finished
|
||||
color_rect.visible = false
|
||||
|
||||
func change_scene(scene_enum: SceneConfig.SceneName) -> void:
|
||||
if not config or not config.scenes.has(scene_enum):
|
||||
@@ -19,26 +81,8 @@ func change_scene(scene_enum: SceneConfig.SceneName) -> void:
|
||||
|
||||
color_rect.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
|
||||
var tween_in = create_tween()
|
||||
tween_in.tween_property(color_rect, "color:a", 1.0, transition_duration)
|
||||
await tween_in.finished
|
||||
|
||||
loading_screen.show()
|
||||
await get_tree().process_frame
|
||||
|
||||
await cover(transition_duration)
|
||||
get_tree().change_scene_to_packed(target_scene)
|
||||
|
||||
loading_screen.hide()
|
||||
|
||||
var tween_out = create_tween()
|
||||
tween_out.tween_property(color_rect, "color:a", 0.0, transition_duration)
|
||||
await tween_out.finished
|
||||
await reveal(transition_duration)
|
||||
|
||||
color_rect.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
|
||||
func quit_game() -> void:
|
||||
color_rect.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
var tween = create_tween()
|
||||
tween.tween_property(color_rect, "color:a", 1.0, transition_duration)
|
||||
await tween.finished
|
||||
get_tree().quit()
|
||||
|
||||
BIN
core/splash_screen/jmp_logo.png
Normal file
BIN
core/splash_screen/jmp_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 124 KiB |
40
core/splash_screen/jmp_logo.png.import
Normal file
40
core/splash_screen/jmp_logo.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dp3qxncy8u184"
|
||||
path="res://.godot/imported/jmp_logo.png-c6094efb2c4c429c25ff79b5a4cee21c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://core/splash_screen/jmp_logo.png"
|
||||
dest_files=["res://.godot/imported/jmp_logo.png-c6094efb2c4c429c25ff79b5a4cee21c.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
8
core/splash_screen/splash_screen.gd
Normal file
8
core/splash_screen/splash_screen.gd
Normal file
@@ -0,0 +1,8 @@
|
||||
extends Control
|
||||
|
||||
@export var main_menu_scene: PackedScene
|
||||
@export var display_time: float = 3.0
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(display_time).timeout
|
||||
SceneManager.change_scene(SceneConfig.SceneName.MAIN_MENU)
|
||||
1
core/splash_screen/splash_screen.gd.uid
Normal file
1
core/splash_screen/splash_screen.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ckj2pcoxi5j3
|
||||
18
core/splash_screen/splash_screen.tscn
Normal file
18
core/splash_screen/splash_screen.tscn
Normal file
@@ -0,0 +1,18 @@
|
||||
[gd_scene format=3 uid="uid://ri5kxx4mipo"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ckj2pcoxi5j3" path="res://core/splash_screen/splash_screen.gd" id="1_elsnp"]
|
||||
[ext_resource type="Texture2D" uid="uid://dp3qxncy8u184" path="res://core/splash_screen/jmp_logo.png" id="1_jkpgl"]
|
||||
|
||||
[node name="Control" type="Control" unique_id=163470013]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_elsnp")
|
||||
|
||||
[node name="JMPLogo" type="Sprite2D" parent="." unique_id=1244888940]
|
||||
position = Vector2(980.99994, 556)
|
||||
scale = Vector2(0.37799045, 0.37799042)
|
||||
texture = ExtResource("1_jkpgl")
|
||||
@@ -11,7 +11,7 @@ config_version=5
|
||||
[application]
|
||||
|
||||
config/name="tgcc"
|
||||
run/main_scene="uid://vjf4bdxd8saj"
|
||||
run/main_scene="uid://ri5kxx4mipo"
|
||||
config/features=PackedStringArray("4.6", "Forward Plus")
|
||||
run/max_fps=60
|
||||
config/icon="uid://bfar1kk3pgq8f"
|
||||
|
||||
@@ -251,9 +251,9 @@ wagon_pool = ExtResource("46_exdk1")
|
||||
wagon_count = 5
|
||||
wagon_gap = 0.8
|
||||
wagon_spacing_scale = 0.9
|
||||
cameras = NodePath("../cameras")
|
||||
sleepers_model = ExtResource("46_lbmv2")
|
||||
fireworks_scene = ExtResource("47_q7p65")
|
||||
cameras = NodePath("../cameras")
|
||||
|
||||
[node name="Marker3D" type="Marker3D" parent="rail" unique_id=1460318018]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.7581053, -1.6046681, 59.658325)
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user