完成猫捉老鼠游戏中的雾气效果;更新部分素材(c01s06 前景;桌椅;柱子光照);更新角色光照 cull mask
@ -158,12 +158,12 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://cilhlpr4vqjl3" path="res://asset/art/gif/c01_孤儿院围墙/桌椅正常/4.png" id="119_dhwcn"]
|
[ext_resource type="Texture2D" uid="uid://cilhlpr4vqjl3" path="res://asset/art/gif/c01_孤儿院围墙/桌椅正常/4.png" id="119_dhwcn"]
|
||||||
[ext_resource type="Texture2D" uid="uid://coqjruq7na8xx" path="res://asset/art/gif/c01_孤儿院围墙/桌椅正常/5.png" id="120_sd6qg"]
|
[ext_resource type="Texture2D" uid="uid://coqjruq7na8xx" path="res://asset/art/gif/c01_孤儿院围墙/桌椅正常/5.png" id="120_sd6qg"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dcnpi27by0mf2" path="res://asset/art/gif/c01_孤儿院围墙/桌椅正常/6.png" id="121_nyj10"]
|
[ext_resource type="Texture2D" uid="uid://dcnpi27by0mf2" path="res://asset/art/gif/c01_孤儿院围墙/桌椅正常/6.png" id="121_nyj10"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dn7ke7k6fa56a" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/0.png" id="122_3fesm"]
|
[ext_resource type="Texture2D" uid="uid://jnfhjlkact1l" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/0.png" id="122_3fesm"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bxt0s6yl5u663" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/1.png" id="123_4ypet"]
|
[ext_resource type="Texture2D" uid="uid://d2i34qfbmn6hx" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/1.png" id="123_4ypet"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bvfp6qahl5wf1" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/2.png" id="124_ajrma"]
|
[ext_resource type="Texture2D" uid="uid://ywxfras0u1f1" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/2.png" id="124_ajrma"]
|
||||||
[ext_resource type="Texture2D" uid="uid://80d7y4mh7wke" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/3.png" id="125_j0esh"]
|
[ext_resource type="Texture2D" uid="uid://cfooxyqwxhte8" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/3.png" id="125_j0esh"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bhv5gcebvkmql" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/4.png" id="126_rcm44"]
|
[ext_resource type="Texture2D" uid="uid://et4hhies65uy" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/4.png" id="126_rcm44"]
|
||||||
[ext_resource type="Texture2D" uid="uid://yyyj4ibmrvhx" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/5.png" id="127_xhrct"]
|
[ext_resource type="Texture2D" uid="uid://c43pr71tf8ea" path="res://asset/art/gif/c01_孤儿院围墙/桌椅翻倒/5.png" id="127_xhrct"]
|
||||||
[ext_resource type="Texture2D" uid="uid://30e5snyr1o4l" path="res://asset/art/gif/c01_孤儿院围墙/摔倒隐藏小孩.png" id="134_1pcyy"]
|
[ext_resource type="Texture2D" uid="uid://30e5snyr1o4l" path="res://asset/art/gif/c01_孤儿院围墙/摔倒隐藏小孩.png" id="134_1pcyy"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="gif.animated.texture.plugin"
|
|
||||||
type="SpriteFrames"
|
|
||||||
uid="uid://ckiikbnfwvqt3"
|
|
||||||
path="res://.godot/imported/【桌椅】抖动.gif-4e7000400e31306039b3a172d9208201.tres"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://asset/art/gif/c01_孤儿院围墙/【桌椅】抖动.gif"
|
|
||||||
dest_files=["res://.godot/imported/【桌椅】抖动.gif-4e7000400e31306039b3a172d9208201.tres"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="gif.animated.texture.plugin"
|
|
||||||
type="SpriteFrames"
|
|
||||||
uid="uid://cnpfd1b6iy5dc"
|
|
||||||
path="res://.godot/imported/【桌椅】掉落.gif-a563a9f821674b4efce1be8f97ff374e.tres"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://asset/art/gif/c01_孤儿院围墙/【桌椅】掉落.gif"
|
|
||||||
dest_files=["res://.godot/imported/【桌椅】掉落.gif-a563a9f821674b4efce1be8f97ff374e.tres"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.5 KiB |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://dn7ke7k6fa56a"
|
uid="uid://jnfhjlkact1l"
|
||||||
path="res://.godot/imported/0.png-58a28801e924c44e2181115a1c21f09c.ctex"
|
path="res://.godot/imported/0.png-58a28801e924c44e2181115a1c21f09c.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.3 KiB |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://bxt0s6yl5u663"
|
uid="uid://d2i34qfbmn6hx"
|
||||||
path="res://.godot/imported/1.png-cf42cd74ae52ca67f68d4a8dfa155e93.ctex"
|
path="res://.godot/imported/1.png-cf42cd74ae52ca67f68d4a8dfa155e93.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.6 KiB |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://bvfp6qahl5wf1"
|
uid="uid://ywxfras0u1f1"
|
||||||
path="res://.godot/imported/2.png-12ebb48715ea5ba7869f08319659b248.ctex"
|
path="res://.godot/imported/2.png-12ebb48715ea5ba7869f08319659b248.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.4 KiB |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://80d7y4mh7wke"
|
uid="uid://cfooxyqwxhte8"
|
||||||
path="res://.godot/imported/3.png-bf8ba387c58d38fdd0073f5f65ae13e2.ctex"
|
path="res://.godot/imported/3.png-bf8ba387c58d38fdd0073f5f65ae13e2.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 5.0 KiB |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://bhv5gcebvkmql"
|
uid="uid://et4hhies65uy"
|
||||||
path="res://.godot/imported/4.png-7b6d3d1da36af1d00e3114b12876215a.ctex"
|
path="res://.godot/imported/4.png-7b6d3d1da36af1d00e3114b12876215a.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.8 KiB |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://yyyj4ibmrvhx"
|
uid="uid://c43pr71tf8ea"
|
||||||
path="res://.godot/imported/5.png-405617bd4aa342c8bed5d1257cd55ac6.ctex"
|
path="res://.godot/imported/5.png-405617bd4aa342c8bed5d1257cd55ac6.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
|
Before Width: | Height: | Size: 60 KiB |
@ -1,14 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="gif.animated.texture.plugin"
|
|
||||||
type="SpriteFrames"
|
|
||||||
uid="uid://bx3c8r31cvo8n"
|
|
||||||
path="res://.godot/imported/fg_花圃.gif-8e47e904a5d6d15fcb774edb0eb2cf9e.tres"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://asset/art/gif/c01_孤儿院长廊/fg_花圃.gif"
|
|
||||||
dest_files=["res://.godot/imported/fg_花圃.gif-8e47e904a5d6d15fcb774edb0eb2cf9e.tres"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 48 KiB |
@ -1,7 +1,5 @@
|
|||||||
[gd_resource type="SpriteFrames" load_steps=74 format=3 uid="uid://cc0ea1he2nfc2"]
|
[gd_resource type="SpriteFrames" load_steps=72 format=3 uid="uid://cc0ea1he2nfc2"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://b1fc664q3a6uc" path="res://asset/art/gif/c01_孤儿院长廊/fg_花圃/0.png" id="1_p7b7k"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://p38d24qbqiw8" path="res://asset/art/gif/c01_孤儿院长廊/fg_花圃/1.png" id="2_gs1di"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://deebi18wyq1wj" path="res://asset/art/gif/c01_孤儿院长廊/中蓝衣小孩呼吸/0.png" id="3_17qjt"]
|
[ext_resource type="Texture2D" uid="uid://deebi18wyq1wj" path="res://asset/art/gif/c01_孤儿院长廊/中蓝衣小孩呼吸/0.png" id="3_17qjt"]
|
||||||
[ext_resource type="Texture2D" uid="uid://d3lbtcx6p8acv" path="res://asset/art/gif/c01_孤儿院长廊/中蓝衣小孩呼吸/1.png" id="4_8o0lb"]
|
[ext_resource type="Texture2D" uid="uid://d3lbtcx6p8acv" path="res://asset/art/gif/c01_孤儿院长廊/中蓝衣小孩呼吸/1.png" id="4_8o0lb"]
|
||||||
[ext_resource type="Texture2D" uid="uid://chcpy0ijod33k" path="res://asset/art/gif/c01_孤儿院长廊/中蓝衣小孩呼吸/2.png" id="5_8k42r"]
|
[ext_resource type="Texture2D" uid="uid://chcpy0ijod33k" path="res://asset/art/gif/c01_孤儿院长廊/中蓝衣小孩呼吸/2.png" id="5_8k42r"]
|
||||||
@ -77,17 +75,6 @@
|
|||||||
[resource]
|
[resource]
|
||||||
animations = [{
|
animations = [{
|
||||||
"frames": [{
|
"frames": [{
|
||||||
"duration": 15.0,
|
|
||||||
"texture": ExtResource("1_p7b7k")
|
|
||||||
}, {
|
|
||||||
"duration": 15.0,
|
|
||||||
"texture": ExtResource("2_gs1di")
|
|
||||||
}],
|
|
||||||
"loop": true,
|
|
||||||
"name": &"fg_花圃",
|
|
||||||
"speed": 30.0
|
|
||||||
}, {
|
|
||||||
"frames": [{
|
|
||||||
"duration": 6.0,
|
"duration": 6.0,
|
||||||
"texture": ExtResource("3_17qjt")
|
"texture": ExtResource("3_17qjt")
|
||||||
}, {
|
}, {
|
||||||
|
Before Width: | Height: | Size: 314 KiB After Width: | Height: | Size: 315 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 58 KiB |
BIN
asset/art/scene/c01/s06_孤儿院长廊围墙/fog_mask.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://b1fc664q3a6uc"
|
uid="uid://c0ntr31be3s3y"
|
||||||
path="res://.godot/imported/0.png-9b63a554440389d99780ccb5f68869a7.ctex"
|
path="res://.godot/imported/fog_mask.png-1158c1c09f95d40f038e4ae1896d4849.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://asset/art/gif/c01_孤儿院长廊/fg_花圃/0.png"
|
source_file="res://asset/art/scene/c01/s06_孤儿院长廊围墙/fog_mask.png"
|
||||||
dest_files=["res://.godot/imported/0.png-9b63a554440389d99780ccb5f68869a7.ctex"]
|
dest_files=["res://.godot/imported/fog_mask.png-1158c1c09f95d40f038e4ae1896d4849.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 119 KiB |
BIN
asset/art/scene/c01/s06_孤儿院长廊围墙/【桌椅】 上层遮挡部分.png
Executable file
After Width: | Height: | Size: 3.5 KiB |
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://p38d24qbqiw8"
|
uid="uid://f6xl83h8g5mo"
|
||||||
path="res://.godot/imported/1.png-03964e8fef09e95a495106256b392161.ctex"
|
path="res://.godot/imported/【桌椅】 上层遮挡部分.png-fe8523e1a03d3d529198c743a2cc92ca.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://asset/art/gif/c01_孤儿院长廊/fg_花圃/1.png"
|
source_file="res://asset/art/scene/c01/s06_孤儿院长廊围墙/【桌椅】 上层遮挡部分.png"
|
||||||
dest_files=["res://.godot/imported/1.png-03964e8fef09e95a495106256b392161.ctex"]
|
dest_files=["res://.godot/imported/【桌椅】 上层遮挡部分.png-fe8523e1a03d3d529198c743a2cc92ca.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
29
asset/art/tool/fog_mask_generator.gd
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
extends Sprite2D
|
||||||
|
|
||||||
|
@export var export_path := ""
|
||||||
|
@export var height := 300
|
||||||
|
@export var l_ease_in_x := 500.0
|
||||||
|
@export var mid := 1000.0
|
||||||
|
@export var r_ease_out_x := 500.0
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if export_path:
|
||||||
|
var width := (l_ease_in_x + mid + r_ease_out_x) as int
|
||||||
|
var image = Image.create_empty(width, height, false, Image.FORMAT_RGBA8)
|
||||||
|
# convert to transparent BG point light image
|
||||||
|
for y in range(height):
|
||||||
|
for x in range(width):
|
||||||
|
var color = Color(1.0, 1.0, 1.0, 1.0)
|
||||||
|
if x < l_ease_in_x:
|
||||||
|
# color.a = smoothstep(0.0, 1.0, x / l_ease_in_x)
|
||||||
|
color.a = x / l_ease_in_x
|
||||||
|
elif x > l_ease_in_x + mid:
|
||||||
|
# color.a = smoothstep(1.0, 0.0, (x - l_ease_in_x - mid) / r_ease_out_x)
|
||||||
|
color.a = 1.0 - (x - l_ease_in_x - mid) / r_ease_out_x
|
||||||
|
image.set_pixel(x, y, color)
|
||||||
|
image.save_png(export_path)
|
||||||
|
texture = ImageTexture.create_from_image(image)
|
||||||
|
print("Exported to: " + export_path)
|
||||||
|
else:
|
||||||
|
print("No export path found")
|
14
asset/art/tool/fog_mask_generator.tscn
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://rf5i1eqpefj4"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://asset/art/tool/fog_mask_generator.gd" id="1_48e0h"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c0ntr31be3s3y" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/fog_mask.png" id="1_t82x4"]
|
||||||
|
|
||||||
|
[node name="MaskGenerator" type="Sprite2D"]
|
||||||
|
position = Vector2(294, 145)
|
||||||
|
scale = Vector2(0.2, 0.2)
|
||||||
|
texture = ExtResource("1_t82x4")
|
||||||
|
script = ExtResource("1_48e0h")
|
||||||
|
export_path = "res://asset/art/scene/c01/s06_孤儿院长廊围墙/fog_mask.png"
|
||||||
|
l_ease_in_x = 1200.0
|
||||||
|
mid = 350.0
|
||||||
|
r_ease_out_x = 550.0
|
@ -1,20 +1,18 @@
|
|||||||
|
// fog.shader 构造 fog 效果
|
||||||
|
// noise 为配置好的噪音取样纹理
|
||||||
|
// texture 为蒙版 mask,用于控制雾气浓度
|
||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
uniform sampler2D noise: repeat_enable;
|
uniform sampler2D noise: repeat_enable;
|
||||||
//uniform vec4 base_color : source_color;
|
|
||||||
//uniform float location_fade;
|
|
||||||
|
|
||||||
void fragment() {
|
void fragment() {
|
||||||
//vec3 fog_color_1 = texture(TEXTURE, vec2(UV.x * 0.5 + TIME * 0.006, UV.y * 0.25 - TIME * 0.01)).rgb;
|
|
||||||
//vec3 fog_color_2 = texture(TEXTURE, vec2(UV.x * 0.5 + 0.5 + TIME * 0.010, UV.y * 0.25 + 0.5 - TIME / 160.0)).rgb;
|
|
||||||
//vec3 fog_color_3 = texture(TEXTURE, vec2(UV.x * 0.5 + 0.25 + TIME * 0.024, UV.y * 0.25 - 0.25 - TIME / 160.0)).rgb;
|
|
||||||
//vec3 fog_color = mix(fog_color_3, mix(fog_color_1, fog_color_2, 0.5), 0.7);
|
|
||||||
float fog_alpha_1 = texture(noise, vec2(UV.x / 2.0 + TIME /100.0, UV.y / 4.0 - TIME / 100.0)).r;
|
float fog_alpha_1 = texture(noise, vec2(UV.x / 2.0 + TIME /100.0, UV.y / 4.0 - TIME / 100.0)).r;
|
||||||
float fog_alpha_2 = texture(noise, vec2(UV.x / 2.0 + 0.5 + TIME /50.0, UV.y / 4.0 + 0.5 - TIME / 160.0)).r;
|
float fog_alpha_2 = texture(noise, vec2(UV.x / 2.0 + 0.5 + TIME /50.0, UV.y / 4.0 + 0.5 - TIME / 160.0)).r;
|
||||||
float fog_alpha_3 = texture(noise, vec2(UV.x / 2.0 + 0.25 + TIME /25.0, UV.y / 4.0 - 0.25 - TIME / 160.0)).r;
|
float fog_alpha_3 = texture(noise, vec2(UV.x / 2.0 + 0.25 + TIME /25.0, UV.y / 4.0 - 0.25 - TIME / 160.0)).r;
|
||||||
float fog_alpha = mix(fog_alpha_3, mix(fog_alpha_1, fog_alpha_2, 0.5), 0.7);
|
float fog_alpha = mix(fog_alpha_3, mix(fog_alpha_1, fog_alpha_2, 0.5), 0.7);
|
||||||
COLOR.a *= fog_alpha * 1.5;
|
// COLOR.a 越接近 1.0, factor 越接近 1.0;COLOR.a 越接近 0.0, factor 越接近 0.0
|
||||||
//COLOR.rgb = base_color.rgb;
|
float factor = pow(COLOR.a, 2);
|
||||||
//COLOR.rgb = fog_color * base_color.rgb;
|
float strength = smoothstep(.0, .2, COLOR.a);
|
||||||
//COLOR.rgb *= location_fade;
|
// factor 越靠近 1, fog_alpha 也靠近 1; factor 越靠近 0.,fog_alpha 越靠近自己
|
||||||
|
//COLOR.a = mix(fog_alpha, 1., factor);
|
||||||
|
COLOR.a = mix(fog_alpha, 1., factor) * strength;
|
||||||
}
|
}
|
@ -175,6 +175,10 @@ locale/fallback="zh"
|
|||||||
|
|
||||||
[layer_names]
|
[layer_names]
|
||||||
|
|
||||||
|
2d_render/layer_1="default"
|
||||||
|
2d_render/layer_2="场景人物"
|
||||||
|
2d_render/layer_3="场景物体"
|
||||||
|
2d_render/layer_4="玩家角色"
|
||||||
2d_physics/layer_1="player"
|
2d_physics/layer_1="player"
|
||||||
2d_physics/layer_2="wall"
|
2d_physics/layer_2="wall"
|
||||||
2d_physics/layer_3="interactable"
|
2d_physics/layer_3="interactable"
|
||||||
|
@ -96,10 +96,10 @@ func transition_to_scene(scene_name: String, portal: String, immediately: bool)
|
|||||||
if not immediately:
|
if not immediately:
|
||||||
# 转场效果,在 _load_ground_node 之前播放
|
# 转场效果,在 _load_ground_node 之前播放
|
||||||
var tween = _toggle_mask(true)
|
var tween = _toggle_mask(true)
|
||||||
tween.tween_callback(_do_transition.bind(scene_name))
|
tween.tween_callback(call_deferred.bind("_do_transition", scene_name))
|
||||||
tween.tween_callback(_toggle_mask.bind(false))
|
tween.tween_callback(_toggle_mask.bind(false))
|
||||||
else:
|
else:
|
||||||
_do_transition(scene_name)
|
call_deferred("_do_transition", scene_name)
|
||||||
else:
|
else:
|
||||||
print("Scene not found: " + scene_name)
|
print("Scene not found: " + scene_name)
|
||||||
|
|
||||||
@ -114,8 +114,7 @@ func _do_transition(scene_name: String):
|
|||||||
ground = get_node_or_null("Ground") as Ground2D
|
ground = get_node_or_null("Ground") as Ground2D
|
||||||
if ground:
|
if ground:
|
||||||
# 防止命名冲突
|
# 防止命名冲突
|
||||||
ground.name = "removed_ground"
|
remove_child(ground)
|
||||||
call_deferred("remove_child", ground)
|
|
||||||
ground.queue_free()
|
ground.queue_free()
|
||||||
# 先设置 ground,再添加到场景中
|
# 先设置 ground,再添加到场景中
|
||||||
# 因为 ground 在 enter_tree 时会用到 SceneManager 的方法
|
# 因为 ground 在 enter_tree 时会用到 SceneManager 的方法
|
||||||
|
@ -46,6 +46,7 @@ func _on_ground_ready() -> void:
|
|||||||
standing_kid3 = $"../DeployLayer/【站立小孩-3】"
|
standing_kid3 = $"../DeployLayer/【站立小孩-3】"
|
||||||
game_kid = $"../DeployLayer/【胖小孩背着残疾小孩】"
|
game_kid = $"../DeployLayer/【胖小孩背着残疾小孩】"
|
||||||
obstacles = $"../DeployLayer/游戏中途桌椅"
|
obstacles = $"../DeployLayer/游戏中途桌椅"
|
||||||
|
obstacles.get_node("z7").visible = false
|
||||||
interactable_obstacles = $"../DeployLayer/Interactable桌椅"
|
interactable_obstacles = $"../DeployLayer/Interactable桌椅"
|
||||||
interactable_obstacles.interacted.connect(_on_push_obstacles)
|
interactable_obstacles.interacted.connect(_on_push_obstacles)
|
||||||
cat_rat_game_fail_ambush = $"../DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】/猫鼠游戏失败ambush"
|
cat_rat_game_fail_ambush = $"../DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】/猫鼠游戏失败ambush"
|
||||||
@ -102,7 +103,7 @@ func _game_counting_down(_res = null):
|
|||||||
get_tree().create_timer(2.5).timeout.connect(_kids_start_run)
|
get_tree().create_timer(2.5).timeout.connect(_kids_start_run)
|
||||||
cat.visible = true
|
cat.visible = true
|
||||||
cat.play("【墙上黑猫】跑步")
|
cat.play("【墙上黑猫】跑步")
|
||||||
SceneManager.get_shading_layer().show_default_fog(10.0)
|
# SceneManager.get_shading_layer().show_default_fog(10.0)
|
||||||
|
|
||||||
|
|
||||||
func _kids_start_run():
|
func _kids_start_run():
|
||||||
@ -152,6 +153,7 @@ func _on_cat_rat_game_obstacles_triggered():
|
|||||||
|
|
||||||
|
|
||||||
func _on_kid_fall_finished():
|
func _on_kid_fall_finished():
|
||||||
|
obstacles.get_node("z7").visible = true
|
||||||
game_kid_limp.modulate.a = 1
|
game_kid_limp.modulate.a = 1
|
||||||
game_kid.play("【胖小孩背着残疾小孩】胖子独自呼吸")
|
game_kid.play("【胖小孩背着残疾小孩】胖子独自呼吸")
|
||||||
game_kid_limp.play("【单残疾小孩】爬行")
|
game_kid_limp.play("【单残疾小孩】爬行")
|
||||||
@ -233,13 +235,13 @@ func transport_player_to_next_scene(win: bool):
|
|||||||
_show_next_scene(true)
|
_show_next_scene(true)
|
||||||
SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏胜利,无缝转场")
|
SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏胜利,无缝转场")
|
||||||
else:
|
else:
|
||||||
SceneManager.get_shading_layer().tween_fog(
|
# SceneManager.get_shading_layer().tween_fog(
|
||||||
ShadingLayer.FOG_FRAME_MAX,
|
# ShadingLayer.FOG_FRAME_MAX,
|
||||||
ShadingLayer.FOG_COLOR_BLACK,
|
# ShadingLayer.FOG_COLOR_BLACK,
|
||||||
ShadingLayer.FOG_OFFSET_DEFAULT,
|
# ShadingLayer.FOG_OFFSET_DEFAULT,
|
||||||
1.0,
|
# 1.0,
|
||||||
true
|
# true
|
||||||
)
|
# )
|
||||||
get_tree().create_timer(0.7).timeout.connect(_show_next_scene.bind(false))
|
get_tree().create_timer(0.7).timeout.connect(_show_next_scene.bind(false))
|
||||||
SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏失败,传送下一场景")
|
SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏失败,传送下一场景")
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=23 format=3 uid="uid://bx16c8nn32f40"]
|
[gd_scene load_steps=32 format=3 uid="uid://bx16c8nn32f40"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_bitx7"]
|
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_bitx7"]
|
||||||
[ext_resource type="Script" path="res://scene/ground/scene/c01/s06_animation.gd" id="2_fkfhi"]
|
[ext_resource type="Script" path="res://scene/ground/scene/c01/s06_animation.gd" id="2_fkfhi"]
|
||||||
@ -6,15 +6,20 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://bptk6i6rnolir" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/bg_院子长背景.png" id="2_ow3ya"]
|
[ext_resource type="Texture2D" uid="uid://bptk6i6rnolir" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/bg_院子长背景.png" id="2_ow3ya"]
|
||||||
[ext_resource type="Texture2D" uid="uid://h536hwonbrut" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/e_院长周围凳子.png" id="3_su6aw"]
|
[ext_resource type="Texture2D" uid="uid://h536hwonbrut" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/e_院长周围凳子.png" id="3_su6aw"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c40gmvqw3vd88" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/l_长廊光.png" id="4_6ffae"]
|
[ext_resource type="Texture2D" uid="uid://c40gmvqw3vd88" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/l_长廊光.png" id="4_6ffae"]
|
||||||
[ext_resource type="SpriteFrames" uid="uid://cemn2bnebsfko" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/全局参考.gif" id="4_8hecq"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://bllt2wycchkp2" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/e_红柱子.png" id="4_dtycx"]
|
[ext_resource type="Texture2D" uid="uid://bllt2wycchkp2" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/e_红柱子.png" id="4_dtycx"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cpc5037mesjl7" path="res://scene/ground/script/c01/s06_踢球男孩.tscn" id="5_erliv"]
|
[ext_resource type="PackedScene" uid="uid://cpc5037mesjl7" path="res://scene/ground/script/c01/s06_踢球男孩.tscn" id="5_erliv"]
|
||||||
[ext_resource type="SpriteFrames" uid="uid://c6okvaeemoodq" path="res://asset/art/gif/c01_孤儿院围墙/frames.tres" id="7_dsj2r"]
|
[ext_resource type="SpriteFrames" uid="uid://c6okvaeemoodq" path="res://asset/art/gif/c01_孤儿院围墙/frames.tres" id="7_dsj2r"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b50n0hvs4yh75" path="res://addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.tscn" id="8_ouldg"]
|
[ext_resource type="PackedScene" uid="uid://b50n0hvs4yh75" path="res://addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.tscn" id="8_ouldg"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cyobva6ppmapr" path="res://scene/entity/general/sfx2d.tscn" id="10_brjgh"]
|
[ext_resource type="PackedScene" uid="uid://cyobva6ppmapr" path="res://scene/entity/general/sfx2d.tscn" id="10_brjgh"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://f6xl83h8g5mo" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/【桌椅】 上层遮挡部分.png" id="11_q3ypm"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="11_tudob"]
|
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="11_tudob"]
|
||||||
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="12_28t76"]
|
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="12_28t76"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cw3q5pvciumil" path="res://scene/entity/interactable.tscn" id="12_idjp0"]
|
[ext_resource type="PackedScene" uid="uid://cw3q5pvciumil" path="res://scene/entity/interactable.tscn" id="12_idjp0"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bicuc35kbn8hd" path="res://scene/shading/fog.tscn" id="14_d5def"]
|
||||||
|
[ext_resource type="Shader" path="res://asset/shader/fog.gdshader" id="15_22a7a"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b7gyapghy3tsy" path="res://asset/art/neutral_point_light.png" id="15_q7j0p"]
|
||||||
|
[ext_resource type="SpriteFrames" uid="uid://o5poucsu57l7" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/fg_花圃.gif" id="15_wtosl"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c0ntr31be3s3y" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/fog_mask.png" id="15_xque7"]
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_723yg"]
|
[sub_resource type="Animation" id="Animation_723yg"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
@ -72,6 +77,33 @@ size = Vector2(20, 50)
|
|||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
size = Vector2(30, 70)
|
size = Vector2(30, 70)
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_jw18h"]
|
||||||
|
noise_type = 2
|
||||||
|
fractal_type = 2
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_qmfti"]
|
||||||
|
width = 800
|
||||||
|
height = 800
|
||||||
|
seamless = true
|
||||||
|
seamless_blend_skirt = 0.25
|
||||||
|
noise = SubResource("FastNoiseLite_jw18h")
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xf6rb"]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource("15_22a7a")
|
||||||
|
shader_parameter/noise = SubResource("NoiseTexture2D_qmfti")
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id="SpriteFrames_vduqs"]
|
||||||
|
animations = [{
|
||||||
|
"frames": [{
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("15_xque7")
|
||||||
|
}],
|
||||||
|
"loop": false,
|
||||||
|
"name": &"default",
|
||||||
|
"speed": 5.0
|
||||||
|
}]
|
||||||
|
|
||||||
[node name="S06" type="Node2D"]
|
[node name="S06" type="Node2D"]
|
||||||
metadata/_edit_horizontal_guides_ = [158.0, 91.0]
|
metadata/_edit_horizontal_guides_ = [158.0, 91.0]
|
||||||
|
|
||||||
@ -198,6 +230,12 @@ action_configs = Array[Dictionary]([{
|
|||||||
"animation_next": "桌椅翻倒"
|
"animation_next": "桌椅翻倒"
|
||||||
}])
|
}])
|
||||||
|
|
||||||
|
[node name="z7" type="Sprite2D" parent="Ground/DeployLayer/游戏中途桌椅"]
|
||||||
|
visible = false
|
||||||
|
z_index = 7
|
||||||
|
position = Vector2(-60, 117)
|
||||||
|
texture = ExtResource("11_q3ypm")
|
||||||
|
|
||||||
[node name="Interactable桌椅" parent="Ground/DeployLayer" index="10" instance=ExtResource("12_idjp0")]
|
[node name="Interactable桌椅" parent="Ground/DeployLayer" index="10" instance=ExtResource("12_idjp0")]
|
||||||
position = Vector2(2135, 49)
|
position = Vector2(2135, 49)
|
||||||
|
|
||||||
@ -344,7 +382,7 @@ action_configs = Array[Dictionary]([{
|
|||||||
"animation_next": "【墙上小孩猫影子】猫影跑步",
|
"animation_next": "【墙上小孩猫影子】猫影跑步",
|
||||||
"animation_wait_time": 1.0
|
"animation_wait_time": 1.0
|
||||||
}])
|
}])
|
||||||
light_energy = -0.05
|
light_energy = -0.2
|
||||||
|
|
||||||
[node name="中途Trigger" type="Area2D" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】"]
|
[node name="中途Trigger" type="Area2D" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】"]
|
||||||
position = Vector2(29, 12)
|
position = Vector2(29, 12)
|
||||||
@ -380,7 +418,8 @@ texture = ExtResource("4_6ffae")
|
|||||||
offset = Vector2(601.5, -0.5)
|
offset = Vector2(601.5, -0.5)
|
||||||
|
|
||||||
[node name="MainPlayer" parent="Ground" index="5"]
|
[node name="MainPlayer" parent="Ground" index="5"]
|
||||||
position = Vector2(1775, 91)
|
modulate = Color(0.931897, 0.931897, 0.931897, 1)
|
||||||
|
position = Vector2(1575, 91)
|
||||||
character = "小小蝶"
|
character = "小小蝶"
|
||||||
|
|
||||||
[node name="院长凳子" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
|
[node name="院长凳子" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
|
||||||
@ -406,6 +445,7 @@ sprite_frames = ExtResource("2_l4axy")
|
|||||||
animation = &"右绿衣男孩呼吸"
|
animation = &"右绿衣男孩呼吸"
|
||||||
|
|
||||||
[node name="门口_红衣姑娘" parent="Ground/ParallaxForeground/BGParallaxLayer" index="4" instance=ExtResource("8_ouldg")]
|
[node name="门口_红衣姑娘" parent="Ground/ParallaxForeground/BGParallaxLayer" index="4" instance=ExtResource("8_ouldg")]
|
||||||
|
light_mask = 2
|
||||||
position = Vector2(333, 9.5)
|
position = Vector2(333, 9.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"红衣姑娘呼吸"
|
animation = &"红衣姑娘呼吸"
|
||||||
@ -414,6 +454,15 @@ action_configs = Array[Dictionary]([{
|
|||||||
"animation_next": "红衣姑娘呼吸"
|
"animation_next": "红衣姑娘呼吸"
|
||||||
}])
|
}])
|
||||||
|
|
||||||
|
[node name="PointLight2D" type="PointLight2D" parent="Ground/ParallaxForeground/BGParallaxLayer/门口_红衣姑娘"]
|
||||||
|
position = Vector2(10, 63.5)
|
||||||
|
energy = 0.35
|
||||||
|
range_layer_min = 2
|
||||||
|
range_layer_max = 2
|
||||||
|
range_item_cull_mask = 2
|
||||||
|
texture = ExtResource("15_q7j0p")
|
||||||
|
texture_scale = 0.5
|
||||||
|
|
||||||
[node name="门口_院长" parent="Ground/ParallaxForeground/BGParallaxLayer" index="5" instance=ExtResource("8_ouldg")]
|
[node name="门口_院长" parent="Ground/ParallaxForeground/BGParallaxLayer" index="5" instance=ExtResource("8_ouldg")]
|
||||||
position = Vector2(301, 8.5)
|
position = Vector2(301, 8.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
@ -437,6 +486,14 @@ sprite_frames = ExtResource("2_l4axy")
|
|||||||
animation = &"左一绿衣男呼吸"
|
animation = &"左一绿衣男呼吸"
|
||||||
flip_h = true
|
flip_h = true
|
||||||
|
|
||||||
|
[node name="Fog" parent="Ground/ParallaxForeground/BGParallaxLayer" index="8" instance=ExtResource("14_d5def")]
|
||||||
|
z_index = 5
|
||||||
|
material = SubResource("ShaderMaterial_xf6rb")
|
||||||
|
position = Vector2(3003, -51)
|
||||||
|
sprite_frames = SubResource("SpriteFrames_vduqs")
|
||||||
|
animation = &"default"
|
||||||
|
frame = 0
|
||||||
|
|
||||||
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
||||||
visible = false
|
visible = false
|
||||||
texture = null
|
texture = null
|
||||||
@ -444,8 +501,9 @@ texture = null
|
|||||||
[node name="动态前景" parent="Ground/ParallaxForeground/FGParallaxLayer" index="1" instance=ExtResource("8_ouldg")]
|
[node name="动态前景" parent="Ground/ParallaxForeground/FGParallaxLayer" index="1" instance=ExtResource("8_ouldg")]
|
||||||
position = Vector2(7.10543e-15, 23)
|
position = Vector2(7.10543e-15, 23)
|
||||||
scale = Vector2(0.8, 0.8)
|
scale = Vector2(0.8, 0.8)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("15_wtosl")
|
||||||
animation = &"fg_花圃"
|
animation = &"gif"
|
||||||
|
autoplay = "gif"
|
||||||
centered = false
|
centered = false
|
||||||
offset = Vector2(0, -159)
|
offset = Vector2(0, -159)
|
||||||
|
|
||||||
@ -455,15 +513,6 @@ points = PackedVector2Array(37, 150, 3200, 150)
|
|||||||
[node name="DirectionalLight2D" parent="Ground" index="9"]
|
[node name="DirectionalLight2D" parent="Ground" index="9"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="参考" type="AnimatedSprite2D" parent="Ground"]
|
|
||||||
visible = false
|
|
||||||
modulate = Color(1, 1, 1, 0.384314)
|
|
||||||
sprite_frames = ExtResource("4_8hecq")
|
|
||||||
animation = &"gif"
|
|
||||||
autoplay = "gif"
|
|
||||||
centered = false
|
|
||||||
offset = Vector2(0, -159)
|
|
||||||
|
|
||||||
[editable path="Ground"]
|
[editable path="Ground"]
|
||||||
[editable path="Ground/DeployLayer/Interactable桌椅"]
|
[editable path="Ground/DeployLayer/Interactable桌椅"]
|
||||||
[editable path="Ground/DeployLayer/Interactable桌椅/Sign"]
|
[editable path="Ground/DeployLayer/Interactable桌椅/Sign"]
|
||||||
|
@ -22,6 +22,7 @@ current_scene = "c01_s05"
|
|||||||
entrance_portal = "right"
|
entrance_portal = "right"
|
||||||
|
|
||||||
[node name="ShadingLayer" parent="." instance=ExtResource("2_d1re1")]
|
[node name="ShadingLayer" parent="." instance=ExtResource("2_d1re1")]
|
||||||
|
fog_modulate = Color(0.8, 0.8, 0.8, 0.8)
|
||||||
|
|
||||||
[node name="PropInspector" parent="." instance=ExtResource("5_ux0rw")]
|
[node name="PropInspector" parent="." instance=ExtResource("5_ux0rw")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
@ -93,6 +93,7 @@ seconds_per_pause_step = 0.15
|
|||||||
|
|
||||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
light_mask = 9
|
||||||
scale = Vector2(0.6, 0.6)
|
scale = Vector2(0.6, 0.6)
|
||||||
sprite_frames = ExtResource("2_3w63u")
|
sprite_frames = ExtResource("2_3w63u")
|
||||||
animation = &"c00_吕萍_idle_right"
|
animation = &"c00_吕萍_idle_right"
|
||||||
|
50
scene/shading/fog.gd
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
extends AnimatedSprite2D
|
||||||
|
|
||||||
|
const FOG_COLOR_DEFAULT = Color(0.8, 0.8, 0.8, 0.8)
|
||||||
|
const FOG_COLOR_WHITE = Color(1, 1, 1, 1)
|
||||||
|
const FOG_COLOR_BLACK = Color(0, 0, 0, 1)
|
||||||
|
const FOG_COLOR_GRAY = Color(0.5, 0.5, 0.5, 1)
|
||||||
|
const FOG_COLOR_DARK_GRAY = Color(0.2, 0.2, 0.2, 1)
|
||||||
|
|
||||||
|
var FOG_FRAME_MIN = 0
|
||||||
|
var FOG_FRAME_MAX
|
||||||
|
var FOG_FRAME_DEFAULT
|
||||||
|
|
||||||
|
const FOG_OFFSET_DEFAULT = Vector2(0, 50)
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
FOG_FRAME_MAX = sprite_frames.get_frame_count(animation) - 1
|
||||||
|
FOG_FRAME_DEFAULT = FOG_FRAME_MAX
|
||||||
|
|
||||||
|
|
||||||
|
var _fog_tween: Tween
|
||||||
|
|
||||||
|
|
||||||
|
func tween_fog(
|
||||||
|
end_frame := frame,
|
||||||
|
end_modulate := modulate,
|
||||||
|
end_offset := offset,
|
||||||
|
duration := 0.8,
|
||||||
|
close_at_end := false
|
||||||
|
) -> void:
|
||||||
|
if not is_node_ready():
|
||||||
|
return
|
||||||
|
if GlobalConfig.DEBUG:
|
||||||
|
print(
|
||||||
|
"Tween fog to frame: ", end_frame, " modulate: ", end_modulate, " offset: ", end_offset
|
||||||
|
)
|
||||||
|
if not visible:
|
||||||
|
# 如果没有开启 fog,先开启,并且设置为透明
|
||||||
|
visible = true
|
||||||
|
modulate = Color.TRANSPARENT
|
||||||
|
if _fog_tween and _fog_tween.is_valid():
|
||||||
|
_fog_tween.kill()
|
||||||
|
_fog_tween = create_tween()
|
||||||
|
_fog_tween.tween_property(self, "frame", end_frame, duration)
|
||||||
|
if end_modulate != modulate:
|
||||||
|
_fog_tween.parallel().tween_property(self, "self_modulate", end_modulate, duration)
|
||||||
|
if end_offset != offset:
|
||||||
|
_fog_tween.parallel().tween_property(self, "offset", end_offset, duration)
|
||||||
|
if close_at_end:
|
||||||
|
_fog_tween.tween_callback(hide)
|
136
scene/shading/fog.tscn
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
[gd_scene load_steps=31 format=3 uid="uid://bicuc35kbn8hd"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" path="res://asset/shader/fog.gdshader" id="1_b8eb0"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bmlhwa80lywa3" path="res://asset/art/ui/inverted_point_light_masks/000.png" id="2_04yrb"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://42trxuhnubhw" path="res://asset/art/ui/inverted_point_light_masks/001.png" id="3_0bm30"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cadj4kbscfani" path="res://asset/art/ui/inverted_point_light_masks/002.png" id="4_01roq"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://3sml8l5k0wpe" path="res://asset/art/ui/inverted_point_light_masks/003.png" id="5_r175g"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dxcdwhem7hp4m" path="res://asset/art/ui/inverted_point_light_masks/004.png" id="6_mfinv"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cku06prhx2v36" path="res://asset/art/ui/inverted_point_light_masks/006.png" id="7_l6i25"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cy62xq8rhoj3f" path="res://asset/art/ui/inverted_point_light_masks/007.png" id="8_c3qc6"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b87hfcnkn05h4" path="res://asset/art/ui/inverted_point_light_masks/008.png" id="9_4h02j"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://qtgxbebqaj1e" path="res://asset/art/ui/inverted_point_light_masks/005.png" id="10_cnlt1"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://r3dm28fc0e83" path="res://asset/art/ui/inverted_point_light_masks/009.png" id="11_d5hm6"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b3supcynj63qx" path="res://asset/art/ui/inverted_point_light_masks/010.png" id="12_xhq8m"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://brfiay0goejgl" path="res://asset/art/ui/inverted_point_light_masks/011.png" id="13_83dkb"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bac4uqqp1ktki" path="res://asset/art/ui/inverted_point_light_masks/012.png" id="14_5p0cj"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://h1mdv3ygc6dd" path="res://asset/art/ui/inverted_point_light_masks/013.png" id="15_wgxcx"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://br4ry5glivh5g" path="res://asset/art/ui/inverted_point_light_masks/014.png" id="16_w6431"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://x7nvm37rxo62" path="res://asset/art/ui/inverted_point_light_masks/015.png" id="17_ewt2a"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cmhqnt63xsw27" path="res://asset/art/ui/inverted_point_light_masks/016.png" id="18_pyfui"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bpktur1e0dtb1" path="res://asset/art/ui/inverted_point_light_masks/017.png" id="19_u0b51"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b62a8q5e4foo" path="res://asset/art/ui/inverted_point_light_masks/018.png" id="20_p2goc"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cdcgyjj1w3j8o" path="res://asset/art/ui/inverted_point_light_masks/019.png" id="21_xecmh"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dqwvsbj2savhv" path="res://asset/art/ui/inverted_point_light_masks/020.png" id="22_tgn13"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dy488fl2ijtb4" path="res://asset/art/ui/inverted_point_light_masks/021.png" id="23_t66ls"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bo2ee2uhsp6l2" path="res://asset/art/ui/inverted_point_light_masks/022.png" id="24_1ylis"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://gxl7kkkkq5vd" path="res://asset/art/ui/inverted_point_light_masks/023.png" id="25_dvr6b"]
|
||||||
|
[ext_resource type="Script" path="res://scene/shading/fog.gd" id="26_wm1nd"]
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_jw18h"]
|
||||||
|
noise_type = 2
|
||||||
|
fractal_type = 2
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_qmfti"]
|
||||||
|
width = 800
|
||||||
|
height = 800
|
||||||
|
seamless = true
|
||||||
|
seamless_blend_skirt = 0.25
|
||||||
|
noise = SubResource("FastNoiseLite_jw18h")
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fv2fx"]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource("1_b8eb0")
|
||||||
|
shader_parameter/noise = SubResource("NoiseTexture2D_qmfti")
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id="SpriteFrames_xeqgs"]
|
||||||
|
animations = [{
|
||||||
|
"frames": [{
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("2_04yrb")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("3_0bm30")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("4_01roq")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("5_r175g")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("6_mfinv")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("7_l6i25")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("8_c3qc6")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("9_4h02j")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("10_cnlt1")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("11_d5hm6")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("12_xhq8m")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("13_83dkb")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("14_5p0cj")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("15_wgxcx")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("16_w6431")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("17_ewt2a")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("18_pyfui")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("19_u0b51")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("20_p2goc")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("21_xecmh")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("22_tgn13")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("23_t66ls")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("24_1ylis")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": ExtResource("25_dvr6b")
|
||||||
|
}],
|
||||||
|
"loop": false,
|
||||||
|
"name": &"inverted_point_light_masks",
|
||||||
|
"speed": 12.0
|
||||||
|
}]
|
||||||
|
|
||||||
|
[node name="Fog" type="AnimatedSprite2D"]
|
||||||
|
material = SubResource("ShaderMaterial_fv2fx")
|
||||||
|
position = Vector2(286, 161)
|
||||||
|
sprite_frames = SubResource("SpriteFrames_xeqgs")
|
||||||
|
animation = &"inverted_point_light_masks"
|
||||||
|
frame = 23
|
||||||
|
offset = Vector2(0, 50)
|
||||||
|
script = ExtResource("26_wm1nd")
|
||||||
|
|
||||||
|
[node name="BackBufferCopy" type="BackBufferCopy" parent="."]
|
||||||
|
copy_mode = 2
|
@ -18,6 +18,7 @@ var mode: Array[String] = ["vignette"] as Array[String]:
|
|||||||
if is_node_ready():
|
if is_node_ready():
|
||||||
%Vignette.material.set("shader_parameter/vignette_intensity", new_val)
|
%Vignette.material.set("shader_parameter/vignette_intensity", new_val)
|
||||||
@export_group("Fog", "fog_")
|
@export_group("Fog", "fog_")
|
||||||
|
const fog_frame_count = 24 # 0-23
|
||||||
@export var fog_offset := FOG_OFFSET_DEFAULT:
|
@export var fog_offset := FOG_OFFSET_DEFAULT:
|
||||||
set(new_val):
|
set(new_val):
|
||||||
fog_offset = new_val
|
fog_offset = new_val
|
||||||
@ -129,7 +130,7 @@ func add_mode(mode_name: String) -> void:
|
|||||||
|
|
||||||
#### Tween fog ####
|
#### Tween fog ####
|
||||||
|
|
||||||
const FOG_COLOR_DEFAULT = Color(0.8, 0.8, 0.8, 0.8)
|
const FOG_COLOR_DEFAULT = Color(0.8, 0.8, 0.8, 0.5)
|
||||||
const FOG_COLOR_WHITE = Color(1, 1, 1, 1)
|
const FOG_COLOR_WHITE = Color(1, 1, 1, 1)
|
||||||
const FOG_COLOR_BLACK = Color(0, 0, 0, 1)
|
const FOG_COLOR_BLACK = Color(0, 0, 0, 1)
|
||||||
const FOG_COLOR_GRAY = Color(0.5, 0.5, 0.5, 1)
|
const FOG_COLOR_GRAY = Color(0.5, 0.5, 0.5, 1)
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
[ext_resource type="Shader" path="res://asset/shader/palette.gdshader" id="4_n5nu8"]
|
[ext_resource type="Shader" path="res://asset/shader/palette.gdshader" id="4_n5nu8"]
|
||||||
[ext_resource type="Shader" path="res://asset/shader/fog.gdshader" id="4_sglhm"]
|
[ext_resource type="Shader" path="res://asset/shader/fog.gdshader" id="4_sglhm"]
|
||||||
[ext_resource type="Texture2D" uid="uid://36k1j0qw66tm" path="res://asset/shader/palette/bloodmoon21-1x.png" id="5_ios50"]
|
[ext_resource type="Texture2D" uid="uid://36k1j0qw66tm" path="res://asset/shader/palette/bloodmoon21-1x.png" id="5_ios50"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bicuc35kbn8hd" path="res://scene/shading/fog.tscn" id="7_7084x"]
|
||||||
[ext_resource type="Material" uid="uid://7wllwmfkfvsb" path="res://asset/shader/cloud.tres" id="7_cmfij"]
|
[ext_resource type="Material" uid="uid://7wllwmfkfvsb" path="res://asset/shader/cloud.tres" id="7_cmfij"]
|
||||||
[ext_resource type="Shader" path="res://asset/shader/chromatic_abberation.gdshader" id="8_b0unx"]
|
[ext_resource type="Shader" path="res://asset/shader/chromatic_abberation.gdshader" id="8_b0unx"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bmlhwa80lywa3" path="res://asset/art/ui/inverted_point_light_masks/000.png" id="8_v5h2g"]
|
[ext_resource type="Texture2D" uid="uid://bmlhwa80lywa3" path="res://asset/art/ui/inverted_point_light_masks/000.png" id="8_v5h2g"]
|
||||||
@ -62,90 +63,11 @@ seamless = true
|
|||||||
seamless_blend_skirt = 0.25
|
seamless_blend_skirt = 0.25
|
||||||
noise = SubResource("FastNoiseLite_jw18h")
|
noise = SubResource("FastNoiseLite_jw18h")
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fv2fx"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_iyc4r"]
|
||||||
|
resource_local_to_scene = true
|
||||||
shader = ExtResource("4_sglhm")
|
shader = ExtResource("4_sglhm")
|
||||||
shader_parameter/noise = SubResource("NoiseTexture2D_qmfti")
|
shader_parameter/noise = SubResource("NoiseTexture2D_qmfti")
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id="SpriteFrames_xeqgs"]
|
|
||||||
animations = [{
|
|
||||||
"frames": [{
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("8_v5h2g")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("9_l3wcl")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("10_gxxjv")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("11_yxk17")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("12_k6v1x")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("14_yy2gj")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("15_dp8m6")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("16_86yqr")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("13_kjyug")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("17_5psqe")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("18_kqi2m")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("19_0iov5")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("20_nuwxf")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("21_e2710")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("22_a2ogd")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("23_0fxxa")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("24_wh31r")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("25_ur5f1")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("26_scw75")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("27_kg4a3")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("28_1rgfo")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("29_aklg4")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("30_3pvg6")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": ExtResource("31_53o1k")
|
|
||||||
}],
|
|
||||||
"loop": false,
|
|
||||||
"name": &"inverted_point_light_masks",
|
|
||||||
"speed": 12.0
|
|
||||||
}]
|
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id="SpriteFrames_sypgq"]
|
[sub_resource type="SpriteFrames" id="SpriteFrames_sypgq"]
|
||||||
animations = [{
|
animations = [{
|
||||||
"frames": [{
|
"frames": [{
|
||||||
@ -284,19 +206,11 @@ mouse_filter = 1
|
|||||||
[node name="BackBufferCopy" type="BackBufferCopy" parent="GlitchEffect"]
|
[node name="BackBufferCopy" type="BackBufferCopy" parent="GlitchEffect"]
|
||||||
copy_mode = 2
|
copy_mode = 2
|
||||||
|
|
||||||
[node name="Fog" type="AnimatedSprite2D" parent="."]
|
[node name="Fog" parent="." instance=ExtResource("7_7084x")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
visible = false
|
visible = false
|
||||||
self_modulate = Color(0.8, 0.8, 0.8, 0.8)
|
self_modulate = Color(0.8, 0.8, 0.8, 0.5)
|
||||||
material = SubResource("ShaderMaterial_fv2fx")
|
material = SubResource("ShaderMaterial_iyc4r")
|
||||||
position = Vector2(286, 161)
|
|
||||||
sprite_frames = SubResource("SpriteFrames_xeqgs")
|
|
||||||
animation = &"inverted_point_light_masks"
|
|
||||||
frame = 23
|
|
||||||
offset = Vector2(0, 50)
|
|
||||||
|
|
||||||
[node name="BackBufferCopy" type="BackBufferCopy" parent="Fog"]
|
|
||||||
copy_mode = 2
|
|
||||||
|
|
||||||
[node name="Cloud" type="AnimatedSprite2D" parent="."]
|
[node name="Cloud" type="AnimatedSprite2D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|