108 lines
3.1 KiB
GDScript
108 lines
3.1 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")
|
|
|
|
var lifter = false
|
|
var lifteramount = 0
|
|
|
|
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)
|
|
if lifter:
|
|
lifteramount += 4
|
|
if lifteramount <= 40:
|
|
get_node("CharacterBody2D/lifter - 1").position.y -= 4
|
|
get_node("CharacterBody2D/lifter - 2").position.y -= 4
|
|
elif lifteramount >= 40 and lifteramount <= 80:
|
|
get_node("CharacterBody2D/lifter - 1").position.y += 4
|
|
get_node("CharacterBody2D/lifter - 2").position.y += 4
|
|
elif lifteramount >= 80:
|
|
lifteramount = 0
|
|
lifter = false
|
|
|
|
|
|
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 = 80
|
|
|
|
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") or self.name.contains("MortarTower"):
|
|
for i in surroinding_enemies:
|
|
if i.get_parent().get_progress() > target.get_parent().get_progress():
|
|
target = i
|
|
if self.name.contains("WizardTower"):
|
|
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)
|
|
lifter = true
|
|
pass
|