Added bullet_per_shot and sector_angle implementation

This commit is contained in:
2025-11-07 00:50:23 +03:00
parent da44b52ae0
commit d9f0d80b18
4 changed files with 22 additions and 7 deletions
@@ -18,6 +18,7 @@ signal destroyed
@export var acceleration : int @export var acceleration : int
@export var max_distance : int @export var max_distance : int
@export var max_livetime : int @export var max_livetime : int
@export var piercing: int
@export var collide_player: bool: @export var collide_player: bool:
set(value): set(value):
@@ -65,12 +66,14 @@ func process_distance(delta: float) -> void:
_traveled_distance += velocity.length() * delta _traveled_distance += velocity.length() * delta
if max_distance > 0 and _traveled_distance > max_distance: if max_distance > 0 and _traveled_distance > max_distance:
destroyed.emit() destroyed.emit()
queue_free()
func process_livetime(delta: float) -> void: func process_livetime(delta: float) -> void:
_livetime += delta _livetime += delta
if _livetime > max_livetime: if _livetime > max_livetime:
destroyed.emit() destroyed.emit()
queue_free()
func _apply_collision_mask() -> void: func _apply_collision_mask() -> void:
collision_mask |= PROJECTILE_BORDER_LAYER collision_mask |= PROJECTILE_BORDER_LAYER
+17 -7
View File
@@ -7,9 +7,8 @@ enum Belonging { PLAYER, ENEMY }
@export var belonging: Belonging @export var belonging: Belonging
@export var damage : int @export var bullet_per_shot : int = 1
@export var bullet_per_shot : int @export var sector_angle : int = 0
@export var sector_angle : int
@export var Projectile : PackedScene @export var Projectile : PackedScene
@export var reloaders : Array[AbstractReloader] @export var reloaders : Array[AbstractReloader]
@@ -30,7 +29,17 @@ func _physics_process(delta: float) -> void:
func shoot() -> void: func shoot() -> void:
if not _can_shoot(): return if not _can_shoot(): return
for i in range(bullet_per_shot):
var projectile := _create_projectile()
get_tree().current_scene.add_child(projectile)
for reloader in _reloaders:
reloader.shoot()
func _create_projectile() -> Node:
var projectile := Projectile.instantiate() var projectile := Projectile.instantiate()
projectile.global_position = global_position
match belonging: match belonging:
Belonging.PLAYER: Belonging.PLAYER:
@@ -40,11 +49,12 @@ func shoot() -> void:
projectile.direction = Vector2.LEFT projectile.direction = Vector2.LEFT
projectile.collide_player = true projectile.collide_player = true
projectile.global_position = global_position if sector_angle > 0:
get_tree().current_scene.add_child(projectile) var sector_rad := deg_to_rad(sector_angle)
var random_angle := randfn(0.0, sector_rad / 6.0)
projectile.direction = projectile.direction.rotated(random_angle)
for reloader in _reloaders: return projectile
reloader.shoot()
func reload() -> void: func reload() -> void:
@@ -20,6 +20,7 @@ metadata/_custom_type_script = "uid://d2gfhnlbqxsoq"
[node name="GatlingGun" type="Node2D"] [node name="GatlingGun" type="Node2D"]
script = ExtResource("1_irb3o") script = ExtResource("1_irb3o")
sector_angle = 5
Projectile = ExtResource("2_kifyy") Projectile = ExtResource("2_kifyy")
reloaders = Array[ExtResource("3_lpe3m")]([SubResource("Resource_kifyy"), SubResource("Resource_6px3v")]) reloaders = Array[ExtResource("3_lpe3m")]([SubResource("Resource_kifyy"), SubResource("Resource_6px3v")])
metadata/_custom_type_script = "uid://dpqxs8hlql2o0" metadata/_custom_type_script = "uid://dpqxs8hlql2o0"
@@ -12,6 +12,7 @@ motion_mode = 1
script = ExtResource("1_hycpq") script = ExtResource("1_hycpq")
damage = 45 damage = 45
speed = 900 speed = 900
piercing = 1
metadata/_custom_type_script = "uid://ctmjb3nkxrepu" metadata/_custom_type_script = "uid://ctmjb3nkxrepu"
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]