Files
Defensaria/Game/Towers/towers.gd
2025-04-30 00:46:12 +02:00

93 lines
2.7 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")
const MAGIC = preload("res://Game/Bullets/magic.tscn")
const ROCK = preload("res://Game/Bullets/rock.tscn")
func _ready() -> void:
follower = true
get_node("CharacterBody2D/Area2D").body_entered.connect(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.5
bulletSpeed = 600
hitpoint = 25
if self.name.contains("WizardTower"):
get_node("Timer").wait_time = 2.0
bulletSpeed = 450
hitpoint = 10
if self.name.contains("MortarTower"): #??? not sure if necessary yet
get_node("Timer").wait_time = 5
hitpoint = 10
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]
if self.name.contains("ArcherTower"):
for i in surroinding_enemies:
if i.get_parent().get_progress() > target.get_parent().get_progress():
target = i
if self.name.contains("WizardTower") or self.name.contains("MortarTower"):
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.name = "Arrow" + str(randi())
arrow.position = self.position
arrow.set_speed(bulletSpeed)
arrow.set_targe(target)
arrow.set_hitpoint(hitpoint)
get_parent().add_child(arrow)
if self.name.contains("WizardTower"):
var magic = MAGIC.instantiate()
magic.name = "Magic" + str(randi())
magic.position = self.position
magic.set_speed(bulletSpeed)
magic.set_targe(target)
magic.set_hitpoint(hitpoint)
get_parent().add_child(magic)
if self.name.contains("MortarTower"):
var rock = ROCK.instantiate()
rock.name = "Rock" + str(randi())
rock.position = self.position
rock.set_speed(bulletSpeed)
rock.set_targe(target)
rock.set_hitpoint(hitpoint)
get_parent().add_child(rock)
pass