extends Node2D class_name Shield @export var max_capacity : int = 8 @export var shield_charge_rate : float = 1 @export var recharge_timer : Timer @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,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 capacity = 0 can_recharge = false 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 func _physics_process(delta): if can_recharge: capacity += shield_charge_rate * delta if capacity > max_capacity: capacity = max_capacity can_recharge = false if laser_recharge: ship.hull.ammunition["Laser Energy"] += laser_charge_rate * delta if ship.hull.ammunition["Laser Energy"] > ship.hull.max_ammunition["Laser Energy"]: ship.hull.ammunition["Laser Energy"] = ship.hull.max_ammunition["Laser Energy"] laser_recharge = false func laser_timer_out(): laser_recharge = true