Shield wave
This commit is contained in:
parent
a1e0c3f8a7
commit
0eecd651e4
14 changed files with 341 additions and 13 deletions
|
|
@ -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_ = []
|
||||
|
|
|
|||
|
|
@ -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="."]
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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="."]
|
||||
|
|
|
|||
|
|
@ -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="."]
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
13
shaders/materials/shield_material.tres
Normal file
13
shaders/materials/shield_material.tres
Normal 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
50
shaders/shield.gdshader
Normal 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
68
test.tscn
Normal 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue