From ca4de10a5eaa05574362123e8539331232ae02f4 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 30 Apr 2025 16:35:45 -0500 Subject: [PATCH] atttack script starting to work --- assets/spider2.tscn | 2 +- scripts/EnemyAttack.gd | 17 +++++++++++++++++ scripts/EnemyIdle.gd | 1 + scripts/EnemyStates.gd | 18 ++++++++++++++++-- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/assets/spider2.tscn b/assets/spider2.tscn index c578a3a..1e06a64 100644 --- a/assets/spider2.tscn +++ b/assets/spider2.tscn @@ -1094,7 +1094,7 @@ shape = SubResource("CylinderShape3D_gicen") [node name="NavigationAgent3D" type="NavigationAgent3D" parent="."] path_height_offset = 0.5 avoidance_enabled = true -radius = 1.0 +radius = 1.5 [node name="Timers" type="Node" parent="."] diff --git a/scripts/EnemyAttack.gd b/scripts/EnemyAttack.gd index c87d4ea..7feec67 100644 --- a/scripts/EnemyAttack.gd +++ b/scripts/EnemyAttack.gd @@ -1,2 +1,19 @@ extends EnemyState class_name EnemyAttack + +func Physics_Update(delta): + if enemy.is_player_visible(): + #get player location + enemy.cache_player_pos() + #set player location as target + update_player_target() + #move and look at location + move_to_nav_point(delta) + turret_look2D(delta) + else: + Transitioned.emit(self,"idle") #when search is working make this search + +func update_player_target(): + move_target = enemy.player_last_seen + look_target = enemy.player_last_seen + enemy.nav_agent.set_target_position(move_target) diff --git a/scripts/EnemyIdle.gd b/scripts/EnemyIdle.gd index e8b7bb6..6dfb68a 100644 --- a/scripts/EnemyIdle.gd +++ b/scripts/EnemyIdle.gd @@ -13,6 +13,7 @@ func Enter(): get_new_wander_point() func Update(delta): + attack_on_sight() #on timeout change scan direction if scan_timer > 0: scan_timer -= delta diff --git a/scripts/EnemyStates.gd b/scripts/EnemyStates.gd index c339d84..d3025b5 100644 --- a/scripts/EnemyStates.gd +++ b/scripts/EnemyStates.gd @@ -31,9 +31,11 @@ func update_move_target(): func attack_on_sight(): if can_see: if enemy.is_player_in_area() and enemy.is_player_visible(): + enemy.cache_player_pos() Transitioned.emit(self,"attack") if enemy.turret_look.is_colliding(): if enemy.turret_look.get_collider() is Player: + enemy.cache_player_pos() Transitioned.emit(self,"attack") func search_on_lost_target(): @@ -63,6 +65,18 @@ func rotate_to_face2D(object,target,target_offset_angle,delta,turn_speed): var direction = (pos2d - target_pos2d) return lerp_angle(object.global_rotation.y,atan2(direction.x,direction.y) + deg_to_rad(target_offset_angle),delta * turn_speed) +func rotate_to_face3D(object,target,target_offset_angle,delta,turn_speed): + #to allow both nodes and positions to be passed to this function, test the target and use Vector3 coords + var target_transformed + if target == null: + target_transformed = object.global_position + elif target is Vector3: + target_transformed = target + elif target is Node3D: + target_transformed = target.global_position + + + func move_to_nav_point(delta): var destination = enemy.nav_agent.get_next_path_position() var local_destination = destination - enemy.global_position @@ -75,8 +89,8 @@ func velocity_computed(safe_velocity): enemy.velocity = enemy.velocity.move_toward(safe_velocity,.25) -func turret_look(target,delta): - enemy.turret_look.global_rotation.y = rotate_to_face2D(enemy.turret_look,target,0,delta,turret_speed) +func turret_look2D(delta): + enemy.turret_look.global_rotation.y = rotate_to_face2D(enemy.turret_look,look_target,0,delta,turret_speed) func turret_scan_look(target,scan_direction,delta):