From 557ddf62b2daf3c5be8c6ea6da94cadb0abba6be Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Mon, 27 Oct 2025 18:01:21 +0300 Subject: [PATCH] AbstractProjectile reworked to Projectile --- game/entities/player.tscn | 1 - .../projectiles/abstract_projectile.gd | 9 ---- .../projectiles/gatling_projectile.tscn | 10 ++++ .../weapons/projectiles/projectile.gd | 51 +++++++++++++++++++ ...ct_projectile.gd.uid => projectile.gd.uid} | 0 5 files changed, 61 insertions(+), 10 deletions(-) delete mode 100644 game/entities/weapons/projectiles/abstract_projectile.gd create mode 100644 game/entities/weapons/projectiles/gatling_projectile.tscn create mode 100644 game/entities/weapons/projectiles/projectile.gd rename game/entities/weapons/projectiles/{abstract_projectile.gd.uid => projectile.gd.uid} (100%) diff --git a/game/entities/player.tscn b/game/entities/player.tscn index 2e8d4c6..babbfc9 100644 --- a/game/entities/player.tscn +++ b/game/entities/player.tscn @@ -7,7 +7,6 @@ script = ExtResource("1_3a8sv") [node name="Ship" parent="." instance=ExtResource("2_ktqbp")] -motion_mode = 1 size = Vector2(48, 32) acceleration = 46 deceleration = 23 diff --git a/game/entities/weapons/projectiles/abstract_projectile.gd b/game/entities/weapons/projectiles/abstract_projectile.gd deleted file mode 100644 index c2407aa..0000000 --- a/game/entities/weapons/projectiles/abstract_projectile.gd +++ /dev/null @@ -1,9 +0,0 @@ -@abstract -class_name AbstractProjectile -extends Node - - -@export var bullet_velocity : int -@export var bullet_acceleration : int -@export var distance : int -@export var bullet_max_livetime : int diff --git a/game/entities/weapons/projectiles/gatling_projectile.tscn b/game/entities/weapons/projectiles/gatling_projectile.tscn new file mode 100644 index 0000000..00370a4 --- /dev/null +++ b/game/entities/weapons/projectiles/gatling_projectile.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=3 uid="uid://cnoiv8hdgossf"] + +[ext_resource type="Script" uid="uid://ctmjb3nkxrepu" path="res://game/entities/weapons/projectiles/projectile.gd" id="1_2ltai"] + +[node name="GatlingProjectile" type="CharacterBody2D"] +script = ExtResource("1_2ltai") +damage = 6 +speed = 600 +direction = Vector2(1, 0) +metadata/_custom_type_script = "uid://ctmjb3nkxrepu" diff --git a/game/entities/weapons/projectiles/projectile.gd b/game/entities/weapons/projectiles/projectile.gd new file mode 100644 index 0000000..9cba38e --- /dev/null +++ b/game/entities/weapons/projectiles/projectile.gd @@ -0,0 +1,51 @@ +class_name ProjectileMover +extends Node + + +signal destroyed + + +@export var damage : int +@export var speed : int +@export var direction : Vector2 +@export var acceleration : int +@export var max_distance : int +@export var max_livetime : int + + +var velocity : Vector2: + set(value): + pass + get: + return _velocity + +var _velocity : Vector2 +var _traveled_distance: float +var _livetime: float + + +func _ready() -> void: + _velocity = direction.normalized() * speed + + +func process_acceleration(delta: float) -> void: + var current_acceleration := acceleration * delta + if current_acceleration > 0: + _velocity += _velocity.normalized() * current_acceleration + elif current_acceleration < 0: + if _velocity.length() > current_acceleration: + _velocity += _velocity.normalized() * current_acceleration + else: + _velocity = Vector2.ZERO + + +func process_distance(delta: float) -> void: + _traveled_distance += _velocity.length() * delta + if max_distance > 0 and _traveled_distance > max_distance: + destroyed.emit() + + +func process_livetime(delta: float) -> void: + _livetime += delta + if _livetime > max_livetime: + destroyed.emit() diff --git a/game/entities/weapons/projectiles/abstract_projectile.gd.uid b/game/entities/weapons/projectiles/projectile.gd.uid similarity index 100% rename from game/entities/weapons/projectiles/abstract_projectile.gd.uid rename to game/entities/weapons/projectiles/projectile.gd.uid