diff --git a/resources/player_weapons/weapon_shot_stock.tres b/resources/player_weapons/weapon_shot_stock.tres index 06519e2..b081da8 100644 --- a/resources/player_weapons/weapon_shot_stock.tres +++ b/resources/player_weapons/weapon_shot_stock.tres @@ -7,9 +7,9 @@ script = ExtResource("2_by0nb") shot_name = "Stock Shot" bullet_scene = ExtResource("1_by0nb") -speed = 355 -projectiles = 5 -spacing = 32.0 -origin = -25 +speed = 500 +spacing = 25.0 +origin = -35 +horizontal_offset = 6.0 stagger_offset = 0.75 metadata/_custom_type_script = "uid://7n1itonn35fm" diff --git a/scenes/weapon_stock.gd b/scenes/weapon_stock.gd index 090c09a..d0e1cd6 100644 --- a/scenes/weapon_stock.gd +++ b/scenes/weapon_stock.gd @@ -1,20 +1,40 @@ extends Area2D -@onready var bullet: PackedScene = load("res://scenes/weapon_stock.tscn") +@onready var bullet: PackedScene = load("res://scenes/weapon_stock.tscn") @onready var shot_data: = load("res://resources/player_weapons/weapon_shot_stock.tres") -# Time offset when this bullet was fired (relative to other bullets) + + +# Time offset when this bullet was fired (relative to other bullets in the same shot) var time_offset: float = 0.5 -#func activate(): - # Bullet does its damage/projectile work +# When this bullet should fire (absolute time) +var fire_time: float = 0.0 + +# Track if this bullet is currently active in the shot +var is_active: bool = false func _process(delta): + var current_time = Time.get_ticks_msec() / 1000.0 - #Calculation position along Y axis - position.y -= shot_data.speed * delta # Original Speed - #position.y -= 330 * delta # non-shot_data testing + # Fire if it's time and bullet isn't already active + if !is_active and current_time >= fire_time: + activate() -func _on_visible_on_screen_notifier_2d_screen_exited() -> void: - queue_free() + # Move the bullet + position.y -= shot_data.speed * delta + +func activate(): + is_active = true + visible = true + + # Emit signal for hit detection + emit_signal("activate") + +func _on_visible_on_screen_notifier_2d_screen_exited(): + queue_free() + + # Set fire_time for the next shot (staggered firing) + var current_time = Time.get_ticks_msec() / 1000.0 + fire_time = current_time + shot_data.stagger_offset diff --git a/scripts/shoot_component.gd b/scripts/shoot_component.gd index a4991d2..3d9d0b7 100644 --- a/scripts/shoot_component.gd +++ b/scripts/shoot_component.gd @@ -23,27 +23,24 @@ func shoot(): get_tree().root.add_child(bullet) # Calculate index relative to center (0 = center, -1/+1 = first from center) - var index_from_center: int = b - center_index + var index_from_center: float = b - center_index # Calculate timing offset for staggered firing - # Negative = fire before center (left), positive = fire after center (right) var time_offset: float = index_from_center * stagger_offset - # Calculate horizontal offset for symmetrical spread (left = negative, right = positive) - horizontal_offset = index_from_center * weapon_data.horizontal_offset + # Calculate horizontal offset for this bullet (symmetrical: left=-ve, right=+ve) + var bullet_horizontal_offset: float = index_from_center * weapon_data.horizontal_offset - # Calculate vertical offset from center point (creates symmetrical vertical spread) - # Bullets on either side of center get offset by distance_from_center * spacing / 2 - # This keeps the center bullet at origin and creates symmetrical vertical spread + # Calculate vertical offset from center point (symmetrical vertical spread) var distance_from_center: float = abs(index_from_center) var vertical_offset: float = (distance_from_center * weapon_data.origin * -1) / 2 # Final position combines symmetrical horizontal spread with symmetrical vertical spacing - bullet.position = player.position + Vector2(horizontal_offset, weapon_data.origin + vertical_offset) + bullet.position = player.position + Vector2(bullet_horizontal_offset, weapon_data.origin + vertical_offset) - ## Set timing properties on the bullet - #bullet.time_offset = time_offset - #bullet.fire_time = current_time + time_offset + # Set timing properties on the bullet + bullet.time_offset = time_offset + bullet.fire_time = current_time + time_offset # Subtract projectile spacing from current Player travel for next player.travel -= weapon_data.spacing