diff --git a/assets/player.tscn b/assets/player.tscn index 6ad90ac..97451be 100644 --- a/assets/player.tscn +++ b/assets/player.tscn @@ -131,7 +131,6 @@ collision_layer = 0 collision_mask = 4 [node name="CollisionShape3D" type="CollisionShape3D" parent="pick_up_magnet"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.89866, 0, 0) shape = SubResource("SphereShape3D_xfie3") [node name="Audio" type="Node" parent="."] diff --git a/assets/spider2.tscn b/assets/spider2.tscn index fb56d39..54af6ca 100644 --- a/assets/spider2.tscn +++ b/assets/spider2.tscn @@ -589,12 +589,13 @@ shadow_mesh = SubResource("ArrayMesh_slg4e") [sub_resource type="SphereShape3D" id="SphereShape3D_n7n6o"] radius = 0.25 -[node name="spider" type="CharacterBody3D"] +[node name="spider" type="CharacterBody3D" groups=["enemy"]] script = ExtResource("1_7e7fe") bullet = ExtResource("2_aew5r") casing = ExtResource("3_e5ft5") bullet_speed = 75 bullet_drop = 0.01 +bullet_damage = 0 stamina = ExtResource("4_p0ci7") ammo = ExtResource("5_k1lw4") money = ExtResource("6_ihv2y") @@ -692,7 +693,7 @@ transform = Transform3D(0.762197, -0.647345, 0, 0.647345, 0.762197, 0, 0, 0, 1, mesh = SubResource("ArrayMesh_dvoc6") skeleton = NodePath("") -[node name="Area3D" type="Area3D" parent="body" groups=["enemy"]] +[node name="Area3D" type="Area3D" parent="body" groups=["enemy_target"]] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.03709, 0) collision_layer = 15 collision_mask = 15 @@ -715,6 +716,10 @@ wait_time = 0.3 one_shot = true autostart = true +[node name="knocked_timer" type="Timer" parent="Timers"] +wait_time = 0.5 +one_shot = true + [node name="AUIDO" type="Node" parent="."] [node name="Fire" type="AudioStreamPlayer3D" parent="AUIDO"] @@ -724,3 +729,4 @@ volume_db = 10.0 [connection signal="body_part_hit" from="body/Area3D" to="." method="_on_area_3d_body_part_hit"] [connection signal="timeout" from="Timers/prefire_timer" to="." method="_on_prefire_timer_timeout"] [connection signal="timeout" from="Timers/postfire_timer" to="." method="_on_postfire_timer_timeout"] +[connection signal="timeout" from="Timers/knocked_timer" to="." method="_on_knocked_timer_timeout"] diff --git a/project.godot b/project.godot index 0bfacf7..7288300 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="First Person Test" -run/main_scene="res://scenes/test_level_2v2 NO ENEMIES.tscn" +run/main_scene="res://scenes/enemy_working_scene.tscn" config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://icon.svg" diff --git a/scenes/enemy_working_scene.tscn b/scenes/enemy_working_scene.tscn new file mode 100644 index 0000000..f1a0478 --- /dev/null +++ b/scenes/enemy_working_scene.tscn @@ -0,0 +1,117 @@ +[gd_scene load_steps=12 format=3 uid="uid://dsnddbrlqkav2"] + +[ext_resource type="Script" path="res://scripts/LevelManager.gd" id="1_laua1"] +[ext_resource type="PackedScene" uid="uid://brl0bsqjl5dg3" path="res://assets/mac_10.tscn" id="2_poauc"] +[ext_resource type="PackedScene" uid="uid://2o2wcc5i1al4" path="res://assets/rocket_launcher.tscn" id="3_xdb5c"] +[ext_resource type="PackedScene" uid="uid://drwae3loscbw7" path="res://assets/player.tscn" id="4_a8lcp"] +[ext_resource type="Script" path="res://scripts/EnemyHivemind1.gd" id="5_ngmqi"] +[ext_resource type="PackedScene" uid="uid://djr7vnr1hcx82" path="res://assets/spider2.tscn" id="6_qmuhr"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_w6vpl"] +sky_top_color = Color(0.623488, 0.812575, 0.900791, 1) +sky_horizon_color = Color(0.705872, 0.745394, 0.758448, 1) +ground_horizon_color = Color(0.705872, 0.745394, 0.758448, 1) + +[sub_resource type="Sky" id="Sky_kdw67"] +sky_material = SubResource("ProceduralSkyMaterial_w6vpl") + +[sub_resource type="Environment" id="Environment_klp4b"] +background_mode = 2 +sky = SubResource("Sky_kdw67") +tonemap_mode = 2 +glow_enabled = true + +[sub_resource type="NavigationMesh" id="NavigationMesh_8aw3d"] +vertices = PackedVector3Array(-24.5, -4.63697, -268.188, -24.5, -4.63697, -218.938, 24.5, -4.63697, -218.938, 24.5, -4.63697, -268.188, -24.5, -30.137, -227.688, -24.5, -30.137, -178.438, 24.5, -30.137, -178.438, 24.5, -30.137, -227.688, -24.5, -71.387, -164.688, -24.5, -71.387, -115.438, 24.5, -71.387, -115.438, 24.5, -71.387, -164.688, -24.5, -71.387, -96.1881, -24.5, -71.387, -46.9381, 24.5, -71.387, -46.9381, 24.5, -71.387, -96.1881, -24.5, 0.113029, -24.6881, -24.5, 0.113029, 24.5619, 24.5, 0.113029, 24.5619, 24.5, 0.113029, -24.6881) +polygons = [PackedInt32Array(3, 2, 0), PackedInt32Array(0, 2, 1), PackedInt32Array(7, 6, 4), PackedInt32Array(4, 6, 5), PackedInt32Array(11, 10, 8), PackedInt32Array(8, 10, 9), PackedInt32Array(15, 14, 12), PackedInt32Array(12, 14, 13), PackedInt32Array(19, 18, 16), PackedInt32Array(16, 18, 17)] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6yrih"] +albedo_color = Color(0.300579, 0.462784, 0.249767, 1) + +[node name="EnemyWork" type="Node3D" node_paths=PackedStringArray("player")] +script = ExtResource("1_laua1") +player = NodePath("Player") +gun_1 = ExtResource("2_poauc") +gun_2 = ExtResource("3_xdb5c") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_klp4b") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.78152, -0.330606, 0.52908, 0, 0.848048, 0.529919, -0.62388, 0.414143, -0.662767, 0, 0, 0) +shadow_enabled = true + +[node name="Player" parent="." instance=ExtResource("4_a8lcp")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00663102, 2.16663, -0.0244913) +weapon_sway_amount = 0.07 + +[node name="EnemyHivemind1" type="Node3D" parent="."] +script = ExtResource("5_ngmqi") + +[node name="spider" parent="EnemyHivemind1" instance=ExtResource("6_qmuhr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.87933, 0, 1.40028) +player_path = NodePath("../../Player") + +[node name="spider2" parent="EnemyHivemind1" instance=ExtResource("6_qmuhr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.69998, 9.53674e-07, 3.9282) +player_path = NodePath("../../Player") + +[node name="spider3" parent="EnemyHivemind1" instance=ExtResource("6_qmuhr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.14727, -1.90735e-06, -3.3705) +player_path = NodePath("../../Player") + +[node name="spider4" parent="EnemyHivemind1" instance=ExtResource("6_qmuhr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.485, 0, 1.40028) +player_path = NodePath("../../Player") + +[node name="spider5" parent="EnemyHivemind1" instance=ExtResource("6_qmuhr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.66438, 9.53674e-07, 3.9282) +player_path = NodePath("../../Player") + +[node name="spider6" parent="EnemyHivemind1" instance=ExtResource("6_qmuhr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.21709, -1.90735e-06, -3.3705) +player_path = NodePath("../../Player") + +[node name="EnemyHivemind2" type="Node3D" parent="."] +script = ExtResource("5_ngmqi") + +[node name="spider4" parent="EnemyHivemind2" instance=ExtResource("6_qmuhr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.14727, 47.5757, -236.327) +player_path = NodePath("../../Player") + +[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."] +navigation_mesh = SubResource("NavigationMesh_8aw3d") + +[node name="CSGBox3D" type="CSGBox3D" parent="NavigationRegion3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.420555, 0) +use_collision = true +size = Vector3(75, 0.5, 75) +material = SubResource("StandardMaterial3D_6yrih") + +[node name="CSGBox3D2" type="CSGBox3D" parent="NavigationRegion3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -72.137, -71.5367) +use_collision = true +size = Vector3(50, 0.5, 50) +material = SubResource("StandardMaterial3D_6yrih") + +[node name="CSGBox3D3" type="CSGBox3D" parent="NavigationRegion3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -72.137, -140.068) +use_collision = true +size = Vector3(50, 0.5, 50) +material = SubResource("StandardMaterial3D_6yrih") + +[node name="CSGBox3D4" type="CSGBox3D" parent="NavigationRegion3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -30.806, -203.036) +use_collision = true +size = Vector3(50, 0.5, 50) +material = SubResource("StandardMaterial3D_6yrih") + +[node name="CSGBox3D5" type="CSGBox3D" parent="NavigationRegion3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -5.17223, -243.688) +use_collision = true +size = Vector3(50, 0.5, 50) +material = SubResource("StandardMaterial3D_6yrih") + +[node name="CSGBox3D" type="CSGBox3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.62976, 0) +use_collision = true diff --git a/scenes/test_level_2v2 NO ENEMIES.tscn b/scenes/test_level_2v2 NO ENEMIES.tscn index 024f783..478d7fd 100644 --- a/scenes/test_level_2v2 NO ENEMIES.tscn +++ b/scenes/test_level_2v2 NO ENEMIES.tscn @@ -1168,7 +1168,6 @@ gun_2 = ExtResource("2_ayfr5") [node name="Player" parent="." instance=ExtResource("4_4bx26")] transform = Transform3D(-0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, -0.866025, -16.0295, 1.4435, 12.1166) weapon_sway_amount = 0.07 -weapon_rotation_amount = 0.07 [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.420794, 0.292511, -0.858703, -0.23587, 0.949309, 0.207791, 0.875956, 0.115105, 0.468458, 0, 0, 0) diff --git a/scenes/test_level_2v2.tscn b/scenes/test_level_2v2.tscn index 8918688..eafeb82 100644 --- a/scenes/test_level_2v2.tscn +++ b/scenes/test_level_2v2.tscn @@ -1169,9 +1169,7 @@ gun_2 = ExtResource("3_umpon") [node name="Player" parent="." instance=ExtResource("2_f87c2")] transform = Transform3D(-0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, -0.866025, -16.0295, 1.4435, 12.1166) -AUDIO = false weapon_sway_amount = 0.07 -weapon_rotation_amount = 0.07 [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.420794, 0.292511, -0.858703, -0.23587, 0.949309, 0.207791, 0.875956, 0.115105, 0.468458, 0, 0, 0) diff --git a/scripts/EnemyHivemind1.gd b/scripts/EnemyHivemind1.gd index 4b5ce10..63ff7e4 100644 --- a/scripts/EnemyHivemind1.gd +++ b/scripts/EnemyHivemind1.gd @@ -12,12 +12,20 @@ func _ready(): # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): + #calculate move position for each child for i in minions: + #by number of minions determine the amount they should rotate around the player to be evenly distributed number_minions = minions.size() - rot_amount = deg_to_rad(360 / number_minions) - i.nav_agent.set_target_position(i.player.global_transform.origin) + + #return current array index + var minion_rot_amount = minions.find(i) * deg_to_rad(360 / number_minions) + var minion_pos = i.global_transform.origin + var player_pos = i.player.global_transform.origin - Vector3(4,0,0) + var nav_pos : Vector3 + nav_pos.x = player_pos.x + (minion_pos.x-player_pos.x)*cos(minion_rot_amount) - (minion_pos.x-player_pos.x)*sin(minion_rot_amount) + nav_pos.z = player_pos.z + (minion_pos.z-player_pos.z)*sin(minion_rot_amount) - (minion_pos.z-player_pos.z)*cos(minion_rot_amount) + + i.nav_agent.set_target_position(nav_pos) var next_nav_point = i.nav_agent.get_next_path_position() - #var next_nav_point - #next_nav_point_start.rotate += rot_amount #times index i.hive_velocity = (next_nav_point - i.global_transform.origin).normalized() * i.SPEED diff --git a/scripts/bullet.gd b/scripts/bullet.gd index d310b96..6136c56 100644 --- a/scripts/bullet.gd +++ b/scripts/bullet.gd @@ -68,7 +68,7 @@ func _process(delta): ray.get_collider().breaking(current_velocity) - if ray.get_collider().is_in_group("enemy"): + if ray.get_collider().is_in_group("enemy_target"): hit_indicator.play() enemy_particles.emitting = true ray.get_collider().hit(bullet_damage) diff --git a/scripts/player.gd b/scripts/player.gd index 2bc083c..49cbad8 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -27,8 +27,8 @@ var start_sensitivity @export var BOB_AMP = 0.08 @export var t_bob = 1.0 @export var weapon_holder : Node3D -@export var weapon_sway_amount : float = .1 -@export var weapon_rotation_amount : float = .1 +@export var weapon_sway_amount : float = .07 +@export var weapon_rotation_amount : float = .07 @export_subgroup("FOV") @export var BASE_FOV : float = 80 @export var FOV_CHANGE = 1.5 diff --git a/scripts/rocket.gd b/scripts/rocket.gd index e7caaab..5d79fa8 100644 --- a/scripts/rocket.gd +++ b/scripts/rocket.gd @@ -36,11 +36,11 @@ func _on_body_shape_entered(body_rid, body, body_shape_index, local_shape_index) func explode(): #get all collision objects that can be moved - var moveable_rigidbodies = blast_radius_area.get_overlapping_bodies() + var bodies_in_blast = blast_radius_area.get_overlapping_bodies() #for each object determine vector from center of blast radius #apply linear velocity power as the inverse % of distance towards the edge (bonus points if using curve texture) #break breakable objects - for body in moveable_rigidbodies: + for body in bodies_in_blast: #calculate blast power and direction var blast_direction = (body.global_position - blast_radius_area.global_position).normalized() @@ -55,6 +55,8 @@ func explode(): body.linear_velocity += blast_velocity if body.is_in_group("player"): body.velocity += clamp(blast_velocity,Vector3(-7,-7,-7),Vector3(7,7,7)) - if body.is_in_group("npc") or body.is_in_group("enemy"): + if body.is_in_group("enemy"): + body.knocked = true + print("knocked") + body.knocked_timer.start() body.velocity += blast_velocity - body.breaking(blast_velocity) diff --git a/scripts/spider.gd b/scripts/spider.gd index 14a14b4..78683bb 100644 --- a/scripts/spider.gd +++ b/scripts/spider.gd @@ -25,7 +25,7 @@ const MAX_AV = 10 @onready var casing_ejector = $TurretLook/Turret/CasingEjector @onready var prefire_timer = $Timers/prefire_timer @onready var postfire_timer = $Timers/postfire_timer -@onready var retarget_timer = $Timers/retarget_timer +@onready var knocked_timer = $Timers/knocked_timer @onready var turret_look_next = $TurretLookNext @onready var spider_look_next = $SpiderLookNext @onready var body = $body @@ -41,6 +41,7 @@ const MAX_AV = 10 @export var die_particles : Resource @onready var turret_look = $TurretLook +var gravity = 9.8 var particlespawn var rng = RandomNumberGenerator.new() var rand_select @@ -49,6 +50,7 @@ var body_look_to var distance_to_player var hive_velocity var hive_nav_point +var knocked func _ready(): player = get_node(player_path) @@ -60,12 +62,10 @@ func _ready(): postfire_timer.start() func _process(delta): - velocity = Vector3.ZERO # Navigation - #nav_agent.set_target_position(player.global_transform.origin) - #var next_nav_point = nav_agent.get_next_path_position() - velocity = hive_velocity + if !knocked: + velocity = hive_velocity #FIX BODY ROTATION spider_look_next.look_at(Vector3(player.global_position.x, 0, player.global_position.z), Vector3.UP) @@ -76,9 +76,12 @@ func _process(delta): distance_to_player = abs(self.global_position - player.global_position) + #apply gravity + if !is_on_floor(): + velocity.y -= gravity * delta - if distance_to_player.x > 4 or distance_to_player.z > 4: - move_and_slide() + #if distance_to_player.x > 4 or distance_to_player.z > 4: + move_and_slide() func _on_area_3d_body_part_hit(dam,bullet_damage): @@ -160,5 +163,14 @@ func _on_prefire_timer_timeout(): func _on_postfire_timer_timeout(): - prefire_timer.start() + if turret_look_next.is_colliding() and turret_look_next.get_collider().is_in_group("player"): + prefire_timer.start() + else: + postfire_timer.start() turret_material.emission_enabled = true + + +func _on_knocked_timer_timeout(): + print("KNOCK TIMEOUT") + velocity = Vector3(0,0,0) + knocked = false