fuzzyworld

godot-shooter / asteroids / files / weapons / Weapon.gd

Branch asteroids · default branch · all branches

Weapon.gd

1.1 KB · history · blame

1class_name Weapon
2
3var cooldown_seconds = .5
4var shooting_range = 400
5var particle: PackedScene
6var particle_speed = 100
7var particle_lifetime_secs = 5
8var damage_amount = 1
9var ammo = INF
10var name = "Laser"
11var reload_size = 1
12var last_shoot_time: float
13
14const Utils = preload("res://utils/Utils.gd")
15
16func _init() -> void:
17 var now = Time.get_unix_time_from_system()
18 last_shoot_time = now
19
20func try_shoot(shooter: Node2D, target: Vector2) -> void:
21 var has_ammo = ammo == INF or ammo > 0
22 if not has_ammo:
23 return
24
25 var now = Time.get_unix_time_from_system()
26 var sec_since_shot = now - last_shoot_time
27 var can_shoot = sec_since_shot > cooldown_seconds
28 if not can_shoot:
29 return
30
31 if ammo != INF:
32 ammo = ammo - 1
33
34 var parent = shooter.get_parent()
35 var particle_instance = particle.instance()
36 parent.add_child(particle_instance)
37 particle_instance.transform = shooter.global_transform
38 particle_instance.damage_amount = self.damage_amount
39 particle_instance.global_rotation = shooter.global_position.angle_to_point(target) + PI / 2.0
40 particle_instance.shooter_rid = shooter.get_instance_id()
41 last_shoot_time = now