Working on enemy hivemind, it's doing *something* now
This commit is contained in:
@@ -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