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 name.contains("MortarTower"): if get_node("Area2D").get_overlapping_bodies().size() > 1: get_node("CharacterBody2D/AnimatedSprite2D").modulate = Color(255, 0, 0, 0.3) else: get_node("CharacterBody2D/AnimatedSprite2D").modulate = Color(1, 1, 1, 1) else: if get_node("Area2D").get_overlapping_bodies().size() > 1: get_node("CharacterBody2D/lifter - 1").modulate = Color(255, 0, 0, 0.3) get_node("CharacterBody2D/lifter - 2").modulate = Color(255, 0, 0, 0.3) get_node("CharacterBody2D/MortarPart(2)").modulate = Color(255, 0, 0, 0.3) else: get_node("CharacterBody2D/lifter - 1").modulate = Color(1, 1, 1, 1) get_node("CharacterBody2D/lifter - 2").modulate = Color(1, 1, 1, 1) get_node("CharacterBody2D/MortarPart(2)").modulate = Color(1, 1, 1, 1) elif not target: if get_node("CharacterBody2D/Area2D").get_overlapping_bodies(): choose_target(null) elif 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(): if get_node("Area2D").get_overlapping_bodies().size() <= 1: 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