Working on enemy hivemind, it's doing *something* now
This commit is contained in:
@@ -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="."]
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
117
scenes/enemy_working_scene.tscn
Normal file
117
scenes/enemy_working_scene.tscn
Normal 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
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user