Added shield shader

This commit is contained in:
2025-12-01 00:36:37 +03:00
parent 741ebcf316
commit ea7ba10b61
9 changed files with 70 additions and 10 deletions
+5 -3
View File
@@ -108,13 +108,15 @@ func _add_weapon(weapon: AbstractWeapon, weapon_position: Vector2) -> void:
_weapons.append(weapon) _weapons.append(weapon)
func _on_shield_updated(value: int, _max_value: int) -> void: func _on_shield_updated(value: int, max_value: int) -> void:
shield_sprite.visible = value != 0 shield_sprite.visible = value != 0
shield_sprite.material.set("shader_parameter/intensity", value/float(max_value))
func _on_armor_updated(value: int, _max_value: int) -> void: func _on_armor_updated(value: int, max_value: int) -> void:
armor_sprite.visible = value != 0 armor_sprite.visible = value != 0
armor_sprite.material.set("shader_parameter/intensity", value/float(max_value))
func _on_hull_updated(_value: int, _max_value: int) -> void: func _on_hull_updated(_value: int, _max_value: int) -> void:
pass # Replace with function body. pass
+16 -1
View File
@@ -1,9 +1,22 @@
[gd_scene load_steps=4 format=3 uid="uid://jvyagshykmgb"] [gd_scene load_steps=7 format=3 uid="uid://jvyagshykmgb"]
[ext_resource type="Script" uid="uid://cesibaqtrgotl" path="res://game/entities/ships/abstract_ship.gd" id="1_6isjb"] [ext_resource type="Script" uid="uid://cesibaqtrgotl" path="res://game/entities/ships/abstract_ship.gd" id="1_6isjb"]
[ext_resource type="Shader" uid="uid://dwh22f35u5qqi" path="res://game/entities/ships/shield.gdshader" id="2_dokxo"]
[ext_resource type="PackedScene" uid="uid://clkymhkv3cevm" path="res://game/health_system/health.tscn" id="2_xxtvk"] [ext_resource type="PackedScene" uid="uid://clkymhkv3cevm" path="res://game/health_system/health.tscn" id="2_xxtvk"]
[ext_resource type="PackedScene" uid="uid://d2snum2pxc2ui" path="res://game/health_system/health_bar/heath_bar.tscn" id="3_l62e5"] [ext_resource type="PackedScene" uid="uid://d2snum2pxc2ui" path="res://game/health_system/health_bar/heath_bar.tscn" id="3_l62e5"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dokxo"]
shader = ExtResource("2_dokxo")
shader_parameter/speed = 0.0
shader_parameter/scale = 20.0
shader_parameter/intensity = 1.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_bkxo4"]
shader = ExtResource("2_dokxo")
shader_parameter/speed = 5.0
shader_parameter/scale = 20.0
shader_parameter/intensity = 1.0
[node name="AbstractShip" type="CharacterBody2D"] [node name="AbstractShip" type="CharacterBody2D"]
disable_mode = 1 disable_mode = 1
motion_mode = 1 motion_mode = 1
@@ -13,8 +26,10 @@ script = ExtResource("1_6isjb")
[node name="ShipSprite" type="Sprite2D" parent="."] [node name="ShipSprite" type="Sprite2D" parent="."]
[node name="ArmorSprite" type="Sprite2D" parent="."] [node name="ArmorSprite" type="Sprite2D" parent="."]
material = SubResource("ShaderMaterial_dokxo")
[node name="ShieldSprite" type="Sprite2D" parent="."] [node name="ShieldSprite" type="Sprite2D" parent="."]
material = SubResource("ShaderMaterial_bkxo4")
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."] [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
+42
View File
@@ -0,0 +1,42 @@
shader_type canvas_item;
uniform float speed = 5.0;
uniform float scale = 20.0;
uniform float intensity = 1;
float rand(vec2 coord) {
return fract(sin(dot(coord, vec2(12.9898, 78.233))) * 43758.5453);
}
float cellular(vec2 coord) {
vec2 i = floor(coord);
vec2 f = fract(coord);
float min_dist = 1.0;
for (int y = -1; y <= 1; y++) {
for (int x = -1; x <= 1; x++) {
vec2 neighbor = vec2(float(x), float(y));
vec2 point = vec2(rand(i + neighbor), rand(i + neighbor + vec2(1000.0)));
point = 0.5 * sin(TIME * speed + 6.2831 * point);
vec2 diff = neighbor + point - f;
float dist = length(diff);
min_dist = min(min_dist, dist);
}
}
return min_dist;
}
void fragment() {
vec2 coord = UV * scale;
float pattern = cellular(coord);
float alpha = COLOR.a;
if (pattern > intensity) {
alpha = 0.0;
}
COLOR = vec4(COLOR.rgb, alpha);
}
+1
View File
@@ -0,0 +1 @@
uid://dwh22f35u5qqi
+2 -2
View File
@@ -23,9 +23,9 @@ func _on_enemy_timer_timeout() -> void:
if enemies.size() < 1: if enemies.size() < 1:
enemy_swamp_controller.create_enemy() enemy_swamp_controller.create_enemy()
var factor := maxi(enemies.size(), 1) var factor := maxi(enemies.size(), 1) * 0.5
enemy_timer.start(randi_range(1 * factor, 3 * factor)) enemy_timer.start(randf_range(1 * factor, 3 * factor))
func _on_player_ship_destroyed() -> void: func _on_player_ship_destroyed() -> void:
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.