61 lines
1.5 KiB
GDScript
61 lines
1.5 KiB
GDScript
extends Node2D
|
|
|
|
var shootingTime = 0
|
|
var bulletSpeed = 0
|
|
var hitpoint = 0
|
|
|
|
var follower = false
|
|
var target = null
|
|
|
|
const ARROW = preload("res://Game/Bullets/arrow.tscn")
|
|
|
|
|
|
func _ready() -> void:
|
|
follower = true
|
|
get_node("CharacterBody2D/Area2D").connect("body_entered", Callable(self, "choose_target"))
|
|
get_node("Timer").timeout.connect(shoot)
|
|
set_process_input(true)
|
|
set_properties()
|
|
|
|
func _process(delta: float) -> void:
|
|
if follower:
|
|
position = get_viewport().get_mouse_position()
|
|
if not target:
|
|
if get_node("CharacterBody2D/Area2D").get_overlapping_bodies():
|
|
choose_target(null)
|
|
|
|
func set_properties() -> void:
|
|
if self.name.contains("ArcherTower"):
|
|
get_node("Timer").wait_time = 0.8
|
|
bulletSpeed = 400
|
|
hitpoint = 50
|
|
|
|
|
|
func get_if_moving_state():
|
|
return follower
|
|
|
|
func _input(event):
|
|
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
|
|
if abs(position) <= get_viewport().get_mouse_position():
|
|
follower = false
|
|
|
|
func choose_target(body : Node2D) -> void:
|
|
if not follower:
|
|
var surroinding_enemies = get_node("CharacterBody2D/Area2D").get_overlapping_bodies()
|
|
target = surroinding_enemies[0]
|
|
for i in surroinding_enemies:
|
|
if i.get_parent().get_progress() > target.get_parent().get_progress():
|
|
target = i
|
|
pass
|
|
|
|
func shoot() -> void:
|
|
if target != null:
|
|
if self.name.contains("ArcherTower"):
|
|
var arrow = ARROW.instantiate()
|
|
arrow.position = self.position
|
|
arrow.set_speed(bulletSpeed)
|
|
arrow.set_targe(target)
|
|
arrow.set_hitpoint(hitpoint)
|
|
get_parent().add_child(arrow)
|
|
pass
|