You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
1.2 KiB
30 lines
1.2 KiB
extends Node2D
|
|
|
|
@export var bullet: PackedScene
|
|
@export var spread = 10.0
|
|
@export var recoil = 600.0
|
|
@export var fire_rate = 20
|
|
|
|
var last_fired = 0.0
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(_delta):
|
|
if Input.is_action_pressed("fire") and (Time.get_ticks_msec() - last_fired) > fire_rate:
|
|
last_fired = Time.get_ticks_msec()
|
|
fire.rpc()
|
|
|
|
@rpc("any_peer", "call_local")
|
|
func fire():
|
|
if get_parent().get_node("MultiplayerSynchronizer").get_multiplayer_authority() != get_parent().multiplayer.get_unique_id():
|
|
return
|
|
var color = get_parent().get_node("Sprite2D").modulate
|
|
var new_bullet = bullet.instantiate()
|
|
new_bullet.get_node("Trail/Sprite2D").modulate = color
|
|
new_bullet.get_node("Trail").default_color = color
|
|
new_bullet.get_node("Trail/PointLight2D").color = color
|
|
new_bullet.get_node("Fire").pitch_scale = randf_range(0.95, 1.05)
|
|
new_bullet.position = global_position
|
|
new_bullet.velocity = Vector2.from_angle(rotation + deg_to_rad(randf_range(-spread / 2, spread / 2))) * new_bullet.speed;
|
|
get_tree().root.add_child(new_bullet)
|
|
get_parent().apply_central_impulse(-recoil * Vector2(cos(rotation), sin(rotation)))
|