Added AbstractReloader
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
extends CharacterBody2D
|
extends CharacterBody2D
|
||||||
|
|
||||||
|
|
||||||
const Weapon = preload("res://game/entities/weapon.tscn")
|
const Weapon = preload("res://game/entities/weapons/weapon.tscn")
|
||||||
|
|
||||||
|
|
||||||
@export var size : Vector2:
|
@export var size : Vector2:
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
@abstract
|
||||||
|
class_name AbstractReloader
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
var random := RandomNumberGenerator.new()
|
||||||
|
|
||||||
|
|
||||||
|
@abstract
|
||||||
|
func can_shoot() -> bool
|
||||||
|
|
||||||
|
|
||||||
|
@abstract
|
||||||
|
func shoot() -> void
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://ccpriilfr3kme
|
||||||
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://b255rb32vc6co
|
||||||
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://d2gfhnlbqxsoq
|
||||||
@@ -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
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://dwm4iejnbuhxo"]
|
[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"]
|
[node name="Weapon" type="Node2D"]
|
||||||
script = ExtResource("1_4oq3a")
|
script = ExtResource("1_4oq3a")
|
||||||
Reference in New Issue
Block a user