Skip to content

Commit

Permalink
Add shield shader
Browse files Browse the repository at this point in the history
  • Loading branch information
konsumlamm committed Apr 15, 2024
1 parent 2074287 commit 976b8eb
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 3 deletions.
25 changes: 24 additions & 1 deletion src/scenes/player.tscn
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
[gd_scene load_steps=23 format=3 uid="uid://cvjqv326igmk0"]
[gd_scene load_steps=29 format=3 uid="uid://cvjqv326igmk0"]

[ext_resource type="Shader" path="res://shaders/hit-indicator.gdshader" id="1_4eijp"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_8i3nd"]
[ext_resource type="Texture2D" uid="uid://s8kxx0tvktsq" path="res://assets/player-idle.png" id="3_tmw0k"]
[ext_resource type="PackedScene" uid="uid://c44q2u3nky1ek" path="res://scenes/player_ui.tscn" id="5_w4gtq"]
[ext_resource type="Script" path="res://scripts/ghost_inventory.gd" id="6_4ximd"]
[ext_resource type="Shader" path="res://shaders/shield.gdshader" id="6_lxgy7"]

[sub_resource type="RectangleShape2D" id="RectangleShape2D_26xo2"]
size = Vector2(9, 26)
Expand Down Expand Up @@ -135,6 +136,22 @@ _data = {
"hit": SubResource("Animation_lpfv2")
}

[sub_resource type="FastNoiseLite" id="FastNoiseLite_uct1m"]

[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_eb6d2"]
noise = SubResource("FastNoiseLite_uct1m")

[sub_resource type="ShaderMaterial" id="ShaderMaterial_r2s7t"]
shader = ExtResource("6_lxgy7")
shader_parameter/noise = SubResource("NoiseTexture2D_eb6d2")

[sub_resource type="Gradient" id="Gradient_mfw4p"]
offsets = PackedFloat32Array(0)
colors = PackedColorArray(0, 0, 0, 1)

[sub_resource type="GradientTexture2D" id="GradientTexture2D_pnvrp"]
gradient = SubResource("Gradient_mfw4p")

[node name="Player" type="CharacterBody2D" groups=["player"]]
z_index = 1
collision_layer = 79
Expand Down Expand Up @@ -175,5 +192,11 @@ libraries = {
}
speed_scale = 3.0

[node name="Shield" type="Sprite2D" parent="."]
visible = false
material = SubResource("ShaderMaterial_r2s7t")
scale = Vector2(0.6, 0.6)
texture = SubResource("GradientTexture2D_pnvrp")

[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"]
[connection signal="body_exited" from="Area2D" to="." method="_on_area_2d_body_exited"]
8 changes: 8 additions & 0 deletions src/scripts/player.gd
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,14 @@ func take_damage(dmg: int):
get_tree().get_first_node_in_group('hp-bar').set_value(life)
hit_indicator.play('hit')

func enable_shield(strength: float):
shield_multiplier = strength
$Shield.visible = true

func disable_shield():
shield_multiplier = 1.0
$Shield.visible = false

func _on_pentagram_layer_combo_done(combo: Array[int]):
var spell = SpellBook.find_spell(combo)
if spell > 0:
Expand Down
4 changes: 2 additions & 2 deletions src/scripts/spells/shield.gd
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
extends SpellBase

func cast(player: Player, _enemies: Array[Node]):
player.shield_multiplier *= 0.5
player.enable_shield(0.5)

func uncast(player: Player, _enemies: Array[Node]):
player.shield_multiplier *= 2.0
player.disable_shield()

19 changes: 19 additions & 0 deletions src/shaders/shield.gdshader
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
shader_type canvas_item;

const float thickness = 0.02;
const float feather = 0.005;

uniform sampler2D noise;

vec2 rotate(vec2 v, float angle) {
float s = sin(angle);
float c = cos(angle);
return mat2(vec2(c, s), vec2(-s, c)) * v;
}

void fragment() {
float alpha = COLOR.a * (1.0 - smoothstep(0.5 - feather, 0.5, length(UV - vec2(0.5, 0.5))));
alpha *= smoothstep(0.5 - thickness - feather, 0.5 - thickness, length(UV - vec2(0.5, 0.5)));
alpha *= texture(noise, rotate(UV, TIME)).r;
COLOR = vec4(0.0, 0.0, 1.0, alpha);
}

0 comments on commit 976b8eb

Please sign in to comment.