pulled out target selection to its own node
This commit is contained in:
@ -9,9 +9,9 @@ func _ready() -> void:
|
||||
func aim() -> void:
|
||||
super.aim()
|
||||
var pos: Vector2 = Vector2(global_position.x, global_position.z)
|
||||
var t_pos: Vector2 = Vector2(targeted_enemy.global_position.x, targeted_enemy.global_position.z)
|
||||
var t_pos: Vector2 = Vector2(target_finder.get_target().global_position.x, target_finder.get_target().global_position.z)
|
||||
var x: float = pos.distance_to(t_pos)
|
||||
var y: float = targeted_enemy.global_position.y - yaw_model.global_position.y
|
||||
var y: float = target_finder.get_target().global_position.y - yaw_model.global_position.y
|
||||
var v: float = force
|
||||
var g: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
var v2: float = pow(v, 2)
|
||||
|
@ -20,18 +20,14 @@ func _process(delta: float) -> void:
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if !targeted_enemy:
|
||||
acquire_target()
|
||||
if !target_finder.get_target():
|
||||
time_since_firing_started = 0.0
|
||||
current_time_between_shots = time_between_shots
|
||||
else:
|
||||
if !targeted_enemy.alive or global_position.distance_to(targeted_enemy.global_position) > target_range:
|
||||
targeted_enemy = null
|
||||
time_since_firing_started = 0.0
|
||||
current_time_between_shots = time_between_shots
|
||||
if targeted_enemy:
|
||||
aim()
|
||||
time_since_firing_started += delta
|
||||
var progress: float = clamp(time_since_firing_started / time_to_reach_max_speed, 0, 1.0)
|
||||
current_time_between_shots = lerpf(time_between_shots, final_time_between_shots, progress)
|
||||
if time_since_firing >= current_time_between_shots:
|
||||
time_since_firing -= current_time_between_shots
|
||||
shoot()
|
||||
aim()
|
||||
time_since_firing_started += delta
|
||||
var progress: float = clamp(time_since_firing_started / time_to_reach_max_speed, 0, 1.0)
|
||||
current_time_between_shots = lerpf(time_between_shots, final_time_between_shots, progress)
|
||||
if time_since_firing >= current_time_between_shots:
|
||||
time_since_firing -= current_time_between_shots
|
||||
shoot()
|
||||
|
@ -1,63 +1,27 @@
|
||||
class_name RocketLauncherTower extends ProjectileTower
|
||||
|
||||
var target_max: float = 3
|
||||
var targets: Array[EnemyController] = []
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
super._ready()
|
||||
target_max = floori(stats.get_attribute("Target Limit"))
|
||||
target_finder.max_targets = floori(stats.get_attribute("Target Limit"))
|
||||
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if !is_multiplayer_authority():
|
||||
#only doing the graphical sort of stuff but not shoot logic
|
||||
if targeted_enemy and is_instance_valid(targeted_enemy):
|
||||
if !targeted_enemy.alive or global_position.distance_to(targeted_enemy.global_position) > target_range:
|
||||
targeted_enemy = null
|
||||
else:
|
||||
aim()
|
||||
return
|
||||
if targets.size() < target_max:
|
||||
acquire_target()
|
||||
if targets.size() > 0:
|
||||
var valid_targets: Array[EnemyController] = []
|
||||
for target: EnemyController in targets:
|
||||
if is_instance_valid(target) and target.alive and global_position.distance_to(target.global_position) < target_range:
|
||||
valid_targets.append(target)
|
||||
targets = valid_targets
|
||||
if targets.size() > 0:
|
||||
targeted_enemy = targets[0]
|
||||
networked_acquire_target.rpc(get_tree().root.get_path_to(targeted_enemy))
|
||||
if target_finder.get_multiple_targets().size() >= 1:
|
||||
aim()
|
||||
if time_since_firing >= time_between_shots:
|
||||
time_since_firing -= time_between_shots
|
||||
shoot()
|
||||
|
||||
|
||||
func acquire_target() -> void:
|
||||
var possible_enemies: Array[EnemyController] = []
|
||||
for enemy: EnemyController in get_tree().get_nodes_in_group("Enemies"):
|
||||
if !is_instance_valid(enemy):
|
||||
continue
|
||||
if global_position.distance_to(enemy.global_position) > target_range:
|
||||
continue
|
||||
if !(enemy.stats.target_type & stats.target_type):
|
||||
continue
|
||||
if targets.has(enemy):
|
||||
continue
|
||||
possible_enemies.append(enemy)
|
||||
|
||||
for x: int in target_max - targets.size():
|
||||
if possible_enemies.size() == 0:
|
||||
return
|
||||
var chosen: EnemyController = possible_enemies.pick_random()
|
||||
possible_enemies.erase(chosen)
|
||||
targets.append(chosen)
|
||||
return
|
||||
if target_finder.get_multiple_targets().size() >= 1:
|
||||
#networked_acquire_target.rpc(get_tree().root.get_path_to(targeted_enemy))
|
||||
aim()
|
||||
if time_since_firing >= time_between_shots:
|
||||
time_since_firing -= time_between_shots
|
||||
shoot()
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
for target: EnemyController in targets:
|
||||
for target: EnemyController in target_finder.get_multiple_targets():
|
||||
networked_spawn_rocket.rpc(get_tree().root.get_path_to(target), multiplayer.get_unique_id())
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user