- 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:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,6 @@
|
||||
class_name CannonPattern
|
||||
extends FirePattern
|
||||
|
||||
|
||||
func fire(pos: Vector2, dir: Vector2, spawn: Callable) -> void:
|
||||
spawn.call(pos, dir)
|
||||
@@ -0,0 +1,6 @@
|
||||
class_name FirePattern
|
||||
extends Resource
|
||||
|
||||
|
||||
func fire(_pos: Vector2, _dir: Vector2, _spawn: Callable) -> void:
|
||||
pass
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user