game: add weapon base and sword
This commit is contained in:
40
scenes/weapons/weapon_sword_projectile.gd
Normal file
40
scenes/weapons/weapon_sword_projectile.gd
Normal file
@@ -0,0 +1,40 @@
|
||||
class_name WeaponSwordProjectile
|
||||
extends Node2D
|
||||
|
||||
@export var speed: float = 500.0
|
||||
@export var range: float = 200.0
|
||||
@export var target: Node2D
|
||||
@export var damage: float
|
||||
@export var on_hit_sig: Signal
|
||||
|
||||
var _direction: Vector2
|
||||
var _traveled: float = 0.0
|
||||
var _already_hit: Array[PhysicsBody2D] = []
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_direction = global_position.direction_to(target.global_position).normalized()
|
||||
_traveled = 0.0
|
||||
rotation = _direction.angle()
|
||||
if _direction.x < 0:
|
||||
rotation += PI
|
||||
var proj_manager = get_tree().get_first_node_in_group(GlobalConst.GROUP_PROJ_MANAGER)
|
||||
if not proj_manager:
|
||||
return
|
||||
reparent(proj_manager, true)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var step = _direction * speed * delta
|
||||
global_position += step
|
||||
_traveled += step.length()
|
||||
|
||||
if _traveled >= range:
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_area_2d_body_entered(body: Node2D) -> void:
|
||||
if body in _already_hit:
|
||||
return
|
||||
on_hit_sig.emit(self, body)
|
||||
_already_hit.append(body)
|
Reference in New Issue
Block a user