Added bullet_per_shot and sector_angle implementation
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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="."]
|
||||||
|
|||||||
Reference in New Issue
Block a user