diff --git a/game/entities/ship.gd b/game/entities/ship.gd index a9ff634..52eebd8 100644 --- a/game/entities/ship.gd +++ b/game/entities/ship.gd @@ -1,7 +1,7 @@ extends CharacterBody2D -const Weapon = preload("res://game/entities/weapon.tscn") +const Weapon = preload("res://game/entities/weapons/weapon.tscn") @export var size : Vector2: diff --git a/game/entities/weapon.gd b/game/entities/weapon.gd deleted file mode 100644 index a8683d0..0000000 --- a/game/entities/weapon.gd +++ /dev/null @@ -1,77 +0,0 @@ -extends Node2D - - -@export var damage : int -@export var firerate : int -@export var magazine_size : int -@export var reload_time : int -@export var bullet_velocity : int -@export var bullet_acceleration : int -@export var bullet_per_shot : int -@export var sector_angle : int -@export var distance : int -@export var heat_per_shot : int -@export var heat_capacity : int -@export var cooling_down_rate : int -@export var explosion_size : int - - -@onready var _firerate_delay : float = 60.0 / firerate -@onready var _firerate_delay_tenth : float = _firerate_delay / 10 - -@onready var _bullets_in_magazine : int = magazine_size if magazine_size > 0 else -1 - -@onready var _reload_time_tenth : float = reload_time / 10.0 - - -var _firerate_cooldown : float -var _reload_cooldown : float - -var random := RandomNumberGenerator.new() - - -func _init() -> void: -#TEST - firerate = 600 - magazine_size = 300 - reload_time = 2 - - -func _ready() -> void: - var texture := PlaceholderTexture2D.new() - texture.size = Vector2(10, 7) - $Sprite2D.texture = texture - - -func _process(delta: float) -> void: - if _firerate_cooldown > 0: - _firerate_cooldown -= delta - if _reload_cooldown > 0: - _reload_cooldown -= delta - - if _bullets_in_magazine == 0 and _reload_cooldown <= 0: - _bullets_in_magazine = magazine_size - - -func shoot() -> void: - if not _can_shoot(): return - - var random_firerate_delay := random.randf_range(-_firerate_delay_tenth, _firerate_delay_tenth) - _firerate_cooldown = _firerate_delay + random_firerate_delay - - if _bullets_in_magazine > 0: - _bullets_in_magazine -= 1 - - if _bullets_in_magazine == 0: - var random_reload_delay := random.randf_range(-_reload_time_tenth, _reload_time_tenth) - _reload_cooldown = reload_time + random_reload_delay - - print("shoot") - - -func _can_shoot() -> bool: - if _firerate_cooldown > 0: return false - - if _reload_cooldown > 0: return false - - return true diff --git a/game/entities/weapons/reloaders/abstract_reloader.gd b/game/entities/weapons/reloaders/abstract_reloader.gd new file mode 100644 index 0000000..6328fc4 --- /dev/null +++ b/game/entities/weapons/reloaders/abstract_reloader.gd @@ -0,0 +1,14 @@ +@abstract +class_name AbstractReloader +extends Node + + +var random := RandomNumberGenerator.new() + + +@abstract +func can_shoot() -> bool + + +@abstract +func shoot() -> void diff --git a/game/entities/weapons/reloaders/abstract_reloader.gd.uid b/game/entities/weapons/reloaders/abstract_reloader.gd.uid new file mode 100644 index 0000000..1173951 --- /dev/null +++ b/game/entities/weapons/reloaders/abstract_reloader.gd.uid @@ -0,0 +1 @@ +uid://ccpriilfr3kme diff --git a/game/entities/weapons/reloaders/firerate_reloader.gd b/game/entities/weapons/reloaders/firerate_reloader.gd new file mode 100644 index 0000000..87141fa --- /dev/null +++ b/game/entities/weapons/reloaders/firerate_reloader.gd @@ -0,0 +1,25 @@ +extends AbstractReloader + + +@export var firerate : int + + +@onready var _delay : float = 60.0 / firerate +@onready var _delay_tenth : float = _delay / 10 + + +var _cooldown : float + + +func _process(delta: float) -> void: + if _cooldown > 0: + _cooldown -= delta + + +func can_shoot() -> bool: + return _cooldown <= 0 + + +func shoot() -> void: + var random_delay := random.randf_range(-_delay_tenth, _delay_tenth) + _cooldown = _delay + random_delay diff --git a/game/entities/weapons/reloaders/firerate_reloader.gd.uid b/game/entities/weapons/reloaders/firerate_reloader.gd.uid new file mode 100644 index 0000000..fa8d9de --- /dev/null +++ b/game/entities/weapons/reloaders/firerate_reloader.gd.uid @@ -0,0 +1 @@ +uid://b255rb32vc6co diff --git a/game/entities/weapons/reloaders/magazine_reloader.gd b/game/entities/weapons/reloaders/magazine_reloader.gd new file mode 100644 index 0000000..0dec75f --- /dev/null +++ b/game/entities/weapons/reloaders/magazine_reloader.gd @@ -0,0 +1,33 @@ +extends AbstractReloader + + +@export var magazine_size : int +@export var reload_time : int + + +@onready var _bullets_in_magazine : int = magazine_size if magazine_size > 0 else -1 +@onready var _reload_time_tenth : float = reload_time / 10.0 + + +var _cooldown : float + + +func _process(delta: float) -> void: + if _cooldown > 0: + _cooldown -= delta + + if _bullets_in_magazine == 0 and _cooldown <= 0: + _bullets_in_magazine = magazine_size + + +func can_shoot() -> bool: + return _bullets_in_magazine > 0 + + +func shoot() -> void: + if _bullets_in_magazine > 0: + _bullets_in_magazine -= 1 + + if _bullets_in_magazine == 0: + var random_delay := random.randf_range(-_reload_time_tenth, _reload_time_tenth) + _cooldown = reload_time + random_delay diff --git a/game/entities/weapons/reloaders/magazine_reloader.gd.uid b/game/entities/weapons/reloaders/magazine_reloader.gd.uid new file mode 100644 index 0000000..08637e6 --- /dev/null +++ b/game/entities/weapons/reloaders/magazine_reloader.gd.uid @@ -0,0 +1 @@ +uid://d2gfhnlbqxsoq diff --git a/game/entities/weapons/weapon.gd b/game/entities/weapons/weapon.gd new file mode 100644 index 0000000..a981774 --- /dev/null +++ b/game/entities/weapons/weapon.gd @@ -0,0 +1,38 @@ +extends Node2D + + +@export var damage : int +@export var firerate : int +@export var magazine_size : int +@export var reload_time : int +@export var bullet_velocity : int +@export var bullet_acceleration : int +@export var bullet_per_shot : int +@export var sector_angle : int +@export var distance : int +@export var heat_per_shot : int +@export var heat_capacity : int +@export var cooling_down_rate : int +@export var explosion_size : int + + +func _init() -> void: +#TEST + firerate = 600 + magazine_size = 300 + reload_time = 2 + + +func _ready() -> void: + var texture := PlaceholderTexture2D.new() + texture.size = Vector2(10, 7) + $Sprite2D.texture = texture + + +func shoot() -> void: + if not _can_shoot(): return + print("shoot") + + +func _can_shoot() -> bool: + return true diff --git a/game/entities/weapon.gd.uid b/game/entities/weapons/weapon.gd.uid similarity index 100% rename from game/entities/weapon.gd.uid rename to game/entities/weapons/weapon.gd.uid diff --git a/game/entities/weapon.tscn b/game/entities/weapons/weapon.tscn similarity index 83% rename from game/entities/weapon.tscn rename to game/entities/weapons/weapon.tscn index 96b144f..459e213 100644 --- a/game/entities/weapon.tscn +++ b/game/entities/weapons/weapon.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dwm4iejnbuhxo"] -[ext_resource type="Script" uid="uid://dpqxs8hlql2o0" path="res://game/entities/weapon.gd" id="1_4oq3a"] +[ext_resource type="Script" uid="uid://dpqxs8hlql2o0" path="res://game/entities/weapons/weapon.gd" id="1_4oq3a"] [node name="Weapon" type="Node2D"] script = ExtResource("1_4oq3a")