From 362b0a57085fcd4b8174ed5a3358c0ff5455f6fa Mon Sep 17 00:00:00 2001 From: Derek Date: Mon, 21 Apr 2025 22:58:54 -0500 Subject: [PATCH] fixed attack in state machine --- assets/spider2.tscn | 14 ++++++++++++-- project.godot | 2 +- scenes/enemy_working_scene.tscn | 2 +- scripts/EnemyAttack.gd | 29 +++++++++++++++++++++++++++++ scripts/EnemyIdle.gd | 7 +++++-- scripts/enemy_die.gd | 1 + scripts/rocket.gd | 9 ++------- scripts/spider.gd | 4 +++- 8 files changed, 54 insertions(+), 14 deletions(-) diff --git a/assets/spider2.tscn b/assets/spider2.tscn index afdac06..d06be23 100644 --- a/assets/spider2.tscn +++ b/assets/spider2.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=77 format=4 uid="uid://djr7vnr1hcx82"] +[gd_scene load_steps=78 format=4 uid="uid://djr7vnr1hcx82"] [ext_resource type="Script" uid="uid://cdofgtwevbray" path="res://scripts/spider.gd" id="1_7e7fe"] [ext_resource type="PackedScene" uid="uid://h5ojldugfyyu" path="res://assets/bullet_enemy.tscn" id="2_aew5r"] @@ -792,6 +792,10 @@ _surfaces = [{ [sub_resource type="BoxShape3D" id="BoxShape3D_xxx55"] size = Vector3(0.816284, 0.725159, 0.75531) +[sub_resource type="CylinderShape3D" id="CylinderShape3D_gicen"] +height = 0.356583 +radius = 0.207031 + [node name="spider" type="CharacterBody3D" node_paths=PackedStringArray("nav_agent") groups=["enemy", "persist"]] collision_layer = 8 collision_mask = 521 @@ -825,8 +829,10 @@ script = ExtResource("9_6mvds") enemy = NodePath("../..") metadata/_custom_type_script = "uid://dhxolagi0b5s1" -[node name="Attack" type="Node" parent="StateMachine"] +[node name="Attack" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy", "enemy_targets")] script = ExtResource("10_gicen") +enemy = NodePath("../..") +enemy_targets = [NodePath("../../body/backTarget")] [node name="HealthBarSprite" parent="." node_paths=PackedStringArray("character") instance=ExtResource("7_87l3v")] transform = Transform3D(0.254412, 0, 0, 0, 0.561068, 0, 0, 0, 1, 0, 2.41498, 0) @@ -1016,6 +1022,10 @@ visible = false transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0258179, 1.03281, 0.00894165) shape = SubResource("BoxShape3D_xxx55") +[node name="CollisionShape3D2" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5049, 0) +shape = SubResource("CylinderShape3D_gicen") + [node name="NavigationAgent3D" type="NavigationAgent3D" parent="."] path_height_offset = 0.5 avoidance_enabled = true diff --git a/project.godot b/project.godot index bdaed21..f2b8dd6 100644 --- a/project.godot +++ b/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="First Person Test" config/tags=PackedStringArray("fps") -run/main_scene="uid://bk4pn4k7n51ux" +run/main_scene="uid://f7e0v1r6ra6c" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="uid://6svuq1l83al5" diff --git a/scenes/enemy_working_scene.tscn b/scenes/enemy_working_scene.tscn index fd08cb3..93df4a8 100644 --- a/scenes/enemy_working_scene.tscn +++ b/scenes/enemy_working_scene.tscn @@ -28,7 +28,7 @@ script = ExtResource("1_8cuhv") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -31.749, 0, 44.3496) script = ExtResource("5_ngmqi") room_lockdown = true -number_of_enemies = 100 +number_of_enemies = 25 number_of_drops = 30 [node name="EnemySpawner" parent="Level" instance=ExtResource("3_q77vb")] diff --git a/scripts/EnemyAttack.gd b/scripts/EnemyAttack.gd index c87d4ea..8d8e1c6 100644 --- a/scripts/EnemyAttack.gd +++ b/scripts/EnemyAttack.gd @@ -1,2 +1,31 @@ extends EnemyState class_name EnemyAttack + +var heartbeat : float = 3.0 + +@onready var player = get_tree().current_scene.player + +func _Enter(): + update_waypoint() + +func update_waypoint(): + enemy.nav_agent.set_target_position(player.global_position) + +func Update(delta): + if heartbeat > 0: + heartbeat -= delta + else: + update_waypoint() + +func Physics_Update(delta): + enemy.turret_look_next.look_at(player.global_position) + enemy.turret_look.look_at(player.global_position) + + var destination = enemy.nav_agent.get_next_path_position() + var local_destination = destination - enemy.global_position + var direction = local_destination.normalized() + if enemy.global_position.distance_to(local_destination) > 1: + enemy.velocity = direction * move_speed + enemy.spider_look_next.look_at(destination) + var look_target = enemy.spider_look_next.global_rotation.y + enemy.global_rotation.y = lerp(enemy.global_rotation.y,look_target,delta * 3) diff --git a/scripts/EnemyIdle.gd b/scripts/EnemyIdle.gd index 233de84..1bf7e89 100644 --- a/scripts/EnemyIdle.gd +++ b/scripts/EnemyIdle.gd @@ -20,7 +20,7 @@ func randomize_wander(): func randomize_turret_scan(): scan_direction = randf_range(-TURRET_TURN_AMT,TURRET_TURN_AMT) - scan_time = randf_range(1,3) + scan_time = randf_range(5,10) func _Enter(): randomize_wander() @@ -47,4 +47,7 @@ func Physics_Update(delta : float): var look_target = enemy.spider_look_next.global_rotation.y enemy.global_rotation.y = lerp(enemy.global_rotation.y,look_target,delta * 3) - enemy.turret.rotation.y = lerp(enemy.turret.rotation.y,deg_to_rad(scan_direction),delta) + enemy.turret_look.rotation.y = lerp(enemy.turret_look.rotation.y,deg_to_rad(scan_direction),delta) + + if enemy.turret_look.is_colliding() and enemy.turret_look.get_collider() is Player: + Transitioned.emit(self,"attack") diff --git a/scripts/enemy_die.gd b/scripts/enemy_die.gd index 43e36a4..2421d51 100644 --- a/scripts/enemy_die.gd +++ b/scripts/enemy_die.gd @@ -8,6 +8,7 @@ func Enter(): func die(): drop_loot() + enemy.visible = false #remove from parent array var particlespawn = enemy.die_particles.instantiate() particlespawn.position = enemy.global_position diff --git a/scripts/rocket.gd b/scripts/rocket.gd index 96a2fce..b857617 100644 --- a/scripts/rocket.gd +++ b/scripts/rocket.gd @@ -45,10 +45,5 @@ func explode(): body.recoil.add_recoil(Vector3(1,.1,.1),10,10) if body.has_method("hit") and !body.is_in_group("player"): body.hit(1) - if body.is_in_group("enemy"): - body.knocked = true - body.stunned = true - print("knocked") - body.knocked_timer.start() - body.stunned_timer.start() - body.velocity += blast_velocity + if body is Enemy: + body.stun() diff --git a/scripts/spider.gd b/scripts/spider.gd index 3d45cec..e0c0173 100644 --- a/scripts/spider.gd +++ b/scripts/spider.gd @@ -23,7 +23,7 @@ var last_enemy : bool = false @export_group("Taunts") @export var taunts : Array[String] = [] - +@onready var state_machine: Node = $StateMachine @onready var level_control = get_tree().current_scene @onready var movement_shape = $MovementShape @onready var barrel_1 = $TurretLook/Turret/Barrel1 @@ -136,6 +136,8 @@ func spawn_casing(): instance_casing.player_velocity = velocity * transform.basis get_tree().get_root().add_child(instance_casing) +func stun(): + state_machine.on_child_transition(state_machine.current_state,"stunned") func save(): var save_dict = {