feat: add weapons
CI / Test (pull_request) Successful in 22s

- add fire pattern (base interface for all weapons)
- add shotgun and cannon pattern
- add basic projectile
- add input map for shoot
This commit is contained in:
2026-05-15 20:51:52 +03:00
parent 742e0e4ae1
commit d1ae049b00
10 changed files with 110 additions and 0 deletions
+13
View File
@@ -4,8 +4,15 @@ extends CharacterBody2D
@export var friction := 0.98
@export var max_speed := 1000.0
@onready var weapons = get_children().filter(func(c): return c is Weapon)
func _physics_process(delta: float) -> void:
handle_move(delta)
handle_shoot()
func handle_move(delta: float) -> void:
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
velocity += direction * thrust * delta
@@ -13,3 +20,9 @@ func _physics_process(delta: float) -> void:
velocity = velocity.limit_length(max_speed)
move_and_slide()
func handle_shoot() -> void:
if Input.is_action_just_pressed("shoot"):
for w in weapons:
w.shoot()
+17
View File
@@ -0,0 +1,17 @@
class_name Weapon
extends Node2D
@export var projectile_scene: PackedScene
@export var fire_pattern: FirePattern
func shoot() -> void:
fire_pattern.fire(global_position, -global_transform.y, spawn_projectile)
func spawn_projectile(pos: Vector2, dir: Vector2):
var proj = projectile_scene.instantiate()
proj.global_position = pos
proj.direction = dir
get_tree().current_scene.get_parent().add_child(proj)
return proj
+6
View File
@@ -0,0 +1,6 @@
class_name CannonPattern
extends FirePattern
func fire(pos: Vector2, dir: Vector2, spawn: Callable) -> void:
spawn.call(pos, dir)
+6
View File
@@ -0,0 +1,6 @@
class_name FirePattern
extends Resource
func fire(_pos: Vector2, _dir: Vector2, _spawn: Callable) -> void:
pass
+12
View File
@@ -0,0 +1,12 @@
extends Area2D
@export var speed := 600.0
var direction: Vector2 = Vector2.RIGHT
func _physics_process(delta):
global_position += direction * speed * delta
func _on_visible_on_screen_enabler_2d_screen_exited() -> void:
queue_free()
+12
View File
@@ -0,0 +1,12 @@
class_name ShotgunPattern
extends FirePattern
@export var bullets := 5
@export var spread := 0.25
func fire(pos: Vector2, dir: Vector2, spawn: Callable) -> void:
for i in range(bullets):
var angle := randf_range(-spread, spread)
var new_dir := dir.rotated(angle)
spawn.call(pos, new_dir)