Added gatling gun and railgun
This commit is contained in:
@@ -15,7 +15,7 @@ func _physics_process(delta: float) -> void:
|
||||
var input_direction := Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||
ship.accelerate(input_direction, delta)
|
||||
|
||||
var weapons : Array[Weapon] = ship.weapons
|
||||
var weapons : Array[AbstractWeapon] = ship.weapons
|
||||
var weapon_actions := {
|
||||
0: ["shoot_weapon_1", "reload_weapon_1"],
|
||||
1: ["shoot_weapon_2", "reload_weapon_2"]
|
||||
|
||||
@@ -21,7 +21,7 @@ extends CharacterBody2D
|
||||
@export var deceleration : int
|
||||
@export var max_speed : int
|
||||
|
||||
@onready var weapons : Array[Weapon]:
|
||||
@onready var weapons : Array[AbstractWeapon]:
|
||||
set(value):
|
||||
pass
|
||||
get:
|
||||
@@ -33,10 +33,11 @@ func _ready() -> void:
|
||||
texture.size = size
|
||||
sprite.texture = texture
|
||||
|
||||
const WEAPON = preload("res://game/entities/weapons/weapon.tscn")
|
||||
const GATLING = preload("res://game/entities/weapons/gatling_gun/gatling_gun.tscn")
|
||||
const RAILGUN = preload("res://game/entities/weapons/railgun/railgun.tscn")
|
||||
var weapons_by_offset := {
|
||||
8: WEAPON.instantiate(),
|
||||
-8: WEAPON.instantiate(),
|
||||
8: GATLING.instantiate(),
|
||||
-8: RAILGUN.instantiate(),
|
||||
}
|
||||
for offset : int in weapons_by_offset:
|
||||
var weapon : Node2D = weapons_by_offset[offset]
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
class_name AbstractWeapon
|
||||
extends Node2D
|
||||
|
||||
|
||||
enum Belonging { PLAYER, ENEMY }
|
||||
|
||||
|
||||
@export var belonging: Belonging
|
||||
|
||||
@export var damage : int
|
||||
@export var bullet_per_shot : int
|
||||
@export var sector_angle : int
|
||||
@export var Projectile : PackedScene
|
||||
@export var reloaders : Array[AbstractReloader]
|
||||
|
||||
|
||||
var _reloaders : Array[AbstractReloader]
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
for reloader in reloaders:
|
||||
_reloaders.append(reloader.duplicate())
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
for reloader in _reloaders:
|
||||
reloader.process(delta)
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
if not _can_shoot(): return
|
||||
|
||||
var projectile := Projectile.instantiate()
|
||||
|
||||
match belonging:
|
||||
Belonging.PLAYER:
|
||||
projectile.direction = Vector2.RIGHT
|
||||
projectile.collide_enemies = true
|
||||
Belonging.ENEMY:
|
||||
projectile.direction = Vector2.LEFT
|
||||
projectile.collide_player = true
|
||||
|
||||
add_child(projectile)
|
||||
|
||||
for reloader in _reloaders:
|
||||
reloader.shoot()
|
||||
|
||||
|
||||
func reload() -> void:
|
||||
for reloader in _reloaders:
|
||||
reloader.reload()
|
||||
|
||||
|
||||
func _can_shoot() -> bool:
|
||||
for reloader in _reloaders:
|
||||
if not reloader.can_shoot():
|
||||
return false
|
||||
return true
|
||||
@@ -0,0 +1,23 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://1o2ta17yc5bp"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dpqxs8hlql2o0" path="res://game/entities/weapons/abstract_weapon.gd" id="1_x30ps"]
|
||||
[ext_resource type="PackedScene" uid="uid://cnoiv8hdgossf" path="res://game/entities/weapons/gatling_gun/gatling_projectile.tscn" id="2_7kmqt"]
|
||||
[ext_resource type="Script" uid="uid://ccpriilfr3kme" path="res://game/entities/weapons/reloaders/abstract_reloader.gd" id="3_x30ps"]
|
||||
[ext_resource type="Script" uid="uid://d2gfhnlbqxsoq" path="res://game/entities/weapons/reloaders/magazine_reloader.gd" id="4_7kmqt"]
|
||||
[ext_resource type="Script" uid="uid://b255rb32vc6co" path="res://game/entities/weapons/reloaders/firerate_reloader.gd" id="5_jj42u"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_xi513"]
|
||||
script = ExtResource("4_7kmqt")
|
||||
magazine_size = 5
|
||||
reload_time = 2
|
||||
metadata/_custom_type_script = "uid://d2gfhnlbqxsoq"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_kq1js"]
|
||||
script = ExtResource("5_jj42u")
|
||||
firerate = 120
|
||||
metadata/_custom_type_script = "uid://b255rb32vc6co"
|
||||
|
||||
[node name="Weapon" type="Node2D"]
|
||||
script = ExtResource("1_x30ps")
|
||||
Projectile = ExtResource("2_7kmqt")
|
||||
reloaders = Array[ExtResource("3_x30ps")]([SubResource("Resource_xi513"), SubResource("Resource_kq1js")])
|
||||
@@ -0,0 +1,12 @@
|
||||
extends AbstractWeapon
|
||||
|
||||
|
||||
@onready var sprite := $Sprite2D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var texture := PlaceholderTexture2D.new()
|
||||
texture.size = Vector2(10, 7)
|
||||
sprite.texture = texture
|
||||
|
||||
super._ready()
|
||||
@@ -0,0 +1 @@
|
||||
uid://c1bsvmj7xhnxe
|
||||
@@ -0,0 +1,26 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://c4vvw741175tj"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c1bsvmj7xhnxe" path="res://game/entities/weapons/gatling_gun/gatling_gun.gd" id="1_irb3o"]
|
||||
[ext_resource type="PackedScene" uid="uid://cnoiv8hdgossf" path="res://game/entities/weapons/gatling_gun/gatling_projectile.tscn" id="2_kifyy"]
|
||||
[ext_resource type="Script" uid="uid://ccpriilfr3kme" path="res://game/entities/weapons/reloaders/abstract_reloader.gd" id="3_lpe3m"]
|
||||
[ext_resource type="Script" uid="uid://b255rb32vc6co" path="res://game/entities/weapons/reloaders/firerate_reloader.gd" id="4_uk8wm"]
|
||||
[ext_resource type="Script" uid="uid://d2gfhnlbqxsoq" path="res://game/entities/weapons/reloaders/magazine_reloader.gd" id="5_376q2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_83oj5"]
|
||||
script = ExtResource("4_uk8wm")
|
||||
firerate = 600
|
||||
metadata/_custom_type_script = "uid://b255rb32vc6co"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_6px3v"]
|
||||
script = ExtResource("5_376q2")
|
||||
magazine_size = 300
|
||||
reload_time = 2
|
||||
metadata/_custom_type_script = "uid://d2gfhnlbqxsoq"
|
||||
|
||||
[node name="GatlingGun" type="Node2D"]
|
||||
script = ExtResource("1_irb3o")
|
||||
Projectile = ExtResource("2_kifyy")
|
||||
reloaders = Array[ExtResource("3_lpe3m")]([SubResource("Resource_83oj5"), SubResource("Resource_6px3v")])
|
||||
metadata/_custom_type_script = "uid://dpqxs8hlql2o0"
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://cnoiv8hdgossf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://rtsf1n0djorp" path="res://game/entities/weapons/projectiles/gatling_projectile.gd" id="1_xq7oi"]
|
||||
[ext_resource type="Script" uid="uid://rtsf1n0djorp" path="res://game/entities/weapons/gatling_gun/gatling_projectile.gd" id="1_xq7oi"]
|
||||
|
||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_xq7oi"]
|
||||
size = Vector2(4, 4)
|
||||
@@ -1,9 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bohp8yx6cldgc"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ctmjb3nkxrepu" path="res://game/entities/weapons/projectiles/abstract_projectile.gd" id="1_4tgfk"]
|
||||
|
||||
[node name="AbstractProjectile" type="CharacterBody2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
motion_mode = 1
|
||||
script = ExtResource("1_4tgfk")
|
||||
@@ -0,0 +1,12 @@
|
||||
extends AbstractWeapon
|
||||
|
||||
|
||||
@onready var sprite := $Sprite2D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var texture := PlaceholderTexture2D.new()
|
||||
texture.size = Vector2(10, 7)
|
||||
sprite.texture = texture
|
||||
|
||||
super._ready()
|
||||
@@ -0,0 +1 @@
|
||||
uid://drnofu4ium56e
|
||||
@@ -0,0 +1,26 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://4ikdkhxoiwox"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://drnofu4ium56e" path="res://game/entities/weapons/railgun/railgun.gd" id="1_5nhwg"]
|
||||
[ext_resource type="PackedScene" uid="uid://dpd6qm3e3wbjx" path="res://game/entities/weapons/railgun/railgun_projectile.tscn" id="2_cbsia"]
|
||||
[ext_resource type="Script" uid="uid://ccpriilfr3kme" path="res://game/entities/weapons/reloaders/abstract_reloader.gd" id="3_qxka8"]
|
||||
[ext_resource type="Script" uid="uid://b255rb32vc6co" path="res://game/entities/weapons/reloaders/firerate_reloader.gd" id="4_igknv"]
|
||||
[ext_resource type="Script" uid="uid://d2gfhnlbqxsoq" path="res://game/entities/weapons/reloaders/magazine_reloader.gd" id="5_buejq"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_6wi8i"]
|
||||
script = ExtResource("4_igknv")
|
||||
firerate = 60
|
||||
metadata/_custom_type_script = "uid://b255rb32vc6co"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_2gq2l"]
|
||||
script = ExtResource("5_buejq")
|
||||
magazine_size = 30
|
||||
reload_time = 7
|
||||
metadata/_custom_type_script = "uid://d2gfhnlbqxsoq"
|
||||
|
||||
[node name="Railgun" type="Node2D"]
|
||||
script = ExtResource("1_5nhwg")
|
||||
Projectile = ExtResource("2_cbsia")
|
||||
reloaders = Array[ExtResource("3_qxka8")]([SubResource("Resource_6wi8i"), SubResource("Resource_2gq2l")])
|
||||
metadata/_custom_type_script = "uid://dpqxs8hlql2o0"
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
@@ -0,0 +1,9 @@
|
||||
extends AbstractProjectile
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var texture := PlaceholderTexture2D.new()
|
||||
texture.size = Vector2(6, 6)
|
||||
$Sprite2D.texture = texture
|
||||
|
||||
super._ready()
|
||||
@@ -0,0 +1 @@
|
||||
uid://n3h1e3pj02g0
|
||||
@@ -0,0 +1,20 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dpd6qm3e3wbjx"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://n3h1e3pj02g0" path="res://game/entities/weapons/railgun/railgun_projectile.gd" id="1_hycpq"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_hycpq"]
|
||||
radius = 2.0
|
||||
|
||||
[node name="RailgunProjectile" type="CharacterBody2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
motion_mode = 1
|
||||
script = ExtResource("1_hycpq")
|
||||
damage = 45
|
||||
speed = 300
|
||||
metadata/_custom_type_script = "uid://ctmjb3nkxrepu"
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_hycpq")
|
||||
@@ -1,11 +1,15 @@
|
||||
@abstract
|
||||
extends Resource
|
||||
class_name AbstractReloader
|
||||
extends Node
|
||||
|
||||
|
||||
var _random := RandomNumberGenerator.new()
|
||||
|
||||
|
||||
@abstract
|
||||
func process(delta: float) -> void
|
||||
|
||||
|
||||
@abstract
|
||||
func can_shoot() -> bool
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
extends AbstractReloader
|
||||
class_name EnergyReloader
|
||||
|
||||
|
||||
@export var heat_per_shot : int:
|
||||
@@ -32,7 +33,7 @@ func _ready() -> void:
|
||||
_calculate_cool()
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
func process(delta: float) -> void:
|
||||
if _heat > 0:
|
||||
_heat -= _cool_per_sec * delta
|
||||
if _heat < 0:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
extends AbstractReloader
|
||||
class_name FirerateReloader
|
||||
|
||||
|
||||
@export var firerate : int:
|
||||
@@ -16,7 +17,7 @@ func _ready() -> void:
|
||||
_calculate_delay()
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
func process(delta: float) -> void:
|
||||
if _cooldown > 0:
|
||||
_cooldown -= delta
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
extends AbstractReloader
|
||||
class_name MagazineReloader
|
||||
|
||||
|
||||
@export var magazine_size : int:
|
||||
@@ -23,7 +24,7 @@ func _ready() -> void:
|
||||
_calculate_reload_time_tenth()
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
func process(delta: float) -> void:
|
||||
if _countdown > 0:
|
||||
_countdown -= delta
|
||||
if _countdown <= 0:
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
class_name Weapon
|
||||
extends Node2D
|
||||
|
||||
|
||||
enum Belonging { PLAYER, ENEMY }
|
||||
|
||||
|
||||
@export var belonging: Belonging
|
||||
|
||||
@export var damage : int
|
||||
@export var bullet_per_shot : int
|
||||
@export var sector_angle : int
|
||||
#@export var Projectile : AbstractProjectile
|
||||
@export var reloaders : Array[AbstractReloader]
|
||||
|
||||
|
||||
@onready var sprite := $Sprite2D
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
#TEST
|
||||
var firerate_reloader := preload("res://game/entities/weapons/reloaders/firerate_reloader.gd").new()
|
||||
firerate_reloader.firerate = 600
|
||||
reloaders.append(firerate_reloader)
|
||||
add_child(firerate_reloader)
|
||||
|
||||
var magazine_reloader := preload("res://game/entities/weapons/reloaders/magazine_reloader.gd").new()
|
||||
magazine_reloader.magazine_size = 300
|
||||
magazine_reloader.reload_time = 2
|
||||
reloaders.append(magazine_reloader)
|
||||
add_child(magazine_reloader)
|
||||
|
||||
#var energy_reloader := preload("res://game/entities/weapons/reloaders/energy_reloader.gd").new()
|
||||
#energy_reloader.heat_capacity = 1000
|
||||
#energy_reloader.heat_per_shot = 25
|
||||
#energy_reloader.cooling_down_rate = 1000
|
||||
#reloaders.append(energy_reloader)
|
||||
#add_child(energy_reloader)
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var texture := PlaceholderTexture2D.new()
|
||||
texture.size = Vector2(10, 7)
|
||||
sprite.texture = texture
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
if not _can_shoot(): return
|
||||
|
||||
var projectile := preload("res://game/entities/weapons/projectiles/gatling_projectile.tscn").instantiate()
|
||||
|
||||
match belonging:
|
||||
Belonging.PLAYER:
|
||||
projectile.direction = Vector2.RIGHT
|
||||
projectile.collide_enemies = true
|
||||
Belonging.ENEMY:
|
||||
projectile.direction = Vector2.LEFT
|
||||
projectile.collide_player = true
|
||||
|
||||
add_child(projectile)
|
||||
|
||||
for reloader in reloaders:
|
||||
reloader.shoot()
|
||||
|
||||
|
||||
func reload() -> void:
|
||||
for reloader in reloaders:
|
||||
reloader.reload()
|
||||
|
||||
|
||||
func _can_shoot() -> bool:
|
||||
for reloader in reloaders:
|
||||
if not reloader.can_shoot():
|
||||
return false
|
||||
return true
|
||||
@@ -1,12 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dwm4iejnbuhxo"]
|
||||
|
||||
[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")
|
||||
belonging = null
|
||||
damage = null
|
||||
bullet_per_shot = null
|
||||
sector_angle = null
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
Reference in New Issue
Block a user