extends Area2D @export var speed: int = 150 @export var shield_max: int = 10 var shield: int = 0: set = shield_set var can_shoot: bool = true var is_shooting: bool = false var weapon_current = load("res://scenes/stock_weapon.tscn") var weapon_cooldown = Timer var weapon_rate: float = 0.1 var weapon_timer: float = 0.0 @onready var screensize = get_viewport_rect().size func _process(delta): var input = Input.get_vector("left", "right", "up","down") #TODO: sprite frame change on x axis #if input.x > 0: #$Ship.frame = 2 #$Ship/Boosters.animation = "right" #elif input.x < 0: #$Ship.frame = 0 #$Ship/Boosters.animation = "left" #else: #$Ship.frame = 1 #$Ship/Boosters.animation = "forward" position += input * speed * delta position = position.clamp(Vector2(12,12), screensize - Vector2(12,12)) if Input.is_action_pressed("shoot"): print("Spacebar pressed!") is_shooting = true else: is_shooting = false if is_shooting == true: weapon_timer += delta print(weapon_timer) if weapon_timer >= weapon_rate: shoot() weapon_timer = 0.0 if is_shooting == false: return func shield_set(_value: int): return func _on_weapon_cooldown_timeout() -> void: #print("You can shoot again!") #can_shoot = true return func shoot(): #if not can_shoot: return #if can_shoot: var bullet = weapon_current.instantiate() bullet.position = self.position + Vector2(0,-12) get_tree().root.add_child(bullet) weapon_rate = bullet.shot_data.rate prints(bullet.shot_data.shot_name, "weapon fired") #Print which weapon is firing #weapon_cooldown = $WeaponCooldown #weapon_cooldown.wait_time = bullet.shot_data.cooldown #weapon_cooldown.start() #can_shoot = not can_shoot #I track the vertical distance the last bullet traveled relative to the ship: # #travel += bulletSpeed*dt + (Ship.y - prevShipY) #set prevShipY to Ship.y # #when travel > spacing -> fire bullet and # #set travel -= spacing # #(where spacing is the distance you want bullets to be apart, in pixels)