From 0eecd651e470b63b5b4cd581b102da08fcb52c04 Mon Sep 17 00:00:00 2001 From: R34nd0 Date: Sun, 14 Jan 2024 03:01:58 +0500 Subject: [PATCH] Shield wave --- scenes/MainShip.tscn | 4 +- scenes/Space.tscn | 146 +++++++++++++++++- scenes/engines/starterengine.tscn | 13 +- scenes/hulls/npchullt1.tscn | 1 + scenes/npcships/NPCShipDefault.tscn | 19 ++- scenes/weapons/presets/NPCSingleLaserMk1.tscn | 1 + scripts/misc/FactionRecoloring.gd | 2 + scripts/objects/MainShip.gd | 1 + scripts/objects/Shield.gd | 32 +++- scripts/objects/npcship.gd | 2 + scripts/objects/projectile.gd | 2 +- shaders/materials/shield_material.tres | 13 ++ shaders/shield.gdshader | 50 ++++++ test.tscn | 68 ++++++++ 14 files changed, 341 insertions(+), 13 deletions(-) create mode 100644 shaders/materials/shield_material.tres create mode 100644 shaders/shield.gdshader create mode 100644 test.tscn diff --git a/scenes/MainShip.tscn b/scenes/MainShip.tscn index 96d1ef9..7602148 100644 --- a/scenes/MainShip.tscn +++ b/scenes/MainShip.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=13 format=3 uid="uid://ccrs28h3b2tfy"] +[gd_scene load_steps=14 format=3 uid="uid://ccrs28h3b2tfy"] +[ext_resource type="Material" uid="uid://cw0827vwv7pc1" path="res://shaders/materials/shield_material.tres" id="1_3gt13"] [ext_resource type="Script" path="res://scripts/objects/MainShip.gd" id="1_h7kne"] [ext_resource type="PackedScene" uid="uid://bbho4h6tg4jca" path="res://scenes/hulls/starterhull.tscn" id="2_r634y"] [ext_resource type="PackedScene" uid="uid://20171x3gmn1j" path="res://scenes/engines/starterengine.tscn" id="3_upe7o"] @@ -17,6 +18,7 @@ font_size = 48 [node name="MainShip" type="CharacterBody2D"] process_mode = 1 +material = ExtResource("1_3gt13") collision_mask = 3 script = ExtResource("1_h7kne") metadata/_edit_horizontal_guides_ = [] diff --git a/scenes/Space.tscn b/scenes/Space.tscn index 3cd443a..6d78084 100644 --- a/scenes/Space.tscn +++ b/scenes/Space.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=3 uid="uid://14k35mkjwi5i"] +[gd_scene load_steps=27 format=3 uid="uid://14k35mkjwi5i"] [ext_resource type="PackedScene" uid="uid://ccrs28h3b2tfy" path="res://scenes/MainShip.tscn" id="1_6fvpc"] [ext_resource type="Script" path="res://scripts/Space.gd" id="1_ppaw3"] @@ -7,9 +7,140 @@ [ext_resource type="PackedScene" uid="uid://dbtrc26016xov" path="res://scenes/Base.tscn" id="5_bjt5p"] [ext_resource type="PackedScene" uid="uid://523dme3h6d6c" path="res://scenes/npcships/NPCShipDefault.tscn" id="6_67746"] [ext_resource type="Script" path="res://scripts/misc/FactionRecoloring.gd" id="7_w8i61"] +[ext_resource type="Shader" path="res://shaders/shield.gdshader" id="7_wqq78"] [ext_resource type="Shader" path="res://shaders/nebula.gdshader" id="8_3swn8"] [ext_resource type="Script" path="res://scripts/nebula.gd" id="9_utirt"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_trcbc"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 20.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ximju"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_tyycv"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_hliu0"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_wqn82"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bd4d5"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_stbmy"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_cni30"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_x5auq"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ucpjn"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_e24ck"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ssd2x"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_vtqhw"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("7_wqq78") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array() +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 5.0 + [sub_resource type="FastNoiseLite" id="FastNoiseLite_n2xxx"] [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_lcrcg"] @@ -28,6 +159,7 @@ process_mode = 3 script = ExtResource("1_ppaw3") [node name="MainShip" parent="." instance=ExtResource("1_6fvpc")] +material = SubResource("ShaderMaterial_trcbc") [node name="Stars" parent="." instance=ExtResource("3_jbyyq")] @@ -41,39 +173,51 @@ script = ExtResource("7_w8i61") faction = true [node name="DefaultShip" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_ximju") position = Vector2(-600, 930) [node name="DefaultShip2" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_tyycv") position = Vector2(595, 956) [node name="DefaultShip3" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_hliu0") position = Vector2(-28, 1361) [node name="DefaultShip4" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_wqn82") position = Vector2(-588, -1151) [node name="DefaultShip5" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_bd4d5") position = Vector2(46, -1625) [node name="DefaultShip6" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_stbmy") position = Vector2(639, -1166) [node name="DefaultShip7" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_cni30") position = Vector2(-1195, -764) [node name="DefaultShip8" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_x5auq") position = Vector2(-1786, -202) [node name="DefaultShip9" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_ucpjn") position = Vector2(-1254, 416) [node name="DefaultShip10" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_e24ck") position = Vector2(1201, -766) [node name="DefaultShip11" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_ssd2x") position = Vector2(1877, -168) [node name="DefaultShip12" parent="EnemyFaction" instance=ExtResource("6_67746")] +material = SubResource("ShaderMaterial_vtqhw") position = Vector2(1212, 518) [node name="Bases" type="Node2D" parent="."] diff --git a/scenes/engines/starterengine.tscn b/scenes/engines/starterengine.tscn index 11ba7b4..db7ad45 100644 --- a/scenes/engines/starterengine.tscn +++ b/scenes/engines/starterengine.tscn @@ -14,16 +14,14 @@ curve = SubResource("Curve_grs2w") [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_al11x"] lifetime_randomness = 0.5 +particle_flag_disable_z = true emission_shape = 3 emission_box_extents = Vector3(8, 1, 1) -particle_flag_disable_z = true direction = Vector3(0, 1, 0) spread = 15.0 -gravity = Vector3(0, 0, 0) initial_velocity_min = 50.0 initial_velocity_max = 100.0 -orbit_velocity_min = 0.0 -orbit_velocity_max = 0.0 +gravity = Vector3(0, 0, 0) scale_min = 0.5 scale_max = 2.0 scale_curve = SubResource("CurveTexture_wagku") @@ -37,16 +35,14 @@ curve = SubResource("Curve_r1iqm") [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gd3um"] lifetime_randomness = 0.5 +particle_flag_disable_z = true emission_shape = 1 emission_sphere_radius = 1102.0 -particle_flag_disable_z = true direction = Vector3(0, 1, 0) spread = 0.0 -gravity = Vector3(0, 0, 0) initial_velocity_min = 500.0 initial_velocity_max = 600.0 -orbit_velocity_min = 0.0 -orbit_velocity_max = 0.0 +gravity = Vector3(0, 0, 0) scale_min = 1.5 scale_max = 1.5 scale_curve = SubResource("CurveTexture_ot3qw") @@ -56,6 +52,7 @@ script = ExtResource("1_jvcps") rotation_speed = 120 [node name="EngineSprite" type="Sprite2D" parent="."] +use_parent_material = true position = Vector2(-4, 0) texture = ExtResource("2_mll00") diff --git a/scenes/hulls/npchullt1.tscn b/scenes/hulls/npchullt1.tscn index 13c4e1a..9d561a3 100644 --- a/scenes/hulls/npchullt1.tscn +++ b/scenes/hulls/npchullt1.tscn @@ -8,5 +8,6 @@ script = ExtResource("1_x0f7x") max_hp = 15 [node name="HullSprite" type="Sprite2D" parent="."] +use_parent_material = true position = Vector2(16, 0) texture = ExtResource("2_wlkiy") diff --git a/scenes/npcships/NPCShipDefault.tscn b/scenes/npcships/NPCShipDefault.tscn index 7d834db..84befee 100644 --- a/scenes/npcships/NPCShipDefault.tscn +++ b/scenes/npcships/NPCShipDefault.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=9 format=3 uid="uid://523dme3h6d6c"] +[gd_scene load_steps=11 format=3 uid="uid://523dme3h6d6c"] +[ext_resource type="Shader" path="res://shaders/shield.gdshader" id="1_0qs3p"] [ext_resource type="Script" path="res://scripts/objects/npcship.gd" id="1_wioir"] [ext_resource type="PackedScene" uid="uid://d1bhrxmr0oo0n" path="res://scenes/Bounty.tscn" id="2_6fdps"] [ext_resource type="PackedScene" uid="uid://cyskycafymwx" path="res://scenes/shields/npcshield.tscn" id="3_47apr"] @@ -7,6 +8,16 @@ [ext_resource type="PackedScene" uid="uid://20171x3gmn1j" path="res://scenes/engines/starterengine.tscn" id="4_tguk3"] [ext_resource type="PackedScene" uid="uid://dse2xxx501xuj" path="res://scenes/weapons/presets/NPCSingleLaserMk1.tscn" id="6_wnekw"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_a6h5n"] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("1_0qs3p") +shader_parameter/wave_centers = PackedVector2Array(0, 0) +shader_parameter/wave_distances = PackedFloat32Array(0) +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 15.0 + [sub_resource type="CircleShape2D" id="CircleShape2D_k2lwx"] radius = 64.0 @@ -15,6 +26,7 @@ font_size = 12 [node name="DefaultShip" type="CharacterBody2D" node_paths=PackedStringArray("destination_timer")] process_mode = 1 +material = SubResource("ShaderMaterial_a6h5n") collision_mask = 19 input_pickable = true script = ExtResource("1_wioir") @@ -22,17 +34,22 @@ destination_timer = NodePath("DestinationTimer") bounty = ExtResource("2_6fdps") [node name="Shield" parent="." instance=ExtResource("3_47apr")] +use_parent_material = true [node name="Hull" parent="." instance=ExtResource("4_1ne0s")] +use_parent_material = true [node name="Engine" parent="." instance=ExtResource("4_tguk3")] +use_parent_material = true [node name="Collision" type="CollisionPolygon2D" parent="."] polygon = PackedVector2Array(0, -16, 32, 0, 0, 16, 0, 4, -4, 4, -8, 8, -8, -8, -4, -4, 0, -4) [node name="WeaponSlot" type="Node2D" parent="."] +use_parent_material = true [node name="SingleLaser" parent="WeaponSlot" instance=ExtResource("6_wnekw")] +use_parent_material = true position = Vector2(8, 0) [node name="DestinationTimer" type="Timer" parent="."] diff --git a/scenes/weapons/presets/NPCSingleLaserMk1.tscn b/scenes/weapons/presets/NPCSingleLaserMk1.tscn index badec3c..0856f5f 100644 --- a/scenes/weapons/presets/NPCSingleLaserMk1.tscn +++ b/scenes/weapons/presets/NPCSingleLaserMk1.tscn @@ -15,6 +15,7 @@ wait_time = 0.25 one_shot = true [node name="SpawnerSprite" type="Sprite2D" parent="."] +use_parent_material = true texture = ExtResource("3_ncnas") [node name="Spawner" type="Node2D" parent="."] diff --git a/scripts/misc/FactionRecoloring.gd b/scripts/misc/FactionRecoloring.gd index 95bf0c9..0860f23 100644 --- a/scripts/misc/FactionRecoloring.gd +++ b/scripts/misc/FactionRecoloring.gd @@ -7,5 +7,7 @@ func changeitemscolor(): var ship = get_tree().current_scene.ship for item in items: item.modulate = modulate + if item.material: + item.material.set_shader_parameter("color",modulate) if faction: ship.minimap.add_marker(item, "hostile") diff --git a/scripts/objects/MainShip.gd b/scripts/objects/MainShip.gd index e8fd712..630c136 100644 --- a/scripts/objects/MainShip.gd +++ b/scripts/objects/MainShip.gd @@ -29,6 +29,7 @@ func _ready(): quest.quest_ended.connect(kill_quest) quest.quest_failed.connect(kill_quest) destroyed.connect(quest._restriction_no_deaths) + shield.material = material #quest.create(Quest.TYPE.ELIMINATION, 2, 200) func _process(_delta): diff --git a/scripts/objects/Shield.gd b/scripts/objects/Shield.gd index 2de0179..83ef209 100644 --- a/scripts/objects/Shield.gd +++ b/scripts/objects/Shield.gd @@ -8,16 +8,32 @@ class_name Shield @export var laser_timer : Timer @export var laser_charge_rate : float = 20 @export var id : String = "startershield" + @onready var ship = get_parent() @onready var capacity : float = max_capacity var can_recharge : bool = false var laser_recharge : bool = true +var wave_distances = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] +var wave_positions = [Vector2.ZERO,Vector2.ZERO,Vector2.ZERO,Vector2.ZERO,Vector2.ZERO,Vector2.ZERO,Vector2.ZERO,Vector2.ZERO,Vector2.ZERO,Vector2.ZERO] + func _ready(): recharge_timer.timeout.connect(recharging_timer_out) laser_timer.timeout.connect(laser_timer_out) -func deal_damage(damage : float): +func deal_damage(damage : float,hit_position : Vector2): + # Shield wave + var shield_tween = create_tween() + var wave_index = find_free_index() + shield_tween.tween_method(set_wave_distance.bind(wave_index),0,material.get_shader_parameter("max_distance"),0.5) + shield_tween.tween_callback(reset_wave_distance.bind(wave_index)) + shield_tween.custom_step(0.1) + + wave_positions[wave_index] = hit_position + + material.set_shader_parameter("wave_centers",wave_positions) + material.set_shader_parameter("wave_distances",wave_distances) + capacity -= damage if capacity < 0: ship.hull.hp += capacity @@ -26,6 +42,20 @@ func deal_damage(damage : float): recharge_timer.start() laser_timer.start() +func set_wave_distance(value,index): + wave_distances[index] = value + material.set_shader_parameter("wave_distances",wave_distances) + +func reset_wave_distance(index): + wave_distances[index] = -1 + material.set_shader_parameter("wave_distances",wave_distances) + +func find_free_index() -> int: + for i in range(wave_distances.size()): + if wave_distances[i] == -1: + return i + return 0 + func recharging_timer_out(): can_recharge = true diff --git a/scripts/objects/npcship.gd b/scripts/objects/npcship.gd index 49019d0..3291251 100644 --- a/scripts/objects/npcship.gd +++ b/scripts/objects/npcship.gd @@ -24,6 +24,8 @@ func _ready(): target_snap.mouse_entered.connect(get_tree().current_scene.addtargetlist.bind(self)) target_snap.mouse_exited.connect(get_tree().current_scene.removetargetlist.bind(self)) destroyed.connect(get_tree().current_scene.enemydestroyed) + shield.material = material + material.set_shader_parameter("color",modulate) func _physics_process(_delta): match state: diff --git a/scripts/objects/projectile.gd b/scripts/objects/projectile.gd index ecdc19e..726c06e 100644 --- a/scripts/objects/projectile.gd +++ b/scripts/objects/projectile.gd @@ -37,7 +37,7 @@ func _on_collision(body): if body.faction != faction: if target != self: target.queue_free() - body.shield.deal_damage(damage) + body.shield.deal_damage(damage,global_position) queue_free() 2: if target != self: diff --git a/shaders/materials/shield_material.tres b/shaders/materials/shield_material.tres new file mode 100644 index 0000000..ba9d2c0 --- /dev/null +++ b/shaders/materials/shield_material.tres @@ -0,0 +1,13 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://cw0827vwv7pc1"] + +[ext_resource type="Shader" path="res://shaders/shield.gdshader" id="1_qsjai"] + +[resource] +resource_local_to_scene = true +resource_name = "Shield Material" +shader = ExtResource("1_qsjai") +shader_parameter/wave_centers = PackedVector2Array() +shader_parameter/wave_distances = PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +shader_parameter/color = Color(1, 0, 0, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 20.0 diff --git a/shaders/shield.gdshader b/shaders/shield.gdshader new file mode 100644 index 0000000..04d3739 --- /dev/null +++ b/shaders/shield.gdshader @@ -0,0 +1,50 @@ +shader_type canvas_item; + +uniform vec2[10] wave_centers; +uniform float[10] wave_distances; + +uniform vec3 color : source_color; +uniform float max_distance; +uniform float bublic_size = 2.0; + +varying vec2[10] local_position; + +float smooth_bublic(vec2 center,vec2 pixel_pos,float distance_from_center,float size) +{ + return 1.0-distance(distance_from_center,distance(center,pixel_pos))/size; +} + +float solid_bublic(vec2 center,vec2 pixel_pos,float distance_from_center,float size,float border) +{ + + return step(border,smooth_bublic(center,pixel_pos,distance_from_center,size));; +} + +void vertex() +{ + for (int i = 0; i < wave_centers.length(); i++) + { + local_position[i] = (inverse(MODEL_MATRIX) * vec4(wave_centers[i],0.0,1.0)).xy; + } +} + +void fragment() { + for (int i = 0; i < wave_centers.length(); i++) + { + float wave_distance = wave_distances[i]; + float normalized_distance = wave_distance/max_distance; + + if (normalized_distance >= 1.0 || normalized_distance < 0.0) + { + break; + } + float bublic = solid_bublic(local_position[i],(UV-0.5)/TEXTURE_PIXEL_SIZE,wave_distance,bublic_size,0.75); + + if (bublic == 0.0){ + break; + } + + COLOR.rgb = mix(COLOR.rgb,vec3(bublic*color),1.0-normalized_distance); + + } +} \ No newline at end of file diff --git a/test.tscn b/test.tscn new file mode 100644 index 0000000..c9a1a3a --- /dev/null +++ b/test.tscn @@ -0,0 +1,68 @@ +[gd_scene load_steps=6 format=3 uid="uid://dhh12jepm10m7"] + +[ext_resource type="Shader" path="res://shaders/shield.gdshader" id="1_0kl5j"] +[ext_resource type="Texture2D" uid="uid://dbwvej0c5bl52" path="res://sprites/ship mk1.png" id="2_bxhdx"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_j0js1"] +shader = ExtResource("1_0kl5j") +shader_parameter/wave_centers = null +shader_parameter/wave_distances = null +shader_parameter/color = Color(1, 1, 1, 1) +shader_parameter/max_distance = 20.0 +shader_parameter/bublic_size = 15.0 + +[sub_resource type="GDScript" id="GDScript_cl2gl"] +resource_name = "perdej" +script/source = "extends Sprite2D + +var tween + +func wave(pos): + var pos_arr = [pos] + if tween: + tween.kill() + tween = create_tween() + tween.tween_method(set_wave,0,20,1.5) + material.set_shader_parameter(\"wave_centers\",pos_arr) + +func set_wave(val): + material.set_shader_parameter(\"wave_distances\",[val]) +" + +[sub_resource type="GDScript" id="GDScript_lydqv"] +resource_name = "Testicles" +script/source = "extends RayCast2D + + +func _process(delta): + global_position = get_global_mouse_position().normalized()*target_position.x + look_at(Vector2.ZERO) + +func _input(event): + if event is InputEventMouseButton: + if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: + $\"../Icon\".wave(get_collision_point()) + print(\"test\") +" + +[node name="Node2D" type="Node2D"] + +[node name="Icon" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_j0js1") +position = Vector2(-48, 22) +texture = ExtResource("2_bxhdx") +script = SubResource("GDScript_cl2gl") + +[node name="Area2D" type="Area2D" parent="Icon"] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Icon/Area2D"] +polygon = PackedVector2Array(16, -5.2, 16, 5, 14.6, 5, -5.8, 16, -16, 16, -16, -16, -7.6, -16) + +[node name="RayCast2D" type="RayCast2D" parent="."] +position = Vector2(0, -112) +target_position = Vector2(112, 0) +collide_with_areas = true +script = SubResource("GDScript_lydqv") + +[node name="Camera2D" type="Camera2D" parent="."] +zoom = Vector2(1.475, 1.475)