casings integrate player velocity, can't pick up already held guns

This commit is contained in:
derek
2024-11-05 16:58:00 -06:00
parent 83e2365892
commit c6f1eccca0
6 changed files with 49 additions and 45 deletions

View File

@@ -7,6 +7,7 @@ extends RigidBody3D
var rng = RandomNumberGenerator.new() var rng = RandomNumberGenerator.new()
var random_rotation = true var random_rotation = true
var particle_number var particle_number
var player_velocity
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
@@ -22,7 +23,7 @@ func _ready():
var av_y = rng.randf_range(-50.0,50.0) var av_y = rng.randf_range(-50.0,50.0)
var av_z = rng.randf_range(-50.0,50.0) var av_z = rng.randf_range(-50.0,50.0)
linear_velocity += transform.basis * Vector3(lv_x, lv_y, lv_z) linear_velocity += transform.basis * Vector3(lv_x, lv_y, lv_z) + player_velocity
angular_velocity += transform.basis * Vector3(av_x,av_y,av_z) angular_velocity += transform.basis * Vector3(av_x,av_y,av_z)

View File

@@ -19,7 +19,6 @@ const DEAD_CAM_FOV = 50.0
var focus_dist var focus_dist
var target : Node var target : Node
var focus_target
var respawn_position var respawn_position
var respawn_rotation var respawn_rotation
var taunt_node var taunt_node
@@ -64,12 +63,6 @@ func _ready():
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta): func _process(delta):
if target != null:
focus_dist = camera.global_position.distance_to(target.global_position)
else:
focus_dist = 10.0
camera.attributes.dof_blur_far_distance = focus_dist + 8
camera.attributes.dof_blur_near_distance = focus_dist - 2
if target == null: if target == null:
anim_step = 3 anim_step = 3
@@ -79,6 +72,7 @@ func _process(delta):
match anim_step: match anim_step:
0: 0:
#Show enemy that killed player #Show enemy that killed player
focus_on_target(target)
var target_pos_adjusted = Vector3(target.position.x -4,target.position.y + 4,target.position.z -4) var target_pos_adjusted = Vector3(target.position.x -4,target.position.y + 4,target.position.z -4)
cam_target.global_position = lerp(cam_target.global_position,target_pos_adjusted,delta * MOVE_SPEED) cam_target.global_position = lerp(cam_target.global_position,target_pos_adjusted,delta * MOVE_SPEED)
look_ray.global_position = target_pos_adjusted look_ray.global_position = target_pos_adjusted
@@ -87,6 +81,7 @@ func _process(delta):
camera.fov = lerp(camera.fov, 40.0, delta * 5) camera.fov = lerp(camera.fov, 40.0, delta * 5)
1: 1:
#aim at player from enemy #aim at player from enemy
focus_on_target(level_control.player)
Engine.time_scale = .05 Engine.time_scale = .05
AudioServer.set_bus_effect_enabled(0,0,true) AudioServer.set_bus_effect_enabled(0,0,true)
taunt_node.visible = false taunt_node.visible = false
@@ -110,3 +105,11 @@ func _on_timer_timeout():
func reload_level(): func reload_level():
get_tree().reload_current_scene() get_tree().reload_current_scene()
func focus_on_target(focus_target):
if target != null:
focus_dist = camera.global_position.distance_to(focus_target.global_position)
else:
focus_dist = 10.0
camera.attributes.dof_blur_far_distance = focus_dist + 8
camera.attributes.dof_blur_near_distance = focus_dist - 2

View File

@@ -124,6 +124,7 @@ func spawn_casing():
var instance_casing = casing.instantiate() var instance_casing = casing.instantiate()
instance_casing.position = casing_ejector.global_position instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis instance_casing.transform.basis = casing_ejector.global_transform.basis
instance_casing.player_velocity = player.velocity * transform.basis
get_tree().get_root().add_child(instance_casing) get_tree().get_root().add_child(instance_casing)
func bullet_fire(): func bullet_fire():

View File

@@ -177,6 +177,7 @@ func spawn_casings():
instance_casing.position = i.global_position instance_casing.position = i.global_position
instance_casing.random_rotation = false instance_casing.random_rotation = false
instance_casing.transform.basis = i.global_transform.basis instance_casing.transform.basis = i.global_transform.basis
instance_casing.player_velocity = player.velocity * transform.basis
instance_casing.rotation.x += deg_to_rad(90) instance_casing.rotation.x += deg_to_rad(90)
instance_casing.linear_velocity.y = -(8 + rng.randf_range(0,3)) instance_casing.linear_velocity.y = -(8 + rng.randf_range(0,3))
get_tree().get_root().add_child(instance_casing) get_tree().get_root().add_child(instance_casing)

View File

@@ -138,39 +138,12 @@ func _on_area_3d_body_part_hit(dam,bullet_damage):
func _on_prefire_timer_timeout(): func _on_prefire_timer_timeout():
#barrel 1 fire #barrel 1 fire
var instance_bullet = bullet.instantiate() fire(barrel_1)
instance_bullet.position = barrel_1.global_position
instance_bullet.transform.basis = barrel_1.global_transform.basis
instance_bullet.bullet_speed = bullet_speed
instance_bullet.bullet_drop = bullet_drop
instance_bullet.random_spread_amt = random_spread_amt
instance_bullet.bullet_damage = bullet_damage
instance_bullet.fired_by = self
get_tree().get_root().add_child(instance_bullet)
#barrel 2 fire #barrel 2 fire
var instance_bullet2 = bullet.instantiate() fire(barrel_2)
instance_bullet2.position = barrel_2.global_position
instance_bullet2.transform.basis = barrel_2.global_transform.basis
instance_bullet2.bullet_speed = bullet_speed
instance_bullet2.bullet_drop = bullet_drop
instance_bullet2.random_spread_amt = random_spread_amt
instance_bullet2.bullet_damage = bullet_damage
instance_bullet2.fired_by = self
get_tree().get_root().add_child(instance_bullet2)
turret_material.emission_enabled = false turret_material.emission_enabled = false
var instance_casing = casing.instantiate()
instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis
var instance_casing2 = casing.instantiate()
instance_casing2.position = casing_ejector.global_position
instance_casing2.transform.basis = casing_ejector.global_transform.basis
get_tree().get_root().add_child(instance_casing)
get_tree().get_root().add_child(instance_casing2)
audio_fire.play()
prefire_timer.stop() prefire_timer.stop()
postfire_timer.start() postfire_timer.start()
@@ -192,3 +165,22 @@ func _on_knocked_timer_timeout():
func _on_stunned_timer_timeout(): func _on_stunned_timer_timeout():
print("STUN TIMEOUT") print("STUN TIMEOUT")
stunned = false stunned = false
func fire(barrel):
var instance_bullet = bullet.instantiate()
instance_bullet.position = barrel.global_position
instance_bullet.transform.basis = barrel_1.global_transform.basis
instance_bullet.bullet_speed = bullet_speed
instance_bullet.bullet_drop = bullet_drop
instance_bullet.random_spread_amt = random_spread_amt
instance_bullet.bullet_damage = bullet_damage
instance_bullet.fired_by = self
get_tree().get_root().add_child(instance_bullet)
audio_fire.play()
spawn_casing()
func spawn_casing():
var instance_casing = casing.instantiate()
instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis
instance_casing.player_velocity = velocity * transform.basis

View File

@@ -7,6 +7,7 @@ extends RigidBody3D
@onready var level_control = get_tree().current_scene @onready var level_control = get_tree().current_scene
var pickupable = true var pickupable = true
var gun_already_held = false
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
@@ -18,6 +19,11 @@ func _process(delta):
pass pass
func picked_up(): func picked_up():
for i in level_control.held_guns:
if i == gun_resource:
gun_already_held = true
if !gun_already_held:
level_control.held_guns.append(gun_resource) level_control.held_guns.append(gun_resource)
var instance_gun = gun_resource.instantiate() var instance_gun = gun_resource.instantiate()
level_control.ammo_current.append(instance_gun.max_ammo) level_control.ammo_current.append(instance_gun.max_ammo)