Shield wave

This commit is contained in:
R34nd0 2024-01-14 03:01:58 +05:00
commit 0eecd651e4
14 changed files with 341 additions and 13 deletions

View file

@ -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="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://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"] [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"] [node name="MainShip" type="CharacterBody2D"]
process_mode = 1 process_mode = 1
material = ExtResource("1_3gt13")
collision_mask = 3 collision_mask = 3
script = ExtResource("1_h7kne") script = ExtResource("1_h7kne")
metadata/_edit_horizontal_guides_ = [] metadata/_edit_horizontal_guides_ = []

View file

@ -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="PackedScene" uid="uid://ccrs28h3b2tfy" path="res://scenes/MainShip.tscn" id="1_6fvpc"]
[ext_resource type="Script" path="res://scripts/Space.gd" id="1_ppaw3"] [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://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="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="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="Shader" path="res://shaders/nebula.gdshader" id="8_3swn8"]
[ext_resource type="Script" path="res://scripts/nebula.gd" id="9_utirt"] [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="FastNoiseLite" id="FastNoiseLite_n2xxx"]
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_lcrcg"] [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_lcrcg"]
@ -28,6 +159,7 @@ process_mode = 3
script = ExtResource("1_ppaw3") script = ExtResource("1_ppaw3")
[node name="MainShip" parent="." instance=ExtResource("1_6fvpc")] [node name="MainShip" parent="." instance=ExtResource("1_6fvpc")]
material = SubResource("ShaderMaterial_trcbc")
[node name="Stars" parent="." instance=ExtResource("3_jbyyq")] [node name="Stars" parent="." instance=ExtResource("3_jbyyq")]
@ -41,39 +173,51 @@ script = ExtResource("7_w8i61")
faction = true faction = true
[node name="DefaultShip" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_ximju")
position = Vector2(-600, 930) position = Vector2(-600, 930)
[node name="DefaultShip2" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip2" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_tyycv")
position = Vector2(595, 956) position = Vector2(595, 956)
[node name="DefaultShip3" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip3" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_hliu0")
position = Vector2(-28, 1361) position = Vector2(-28, 1361)
[node name="DefaultShip4" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip4" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_wqn82")
position = Vector2(-588, -1151) position = Vector2(-588, -1151)
[node name="DefaultShip5" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip5" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_bd4d5")
position = Vector2(46, -1625) position = Vector2(46, -1625)
[node name="DefaultShip6" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip6" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_stbmy")
position = Vector2(639, -1166) position = Vector2(639, -1166)
[node name="DefaultShip7" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip7" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_cni30")
position = Vector2(-1195, -764) position = Vector2(-1195, -764)
[node name="DefaultShip8" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip8" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_x5auq")
position = Vector2(-1786, -202) position = Vector2(-1786, -202)
[node name="DefaultShip9" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip9" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_ucpjn")
position = Vector2(-1254, 416) position = Vector2(-1254, 416)
[node name="DefaultShip10" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip10" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_e24ck")
position = Vector2(1201, -766) position = Vector2(1201, -766)
[node name="DefaultShip11" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip11" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_ssd2x")
position = Vector2(1877, -168) position = Vector2(1877, -168)
[node name="DefaultShip12" parent="EnemyFaction" instance=ExtResource("6_67746")] [node name="DefaultShip12" parent="EnemyFaction" instance=ExtResource("6_67746")]
material = SubResource("ShaderMaterial_vtqhw")
position = Vector2(1212, 518) position = Vector2(1212, 518)
[node name="Bases" type="Node2D" parent="."] [node name="Bases" type="Node2D" parent="."]

View file

@ -14,16 +14,14 @@ curve = SubResource("Curve_grs2w")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_al11x"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_al11x"]
lifetime_randomness = 0.5 lifetime_randomness = 0.5
particle_flag_disable_z = true
emission_shape = 3 emission_shape = 3
emission_box_extents = Vector3(8, 1, 1) emission_box_extents = Vector3(8, 1, 1)
particle_flag_disable_z = true
direction = Vector3(0, 1, 0) direction = Vector3(0, 1, 0)
spread = 15.0 spread = 15.0
gravity = Vector3(0, 0, 0)
initial_velocity_min = 50.0 initial_velocity_min = 50.0
initial_velocity_max = 100.0 initial_velocity_max = 100.0
orbit_velocity_min = 0.0 gravity = Vector3(0, 0, 0)
orbit_velocity_max = 0.0
scale_min = 0.5 scale_min = 0.5
scale_max = 2.0 scale_max = 2.0
scale_curve = SubResource("CurveTexture_wagku") scale_curve = SubResource("CurveTexture_wagku")
@ -37,16 +35,14 @@ curve = SubResource("Curve_r1iqm")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gd3um"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gd3um"]
lifetime_randomness = 0.5 lifetime_randomness = 0.5
particle_flag_disable_z = true
emission_shape = 1 emission_shape = 1
emission_sphere_radius = 1102.0 emission_sphere_radius = 1102.0
particle_flag_disable_z = true
direction = Vector3(0, 1, 0) direction = Vector3(0, 1, 0)
spread = 0.0 spread = 0.0
gravity = Vector3(0, 0, 0)
initial_velocity_min = 500.0 initial_velocity_min = 500.0
initial_velocity_max = 600.0 initial_velocity_max = 600.0
orbit_velocity_min = 0.0 gravity = Vector3(0, 0, 0)
orbit_velocity_max = 0.0
scale_min = 1.5 scale_min = 1.5
scale_max = 1.5 scale_max = 1.5
scale_curve = SubResource("CurveTexture_ot3qw") scale_curve = SubResource("CurveTexture_ot3qw")
@ -56,6 +52,7 @@ script = ExtResource("1_jvcps")
rotation_speed = 120 rotation_speed = 120
[node name="EngineSprite" type="Sprite2D" parent="."] [node name="EngineSprite" type="Sprite2D" parent="."]
use_parent_material = true
position = Vector2(-4, 0) position = Vector2(-4, 0)
texture = ExtResource("2_mll00") texture = ExtResource("2_mll00")

View file

@ -8,5 +8,6 @@ script = ExtResource("1_x0f7x")
max_hp = 15 max_hp = 15
[node name="HullSprite" type="Sprite2D" parent="."] [node name="HullSprite" type="Sprite2D" parent="."]
use_parent_material = true
position = Vector2(16, 0) position = Vector2(16, 0)
texture = ExtResource("2_wlkiy") texture = ExtResource("2_wlkiy")

View file

@ -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="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://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"] [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://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"] [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"] [sub_resource type="CircleShape2D" id="CircleShape2D_k2lwx"]
radius = 64.0 radius = 64.0
@ -15,6 +26,7 @@ font_size = 12
[node name="DefaultShip" type="CharacterBody2D" node_paths=PackedStringArray("destination_timer")] [node name="DefaultShip" type="CharacterBody2D" node_paths=PackedStringArray("destination_timer")]
process_mode = 1 process_mode = 1
material = SubResource("ShaderMaterial_a6h5n")
collision_mask = 19 collision_mask = 19
input_pickable = true input_pickable = true
script = ExtResource("1_wioir") script = ExtResource("1_wioir")
@ -22,17 +34,22 @@ destination_timer = NodePath("DestinationTimer")
bounty = ExtResource("2_6fdps") bounty = ExtResource("2_6fdps")
[node name="Shield" parent="." instance=ExtResource("3_47apr")] [node name="Shield" parent="." instance=ExtResource("3_47apr")]
use_parent_material = true
[node name="Hull" parent="." instance=ExtResource("4_1ne0s")] [node name="Hull" parent="." instance=ExtResource("4_1ne0s")]
use_parent_material = true
[node name="Engine" parent="." instance=ExtResource("4_tguk3")] [node name="Engine" parent="." instance=ExtResource("4_tguk3")]
use_parent_material = true
[node name="Collision" type="CollisionPolygon2D" parent="."] [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) 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="."] [node name="WeaponSlot" type="Node2D" parent="."]
use_parent_material = true
[node name="SingleLaser" parent="WeaponSlot" instance=ExtResource("6_wnekw")] [node name="SingleLaser" parent="WeaponSlot" instance=ExtResource("6_wnekw")]
use_parent_material = true
position = Vector2(8, 0) position = Vector2(8, 0)
[node name="DestinationTimer" type="Timer" parent="."] [node name="DestinationTimer" type="Timer" parent="."]

View file

@ -15,6 +15,7 @@ wait_time = 0.25
one_shot = true one_shot = true
[node name="SpawnerSprite" type="Sprite2D" parent="."] [node name="SpawnerSprite" type="Sprite2D" parent="."]
use_parent_material = true
texture = ExtResource("3_ncnas") texture = ExtResource("3_ncnas")
[node name="Spawner" type="Node2D" parent="."] [node name="Spawner" type="Node2D" parent="."]

View file

@ -7,5 +7,7 @@ func changeitemscolor():
var ship = get_tree().current_scene.ship var ship = get_tree().current_scene.ship
for item in items: for item in items:
item.modulate = modulate item.modulate = modulate
if item.material:
item.material.set_shader_parameter("color",modulate)
if faction: if faction:
ship.minimap.add_marker(item, "hostile") ship.minimap.add_marker(item, "hostile")

View file

@ -29,6 +29,7 @@ func _ready():
quest.quest_ended.connect(kill_quest) quest.quest_ended.connect(kill_quest)
quest.quest_failed.connect(kill_quest) quest.quest_failed.connect(kill_quest)
destroyed.connect(quest._restriction_no_deaths) destroyed.connect(quest._restriction_no_deaths)
shield.material = material
#quest.create(Quest.TYPE.ELIMINATION, 2, 200) #quest.create(Quest.TYPE.ELIMINATION, 2, 200)
func _process(_delta): func _process(_delta):

View file

@ -8,16 +8,32 @@ class_name Shield
@export var laser_timer : Timer @export var laser_timer : Timer
@export var laser_charge_rate : float = 20 @export var laser_charge_rate : float = 20
@export var id : String = "startershield" @export var id : String = "startershield"
@onready var ship = get_parent() @onready var ship = get_parent()
@onready var capacity : float = max_capacity @onready var capacity : float = max_capacity
var can_recharge : bool = false var can_recharge : bool = false
var laser_recharge : bool = true 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(): func _ready():
recharge_timer.timeout.connect(recharging_timer_out) recharge_timer.timeout.connect(recharging_timer_out)
laser_timer.timeout.connect(laser_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 capacity -= damage
if capacity < 0: if capacity < 0:
ship.hull.hp += capacity ship.hull.hp += capacity
@ -26,6 +42,20 @@ func deal_damage(damage : float):
recharge_timer.start() recharge_timer.start()
laser_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(): func recharging_timer_out():
can_recharge = true can_recharge = true

View file

@ -24,6 +24,8 @@ func _ready():
target_snap.mouse_entered.connect(get_tree().current_scene.addtargetlist.bind(self)) target_snap.mouse_entered.connect(get_tree().current_scene.addtargetlist.bind(self))
target_snap.mouse_exited.connect(get_tree().current_scene.removetargetlist.bind(self)) target_snap.mouse_exited.connect(get_tree().current_scene.removetargetlist.bind(self))
destroyed.connect(get_tree().current_scene.enemydestroyed) destroyed.connect(get_tree().current_scene.enemydestroyed)
shield.material = material
material.set_shader_parameter("color",modulate)
func _physics_process(_delta): func _physics_process(_delta):
match state: match state:

View file

@ -37,7 +37,7 @@ func _on_collision(body):
if body.faction != faction: if body.faction != faction:
if target != self: if target != self:
target.queue_free() target.queue_free()
body.shield.deal_damage(damage) body.shield.deal_damage(damage,global_position)
queue_free() queue_free()
2: 2:
if target != self: if target != self:

View file

@ -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

50
shaders/shield.gdshader Normal file
View file

@ -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);
}
}

68
test.tscn Normal file
View file

@ -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)