ArcherTower and Arrows
This commit is contained in:
55
Game/Towers/towers.gd
Normal file
55
Game/Towers/towers.gd
Normal file
@ -0,0 +1,55 @@
|
||||
extends Node2D
|
||||
|
||||
var shootingTime = 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
|
||||
|
||||
|
||||
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:
|
||||
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(250)
|
||||
arrow.set_targe(target)
|
||||
arrow.set_hitpoint(50)
|
||||
get_parent().add_child(arrow)
|
||||
pass
|
Reference in New Issue
Block a user