From 9ed6dd8b42f9952dee8e703bcf499d5639377a90 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Thu, 23 Nov 2023 02:29:12 +0800 Subject: [PATCH] =?UTF-8?q?loading=20=E5=8A=A8=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- render/shader/loading.gdshader | 23 +++++++++++++++++++++++ scene/ui/hud_screen.tscn | 28 +++++++++++++++++++--------- script/_global/setting.gd | 6 +++--- script/ui/hud/hud_page.gd | 1 - script/ui/hud/loading_page.gd | 6 ++++++ 5 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 render/shader/loading.gdshader diff --git a/render/shader/loading.gdshader b/render/shader/loading.gdshader new file mode 100644 index 0000000..c594b57 --- /dev/null +++ b/render/shader/loading.gdshader @@ -0,0 +1,23 @@ +shader_type canvas_item; + +uniform vec4 in_color:source_color; +uniform float position:hint_range(-2,1.) = 0.856; +uniform vec2 size = vec2(32., 32.); + +void fragment(){ + vec2 a = (1./SCREEN_PIXEL_SIZE) / size; + + vec2 uv=UV; + uv *= a; + + vec2 i_uv = floor(uv); + vec2 f_uv = fract(uv); + + float wave = max(0.,i_uv.x/(a.x) - position); + + vec2 center = f_uv*2.-1.; + float circle = abs(center.x)+abs(center.y); + circle = 1. - step(wave,circle); + + COLOR=vec4(circle) * in_color; +} diff --git a/scene/ui/hud_screen.tscn b/scene/ui/hud_screen.tscn index a981e52..97074ca 100644 --- a/scene/ui/hud_screen.tscn +++ b/scene/ui/hud_screen.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=3 uid="uid://126wph4owvoy"] +[gd_scene load_steps=16 format=3 uid="uid://126wph4owvoy"] [ext_resource type="Texture2D" uid="uid://cwhu1ec03t3c8" path="res://resource/ui/hud/headbar_hp_empty.png" id="1_flgf6"] [ext_resource type="Script" path="res://script/ui/hud/hud_page.gd" id="1_t7dgf"] @@ -8,6 +8,7 @@ [ext_resource type="Texture2D" uid="uid://xogtpwyb862f" path="res://resource/ui/hud/_hud_design.png" id="5_qqrb8"] [ext_resource type="Script" path="res://script/ui/hud/lock_item.gd" id="5_usy8x"] [ext_resource type="Texture2D" uid="uid://dx2vp753yvh4y" path="res://render/texture/shape/lock.png" id="6_hmslt"] +[ext_resource type="Shader" path="res://render/shader/loading.gdshader" id="9_lv4gd"] [sub_resource type="Animation" id="Animation_ikdwl"] resource_name = "rotate" @@ -30,34 +31,42 @@ _data = { "rotate": SubResource("Animation_ikdwl") } +[sub_resource type="ShaderMaterial" id="ShaderMaterial_b5bdl"] +shader = ExtResource("9_lv4gd") +shader_parameter/in_color = null +shader_parameter/position = -2.0 +shader_parameter/size = Vector2(32, 32) + [sub_resource type="Animation" id="Animation_4kxot"] resource_name = "end" +length = 0.4 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") +tracks/0/path = NodePath(".:duration") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 0.3), -"transitions": PackedFloat32Array(1, 1), +"times": PackedFloat32Array(0, 0.1, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), "update": 0, -"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)] +"values": [-2.0, -2.0, 1.0] } [sub_resource type="Animation" id="Animation_x6v17"] resource_name = "start" +length = 0.3 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") +tracks/0/path = NodePath(".:duration") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 0.2), +"times": PackedFloat32Array(0, 0.3), "transitions": PackedFloat32Array(1, 1), "update": 0, -"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)] +"values": [1.0, -2.0] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_fofuj"] @@ -126,14 +135,15 @@ offset_bottom = 40.0 script = ExtResource("3_6chl0") [node name="LoadingPage" type="Control" parent="."] -visible = false layout_mode = 3 anchors_preset = 0 offset_right = 40.0 offset_bottom = 40.0 script = ExtResource("4_jqajt") +duration = -1.5 [node name="ColorRect" type="ColorRect" parent="LoadingPage"] +material = SubResource("ShaderMaterial_b5bdl") layout_mode = 0 offset_right = 640.0 offset_bottom = 360.0 diff --git a/script/_global/setting.gd b/script/_global/setting.gd index ec27415..b05f690 100644 --- a/script/_global/setting.gd +++ b/script/_global/setting.gd @@ -11,7 +11,7 @@ const drag_ground : float = 20 const drag_air : float = 5 #地图 -#const starting_level : String = "level01_forecourt.tscn" -const starting_level : String = "level00_test1.tscn" -const level_loading_min_time : float = 0.2 +const starting_level : String = "level01_forecourt.tscn" +#const starting_level : String = "level00_test1.tscn" +const level_loading_min_time : float = 0.5 const level_loading_control_time : float = 0.2 diff --git a/script/ui/hud/hud_page.gd b/script/ui/hud/hud_page.gd index 2893879..b39d4c3 100644 --- a/script/ui/hud/hud_page.gd +++ b/script/ui/hud/hud_page.gd @@ -4,7 +4,6 @@ extends Control func _ready(): pass # Replace with function body. - # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): pass diff --git a/script/ui/hud/loading_page.gd b/script/ui/hud/loading_page.gd index 65506af..f642777 100644 --- a/script/ui/hud/loading_page.gd +++ b/script/ui/hud/loading_page.gd @@ -2,7 +2,13 @@ extends Control @onready var animation = $AnimationPlayer as AnimationPlayer +var color_material : ShaderMaterial +@export var duration : float: + set(value): + if color_material:color_material.set_shader_parameter("position",value) + func _ready(): + color_material = $ColorRect.material as ShaderMaterial SignalManager.level_loading_start.connect(on_level_loading_start) SignalManager.level_loading_end.connect(on_level_loading_end)