Forcefield Shader

This commit is contained in:
MaddoScientisto 2025-02-23 01:24:29 +01:00
commit f23d84071a
9 changed files with 210 additions and 14 deletions

View file

@ -1,7 +1,12 @@
[gd_scene load_steps=21 format=3 uid="uid://b0gpbkxdfbnjh"]
[gd_scene load_steps=24 format=3 uid="uid://b0gpbkxdfbnjh"]
[ext_resource type="Script" path="res://Scripts/Door.cs" id="1_uxoep"]
[ext_resource type="Script" path="res://Scripts/Activables/ForceField.cs" id="1_yxhr6"]
[ext_resource type="Texture2D" uid="uid://gc24sjyj47x6" path="res://Sprites/Actors/ForceFieldHorizontal.png" id="2_12wxm"]
[ext_resource type="Shader" path="res://Shaders/Blink.gdshader" id="2_q7pky"]
[ext_resource type="Shader" uid="uid://cjdl1m3psohju" path="res://Shaders/scanlines_static.tres" id="2_qbobr"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_tnfy3"]
shader = ExtResource("2_qbobr")
[sub_resource type="AtlasTexture" id="AtlasTexture_gecst"]
atlas = ExtResource("2_12wxm")
@ -140,13 +145,16 @@ size = Vector2(32, 32)
[node name="HorizontalForceField" type="Area2D" groups=["Solid"]]
collision_layer = 64
collision_mask = 154
script = ExtResource("1_uxoep")
script = ExtResource("1_yxhr6")
TurnOffShader = ExtResource("2_q7pky")
ActiveShader = ExtResource("2_qbobr")
metadata/_edit_group_ = true
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
modulate = Color(1, 1, 1, 0.784314)
material = SubResource("ShaderMaterial_tnfy3")
sprite_frames = SubResource("SpriteFrames_h2s1d")
animation = &"Open"
animation = &"Closed"
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
visible = false

View file

@ -48,6 +48,7 @@ autoplay = "default"
frame_progress = 0.193815
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
visible = false
shape = SubResource("RectangleShape2D_0nhpj")
[node name="RigidBody2D" type="RigidBody2D" parent="."]
@ -56,5 +57,6 @@ collision_mask = 10
gravity_scale = 0.0
[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D"]
visible = false
position = Vector2(0.5, -3)
shape = SubResource("RectangleShape2D_vguns")

View file

@ -47,6 +47,7 @@ sprite_frames = SubResource("SpriteFrames_8ejte")
autoplay = "default"
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
visible = false
shape = SubResource("RectangleShape2D_0nhpj")
[node name="RigidBody2D" type="RigidBody2D" parent="."]
@ -55,5 +56,6 @@ collision_mask = 10
gravity_scale = 0.0
[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D"]
visible = false
position = Vector2(0, -3)
shape = SubResource("RectangleShape2D_vguns")

View file

@ -32,5 +32,6 @@ collision_mask = 10
gravity_scale = 0.0
[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D"]
visible = false
position = Vector2(1, -4)
shape = SubResource("RectangleShape2D_vguns")

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,52 @@
using Godot;
using System;
using Cirno.Scripts;
using System.Threading.Tasks;
public partial class ForceField : Door
{
[Export]
public Shader TurnOffShader { get; private set; }
[Export]
public Shader ActiveShader { get; private set; }
// Disable
public override void Open()
{
base.Open();
if (TurnOffShader is null) return;
((ShaderMaterial)_animatedSprite.Material).Shader = TurnOffShader;
_ = AnimateShutdownAsync();
}
protected async Task AnimateShutdownAsync()
{
Tween tween = GetTree().CreateTween();
tween.TweenMethod(Callable.From((float value) => SetShaderScanlineDensity(value)), 0f, 50f, 0.5);
tween.Parallel().TweenMethod(Callable.From((float value) => SetShaderTeleportProgress(value)), 0f, 1f, 0.5);
await ToSignal(tween, "finished");
}
// Enable
public override void Close()
{
base.Close();
if (ActiveShader is null) return;
((ShaderMaterial)_animatedSprite.Material).Shader = ActiveShader;
}
private void SetShaderTeleportProgress(float value)
{
((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("teleport_progress", value);
}
private void SetShaderScanlineDensity(float value)
{
((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("scanline_density", value);
}
}

View file

@ -5,9 +5,9 @@ using Cirno.Scripts;
public partial class Door : Activable
{
private AnimatedSprite2D _animatedSprite;
private CollisionShape2D _collisionShape;
private CollisionShape2D _solidShape;
protected AnimatedSprite2D _animatedSprite;
protected CollisionShape2D _collisionShape;
protected CollisionShape2D _solidShape;
// Called when the node enters the scene tree for the first time.
[Export]
@ -27,7 +27,7 @@ public partial class Door : Activable
{
}
public void Open()
public virtual void Open()
{
_animatedSprite.Play("Opening");
State = DoorState.Open;
@ -36,7 +36,7 @@ public partial class Door : Activable
//_solidShape.Disabled = true;
}
public void Close()
public virtual void Close()
{
_animatedSprite.Play("Closing");
State = DoorState.Closed;

View file

@ -0,0 +1,116 @@
[gd_resource type="VisualShader" load_steps=11 format=3 uid="uid://cjdl1m3psohju"]
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_7rr75"]
default_input_values = [0, 0.0, 1, 5.0]
operator = 2
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_own43"]
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_stwjs"]
input_name = "uv"
[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_kafk8"]
default_input_values = [0, Vector2(0, 0)]
op_type = 0
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_4ci11"]
default_input_values = [0, 0.0, 1, 100.0]
operator = 2
[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_5vgt5"]
function = 0
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_xwcy1"]
input_name = "texture"
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_c5icc"]
output_port_for_preview = 0
expanded_output_ports = [0]
source = 5
[sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_6sm8i"]
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_81ys3"]
input_name = "time"
[resource]
code = "shader_type canvas_item;
render_mode blend_mix;
void fragment() {
vec4 n_out7p0;
// Texture2D:7
n_out7p0 = texture(TEXTURE, UV);
float n_out7p4 = n_out7p0.a;
// Input:2
vec2 n_out2p0 = UV;
// VectorDecompose:3
float n_out3p0 = n_out2p0.x;
float n_out3p1 = n_out2p0.y;
// FloatOp:4
float n_in4p1 = 100.00000;
float n_out4p0 = n_out3p1 * n_in4p1;
// Input:9
float n_out9p0 = TIME;
// FloatOp:10
float n_in10p1 = 5.00000;
float n_out10p0 = n_out9p0 * n_in10p1;
// FloatOp:11
float n_out11p0 = n_out4p0 + n_out10p0;
// FloatFunc:5
float n_out5p0 = sin(n_out11p0);
// Mix:8
float n_in8p2 = 0.50000;
float n_out8p0 = mix(n_out7p4, n_out5p0, n_in8p2);
// Output:0
COLOR.a = n_out8p0;
}
"
graph_offset = Vector2(-10.9562, 180.832)
mode = 1
flags/light_only = false
nodes/fragment/0/position = Vector2(2520, 280)
nodes/fragment/2/node = SubResource("VisualShaderNodeInput_stwjs")
nodes/fragment/2/position = Vector2(60, 240)
nodes/fragment/3/node = SubResource("VisualShaderNodeVectorDecompose_kafk8")
nodes/fragment/3/position = Vector2(560, 280)
nodes/fragment/4/node = SubResource("VisualShaderNodeFloatOp_4ci11")
nodes/fragment/4/position = Vector2(880, 440)
nodes/fragment/5/node = SubResource("VisualShaderNodeFloatFunc_5vgt5")
nodes/fragment/5/position = Vector2(1760, 360)
nodes/fragment/6/node = SubResource("VisualShaderNodeInput_xwcy1")
nodes/fragment/6/position = Vector2(480, 1300)
nodes/fragment/7/node = SubResource("VisualShaderNodeTexture_c5icc")
nodes/fragment/7/position = Vector2(1200, 1160)
nodes/fragment/8/node = SubResource("VisualShaderNodeMix_6sm8i")
nodes/fragment/8/position = Vector2(2040, 860)
nodes/fragment/9/node = SubResource("VisualShaderNodeInput_81ys3")
nodes/fragment/9/position = Vector2(300, 660)
nodes/fragment/10/node = SubResource("VisualShaderNodeFloatOp_7rr75")
nodes/fragment/10/position = Vector2(880, 800)
nodes/fragment/11/node = SubResource("VisualShaderNodeFloatOp_own43")
nodes/fragment/11/position = Vector2(1360, 480)
nodes/fragment/connections = PackedInt32Array(2, 0, 3, 0, 3, 1, 4, 0, 6, 0, 7, 2, 7, 4, 8, 0, 5, 0, 8, 1, 8, 0, 0, 1, 9, 0, 10, 0, 4, 0, 11, 0, 10, 0, 11, 1, 11, 0, 5, 0)

View file

@ -867,13 +867,21 @@ texture = ExtResource("1_70kxh")
10:14/0 = 0
10:15/0 = 0
6:14/0 = 0
6:14/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
7:14/0 = 0
7:14/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
8:14/0 = 0
8:14/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
9:14/0 = 0
9:14/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
9:15/0 = 0
9:15/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
8:15/0 = 0
8:15/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
7:15/0 = 0
7:15/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
6:15/0 = 0
6:15/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
[sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_qg3vu"]
resource_name = "Props"