game: add weapon base and sword
This commit is contained in:
42
scenes/weapons/weapon_base.gd
Normal file
42
scenes/weapons/weapon_base.gd
Normal file
@@ -0,0 +1,42 @@
|
||||
class_name WeaponBase
|
||||
extends Node2D
|
||||
|
||||
@export var attack_cd: float
|
||||
@export var attack_damage: float
|
||||
@export var attack_aoe: float
|
||||
@export var attack_duration: float
|
||||
@export var attack_range: float
|
||||
|
||||
|
||||
func _on_attack_cd_timer_timeout() -> void:
|
||||
do_attack()
|
||||
|
||||
|
||||
func do_attack() -> void:
|
||||
push_error("%s does not implement do_attack" % self)
|
||||
|
||||
|
||||
func find_target_in_radius() -> EnemyBase:
|
||||
var space_state: PhysicsDirectSpaceState2D = get_world_2d().direct_space_state
|
||||
var shape := CircleShape2D.new()
|
||||
shape.radius = attack_range
|
||||
|
||||
var query := PhysicsShapeQueryParameters2D.new()
|
||||
query.shape = shape
|
||||
query.transform = Transform2D(0, global_position)
|
||||
query.collision_mask = 2
|
||||
query.collide_with_bodies = true
|
||||
var results := space_state.intersect_shape(query)
|
||||
if len(results) < 1:
|
||||
return null
|
||||
var closest: PhysicsBody2D = results[0]["collider"]
|
||||
for r in results:
|
||||
var c: PhysicsBody2D = r["collider"]
|
||||
if not c.is_in_group(GlobalConst.GROUP_ENEMY):
|
||||
continue
|
||||
if (
|
||||
c.global_position.distance_to(global_position)
|
||||
< closest.global_position.distance_to(global_position)
|
||||
):
|
||||
closest = c
|
||||
return closest
|
Reference in New Issue
Block a user