From db57a0234e354ab9af0bf5d76ba7031bf840b005 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 7 Apr 2026 13:54:30 +0100 Subject: [PATCH] Equidistent code working in component form! Also cleaned up spacing for increased projectiles in stock weapon by rounding remainders from division. --- resources/player_weapons/shot_stock.tres | 5 ++-- {scripts => scenes}/player.gd | 0 {scripts => scenes}/player.gd.uid | 0 scenes/player.tscn | 2 +- {scripts => scenes}/player_refactor.gd | 31 ++++++++++++---------- {scripts => scenes}/player_refactor.gd.uid | 0 scenes/player_revision.tscn | 1 + {scripts => scenes}/stock_weapon.gd | 0 {scripts => scenes}/stock_weapon.gd.uid | 0 scenes/stock_weapon.tscn | 2 +- scenes/stock_weapon_single_old.tscn | 3 +-- scenes/world.tscn | 10 +++---- scripts/movement_component.gd | 6 ++--- scripts/player_component.gd | 15 +++++++---- scripts/player_shot.gd | 8 +++--- scripts/shoot_component.gd | 21 +++++++++------ scripts/weapon_component.gd | 2 +- 17 files changed, 58 insertions(+), 48 deletions(-) rename {scripts => scenes}/player.gd (100%) rename {scripts => scenes}/player.gd.uid (100%) rename {scripts => scenes}/player_refactor.gd (77%) rename {scripts => scenes}/player_refactor.gd.uid (100%) rename {scripts => scenes}/stock_weapon.gd (100%) rename {scripts => scenes}/stock_weapon.gd.uid (100%) diff --git a/resources/player_weapons/shot_stock.tres b/resources/player_weapons/shot_stock.tres index f11ecc3..8565495 100644 --- a/resources/player_weapons/shot_stock.tres +++ b/resources/player_weapons/shot_stock.tres @@ -6,8 +6,7 @@ [resource] script = ExtResource("1_t07sl") shot_name = "Stock" -speed = 350 +speed = 375 projectiles = 4 -projectile_spacing = 20.0 -cooldown = 0.0 +spacing = 28.0 metadata/_custom_type_script = "uid://ccdohs4gduee5" diff --git a/scripts/player.gd b/scenes/player.gd similarity index 100% rename from scripts/player.gd rename to scenes/player.gd diff --git a/scripts/player.gd.uid b/scenes/player.gd.uid similarity index 100% rename from scripts/player.gd.uid rename to scenes/player.gd.uid diff --git a/scenes/player.tscn b/scenes/player.tscn index ea115d4..819bc2b 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -1,6 +1,6 @@ [gd_scene format=3 uid="uid://coix5dqblmu7r"] -[ext_resource type="Script" uid="uid://bqxrdf7mtx0ev" path="res://scripts/player_refactor.gd" id="1_qlg0r"] +[ext_resource type="Script" uid="uid://bqxrdf7mtx0ev" path="res://scenes/player_refactor.gd" id="1_qlg0r"] [ext_resource type="Texture2D" uid="uid://cq4we1m1yv22s" path="res://graphics/ship.png" id="2_qhqgy"] [ext_resource type="Texture2D" uid="uid://crmbupr3qg0j" path="res://graphics/muzzle_flash.png" id="4_dqkch"] [ext_resource type="Texture2D" uid="uid://b0iavxi8vaxtj" path="res://graphics/ship_thrusters.png" id="5_qlg0r"] diff --git a/scripts/player_refactor.gd b/scenes/player_refactor.gd similarity index 77% rename from scripts/player_refactor.gd rename to scenes/player_refactor.gd index 4ead66c..42a2119 100644 --- a/scripts/player_refactor.gd +++ b/scenes/player_refactor.gd @@ -3,7 +3,6 @@ extends Area2D @export var speed: int = 150 @export var shield_max: int = 10 -#var ship = %Ship var shield: int = 0: set = shield_set var can_shoot: bool = true @@ -17,9 +16,9 @@ var weapon_spacing: float = 0.1 @export var weapon_current : PackedScene = preload("res://scenes/stock_weapon.tscn") #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 +#var weapon_cooldown = Timer +#var weapon_rate: float = 0.1 +#var weapon_timer: float = 0.0 @onready var screensize = get_viewport_rect().size @@ -28,8 +27,10 @@ var weapon_timer: float = 0.0 func _process(delta): var input = Input.get_vector("left", "right", "up","down") - ship_displacement = position.y - previous_position.y - travel += bullet_speed * delta + abs(ship_displacement) + + # Calculate position and travel for equidistant bullet calculations + ship_displacement = abs(position.y - previous_position.y) + travel += bullet_speed * delta - ship_displacement travel = clamp(travel, 0, 1.9 * weapon_spacing) # Sprite feedback based one player input @@ -70,6 +71,7 @@ func _process(delta): # Adjust bullet spacing before firing if travel > weapon_spacing: + print("Travel is greater!") shoot() travel -= weapon_spacing @@ -88,25 +90,26 @@ func _on_weapon_cooldown_timeout() -> void: func shoot(): - #var projectiles: int = 3 - #const PROJECTILE_SPACING: float = 10 - #const MUZZLE_HEIGHT: int = -23 + var projectiles: int = 5 + const PROJECTILE_SPACING: float = 20 + const MUZZLE_HEIGHT: int = -23 var bullet_resource: PlayerShot = load("res://resources/player_weapons/shot_stock.tres") - for b in range(bullet_resource.projectiles): + for b in range(projectiles): # Instantiate the bullets var bullet = weapon_current.instantiate() get_tree().root.add_child(bullet) - bullet.position = position + Vector2((b - (bullet.shot_data.projectiles - 1) / 2.0) * bullet.shot_data.projectile_spacing / 2.0, bullet.shot_data.projectile_origin) + prints(bullet_resource.speed,bullet_resource.projectiles, bullet_resource.projectile_spacing) + bullet.position = position + Vector2((b - (projectiles- 1) / 2.0) * PROJECTILE_SPACING /2, MUZZLE_HEIGHT) # Get weapon speed and spacing for equidistant calculations #weapon_rate = bullet.shot_data.rate - weapon_spacing = bullet.shot_data.projectile_spacing - bullet_speed = abs(bullet.shot_data.speed) + weapon_spacing = PROJECTILE_SPACING + #bullet_speed = bullet_resource.speed # Print which weapon is firing prints(bullet.shot_data.shot_name, "weapon fired") - + #travel -= weapon_spacing diff --git a/scripts/player_refactor.gd.uid b/scenes/player_refactor.gd.uid similarity index 100% rename from scripts/player_refactor.gd.uid rename to scenes/player_refactor.gd.uid diff --git a/scenes/player_revision.tscn b/scenes/player_revision.tscn index 0d26f74..af64ddf 100644 --- a/scenes/player_revision.tscn +++ b/scenes/player_revision.tscn @@ -140,6 +140,7 @@ metadata/_custom_type_script = "uid://dss0dbwr71y6m" unique_name_in_owner = true script = ExtResource("6_l5qtw") player = NodePath("..") +speed = 200.0 metadata/_custom_type_script = "uid://c0rikbakpcags" [node name="ShootComponent" type="Node" parent="." unique_id=623642425] diff --git a/scripts/stock_weapon.gd b/scenes/stock_weapon.gd similarity index 100% rename from scripts/stock_weapon.gd rename to scenes/stock_weapon.gd diff --git a/scripts/stock_weapon.gd.uid b/scenes/stock_weapon.gd.uid similarity index 100% rename from scripts/stock_weapon.gd.uid rename to scenes/stock_weapon.gd.uid diff --git a/scenes/stock_weapon.tscn b/scenes/stock_weapon.tscn index 6e6c3c6..0ea5fe4 100644 --- a/scenes/stock_weapon.tscn +++ b/scenes/stock_weapon.tscn @@ -1,6 +1,6 @@ [gd_scene format=3 uid="uid://ddpclu2vdy2ve"] -[ext_resource type="Script" uid="uid://d1rwqotmrag1r" path="res://scripts/stock_weapon.gd" id="1_hsma2"] +[ext_resource type="Script" uid="uid://d1rwqotmrag1r" path="res://scenes/stock_weapon.gd" id="1_hsma2"] [ext_resource type="Resource" uid="uid://cels8t3hqjtsu" path="res://resources/player_weapons/shot_stock.tres" id="2_mvdrj"] [ext_resource type="Texture2D" uid="uid://ti1uy42vnnhw" path="res://graphics/shot.png" id="3_mvdrj"] diff --git a/scenes/stock_weapon_single_old.tscn b/scenes/stock_weapon_single_old.tscn index f9afdf6..d804e00 100644 --- a/scenes/stock_weapon_single_old.tscn +++ b/scenes/stock_weapon_single_old.tscn @@ -1,6 +1,6 @@ [gd_scene format=3 uid="uid://b2ltmeb14nc17"] -[ext_resource type="Script" uid="uid://d1rwqotmrag1r" path="res://scripts/stock_weapon.gd" id="1_kx6bj"] +[ext_resource type="Script" uid="uid://d1rwqotmrag1r" path="res://scenes/stock_weapon.gd" id="1_kx6bj"] [ext_resource type="Script" uid="uid://ccdohs4gduee5" path="res://scripts/player_shot.gd" id="2_5286c"] [ext_resource type="Texture2D" uid="uid://ti1uy42vnnhw" path="res://graphics/shot.png" id="3_58qml"] @@ -10,7 +10,6 @@ shot_name = "Stock" speed = 350 projectiles = 3 projectile_spacing = 10.0 -cooldown = 0.0 metadata/_custom_type_script = "uid://ccdohs4gduee5" [sub_resource type="RectangleShape2D" id="RectangleShape2D_mvdrj"] diff --git a/scenes/world.tscn b/scenes/world.tscn index 859bfd0..08f585a 100644 --- a/scenes/world.tscn +++ b/scenes/world.tscn @@ -1,8 +1,8 @@ [gd_scene format=3 uid="uid://bj4fytc3sy482"] [ext_resource type="PackedScene" uid="uid://14fhj8834pkq" path="res://scenes/ui.tscn" id="1_nnsk1"] -[ext_resource type="PackedScene" uid="uid://coix5dqblmu7r" path="res://scenes/player.tscn" id="2_rwgxs"] [ext_resource type="Texture2D" uid="uid://b3dqvd23nbmrm" path="res://graphics/cloud layers.png" id="3_4wyf3"] +[ext_resource type="PackedScene" uid="uid://6wq3ynesnsha" path="res://scenes/player_revision.tscn" id="3_k0juu"] [node name="World" type="Node2D" unique_id=1317852169] @@ -10,11 +10,6 @@ [node name="UI" parent="Level" unique_id=480295610 instance=ExtResource("1_nnsk1")] -[node name="Player" parent="Level" unique_id=652131079 instance=ExtResource("2_rwgxs")] -z_index = 1 -position = Vector2(97, 173) -speed = 200 - [node name="Background" type="Node2D" parent="Level" unique_id=485120278] z_index = -1 @@ -81,3 +76,6 @@ texture = ExtResource("3_4wyf3") flip_h = true hframes = 4 frame = 3 + +[node name="Player" parent="Level" unique_id=652131079 instance=ExtResource("3_k0juu")] +position = Vector2(106, 312) diff --git a/scripts/movement_component.gd b/scripts/movement_component.gd index 6e63dd4..4832f3d 100644 --- a/scripts/movement_component.gd +++ b/scripts/movement_component.gd @@ -7,7 +7,6 @@ class_name MovementComponent extends Node @onready var weapon_component: WeaponComponent = %WeaponComponent - @onready var screensize = get_viewport().content_scale_size var input = Input.get_vector("left", "right", "up","down") @@ -16,10 +15,11 @@ func tick(delta: float): # Check to see if there's a player to move if player == null: return + var weapon_system = weapon_component.data # Calculate ship to bullet displacement player.ship_displacement = player.position.y - player.previous_position.y - player.travel += abs(weapon_component.bullet_data.speed) * delta + (player.ship_displacement) - player.travel = clamp(player.travel, 0, 1.9 * weapon_component.bullet_data.projectile_spacing) + player.travel += abs(weapon_system.speed) * delta + (player.ship_displacement) + player.travel = clamp(player.travel, 0, 1.9 * weapon_system.spacing) # Thruster animation in relation to player movement if input.x > 0: diff --git a/scripts/player_component.gd b/scripts/player_component.gd index 107e3bf..e8d4a21 100644 --- a/scripts/player_component.gd +++ b/scripts/player_component.gd @@ -1,13 +1,16 @@ class_name Player extends Area2D +# Components managed by Player @onready var input_component: InputComponent = %InputComponent @onready var movement_component: MovementComponent = %MovementComponent @onready var shoot_component: ShootComponent = %ShootComponent @onready var weapon_component: WeaponComponent = %WeaponComponent +# Variables for Player shooting status @export var can_shoot: bool = true @export var is_shooting: bool = false +# Variables for Player position calculations for equidistant bullets var previous_position: Vector2 var ship_displacement: float var travel: float = 0 @@ -18,14 +21,16 @@ func _process(delta) -> void: # Read Controls input_component.update() - # Read Movement Component - movement_component.input = input_component.move_dir - movement_component.tick(delta) - - # Read shooting + # Read Shooting if input_component.shooting: is_shooting = true else: is_shooting = false if is_shooting == true: shoot_component.shoot() + + # Read Movement Component + movement_component.input = input_component.move_dir + movement_component.tick(delta) + + diff --git a/scripts/player_shot.gd b/scripts/player_shot.gd index 30c1fee..ea0855d 100644 --- a/scripts/player_shot.gd +++ b/scripts/player_shot.gd @@ -9,7 +9,7 @@ extends Resource @export var damage: int = 1 @export var speed: int = 135 @export var projectiles: int = 2 -@export var projectile_spacing: float = 35 -@export var projectile_origin: int = -23 -@export var rate: float = 0.1 -@export var cooldown: float = 0.25 +@export var spacing: float = 35 +@export var origin: int = -23 +#@export var rate: float = 0.1 +#@export var cooldown: float = 0.25 diff --git a/scripts/shoot_component.gd b/scripts/shoot_component.gd index b026a0f..23e48cb 100644 --- a/scripts/shoot_component.gd +++ b/scripts/shoot_component.gd @@ -3,30 +3,35 @@ class_name ShootComponent extends Node @onready var weapon_component: Node = %WeaponComponent @onready var player: Player = $".." -var travel: float = 0 -var weapon_spacing: float = 0.1 +#var travel: float = 0 +#var weapon_spacing: float = 0.1 func shoot(): - if player.travel > weapon_component.bullet_data.projectile_spacing: + + var weapon_system = weapon_component.data + + if player.travel > weapon_system.spacing: print("Travel is greater!") - for b in range(weapon_component.bullet_data.projectiles): + for b in range(weapon_system.projectiles): # Instantiate the bullets var bullet = weapon_component.weapon_current.instantiate() get_tree().root.add_child(bullet) # Adjust bullet spacing before firing - bullet.position = player.position + Vector2((b - (weapon_component.bullet_data.projectiles - 1) / 2.0) * weapon_component.bullet_data.projectile_spacing, weapon_component.bullet_data.projectile_origin) - - ## Get weapon speed and spacing for equidistant calculations + bullet.position = player.position + Vector2((b - (weapon_system.projectiles - 1) / 2.0) * round(round((weapon_system.projectiles + weapon_system.spacing / 2)) / 2), weapon_system.origin) + print(b, bullet.position.x) + ## Get weapon speed and spacing for equidistant calculations - non comp #weapon_rate = bullet.weapon_component.bullet_data.rate #weapon_component.bullet_data.projectile_spacing = bullet.weapon_component.bullet_data.projectile_spacing #weapon_component.bullet_data.speed = bullet.weapon_component.bullet_data.speed # Print which weapon is firing prints(bullet.shot_data.shot_name, "weapon fired") - player.travel -= weapon_component.bullet_data.projectile_spacing + + # Subtract projectile spacing from current Player travel for next + player.travel -= weapon_system.spacing else: return diff --git a/scripts/weapon_component.gd b/scripts/weapon_component.gd index 137c0ec..b8ec8fb 100644 --- a/scripts/weapon_component.gd +++ b/scripts/weapon_component.gd @@ -1,7 +1,7 @@ class_name WeaponComponent extends Node @export var weapon_current : PackedScene -var bullet_data: PlayerShot = load("res://resources/player_weapons/shot_stock.tres") +var data: PlayerShot = load("res://resources/player_weapons/shot_stock.tres") #@export var projectile_origin: int = -23 #@export_category("Temp Bullet Data")