Working on enemy hivemind, it's doing *something* now

This commit is contained in:
Derek
2024-08-04 18:33:55 -05:00
parent 2296eb8605
commit 15e61b0f43
11 changed files with 167 additions and 26 deletions

View File

@@ -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="."]

View File

@@ -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"]

View File

@@ -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"

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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