Shield wave
This commit is contained in:
parent
a1e0c3f8a7
commit
0eecd651e4
14 changed files with 341 additions and 13 deletions
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue