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

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