death camera mostly working

This commit is contained in:
derek
2024-08-06 16:57:28 -05:00
parent 5275d80d79
commit f8b0cc2964
11 changed files with 251 additions and 189 deletions

View File

@@ -6,8 +6,10 @@
[sub_resource type="LabelSettings" id="LabelSettings_ic2ps"]
font = ExtResource("1_7a4sr")
font_size = 500
outline_color = Color(1, 1, 1, 0.498039)
[node name="PickupAnnounce" type="Label"]
visible = false
offset_right = 3440.0
offset_bottom = 1440.0
size_flags_horizontal = 3

11
assets/dead_cam.tscn Normal file
View File

@@ -0,0 +1,11 @@
[gd_scene load_steps=2 format=3 uid="uid://by7qyyhyurlw"]
[ext_resource type="Script" path="res://scripts/dead_cam.gd" id="1_qxtd8"]
[node name="DeadCam" type="Node3D"]
script = ExtResource("1_qxtd8")
[node name="Camera3D" type="Camera3D" parent="."]
[node name="LookRay" type="RayCast3D" parent="."]
target_position = Vector3(0, 0, -1)

View File

@@ -40,7 +40,6 @@ dead_player = ExtResource("2_4hoys")
SENSITIVITY = 0.008
BOB_AMP = 0.085
weapon_holder = NodePath("Head/Camera3D/WeaponHolder")
weapon_sway_amount = 0.5
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
visible = false

View File

@@ -32,12 +32,17 @@ polygons = [PackedInt32Array(3, 2, 0), PackedInt32Array(0, 2, 1), PackedInt32Arr
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6yrih"]
albedo_color = Color(0.300579, 0.462784, 0.249767, 1)
[node name="EnemyWork" type="Node3D"]
[node name="EnemyWork" type="Node3D" node_paths=PackedStringArray("player")]
script = ExtResource("1_laua1")
player = NodePath("Player")
MAX_PARTICLES = 75
gun_1 = ExtResource("2_poauc")
gun_2 = ExtResource("3_xdb5c")
[node name="Player" parent="." instance=ExtResource("4_a8lcp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0517487, 5.27336, 0.0530636)
AUDIO = false
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_klp4b")
@@ -45,37 +50,26 @@ environment = SubResource("Environment_klp4b")
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, 1.92114, -0.0244913)
AUDIO = false
weapon_sway_amount = 0.07
[node name="EnemyHivemind1" type="Node3D" parent="." groups=["enemy_hivemind"]]
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="." groups=["enemy_hivemind"]]
script = ExtResource("5_ngmqi")

View File

@@ -1169,6 +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
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]

View File

@@ -16,6 +16,7 @@ func _process(delta):
#calculate move position for each child
for i in minions:
if i.player != null:
#by number of minions determine the amount they should rotate around the player to be evenly distributed
number_minions = minions.size()

View File

@@ -17,6 +17,7 @@ var ammo_drop = [[load("res://assets/ammo_pickup.tscn")],["ammo"]]
var stamina_drop = [[load("res://assets/stamina_pickup.tscn")],["stamina"]]
var health_drop = [[load("res://assets/health_pickup.tscn")],["health"]]
var money_drop = [[load("res://assets/money_pickup.tscn")],["money"]]
var dead_player = preload("res://assets/dead_cam.tscn")
const CLEARED_ANNOUNCE = preload("res://assets/cleared_announce.tscn")
const DEAD_ANNOUNCE = preload("res://assets/dead_announce.tscn")
@@ -29,6 +30,7 @@ var current_gun_index
var particle_number = 0
var enemy_hiveminds = []
var remaining_enemies
var last_hit : Node
# Called when the node enters the scene tree for the first time.
func _ready():
@@ -49,6 +51,7 @@ func _ready():
if money_drop_enabled == true:
pickups.append(money_drop)
if player:
#Set up starting guns and ammo
held_guns = [gun_1]
var instance_gun = held_guns[0].instantiate()
@@ -75,7 +78,10 @@ func _ready():
func _process(_delta):
pass
func gun_spawn(index):
#loop around if scrolling past available guns
if index > held_guns.size() - 1:
index = 0
@@ -111,21 +117,24 @@ func cleared():
func die():
Engine.time_scale = .05
AudioServer.set_bus_effect_enabled(0,0,true)
var deadmsg = DEAD_ANNOUNCE.instantiate()
get_parent().add_child(deadmsg)
await get_tree().create_timer(.3).timeout
get_tree().reload_current_scene()
#var instance_dead = dead_player.instantiate()
#instance_dead.position = head.global_position
#instance_dead.transform.basis = head.global_transform.basis
#get_tree().get_root().add_child(instance_dead)
var instance_dead = dead_player.instantiate()
instance_dead.global_position = player.global_position
instance_dead.transform.basis = player.global_transform.basis
#instance_dead.camera.rotation = player.camera.rotation
instance_dead.target = last_hit
get_tree().get_root().add_child(instance_dead)
instance_dead.camera.current = true
player.dead = true
player.gun.visible = false
player.crosshair.visible = false
func pickup_spawn():
var item_type = pickups.pick_random()
var item_spawn = item_type[0][0].instantiate()
var item_name = item_type[1][0]
print(item_name)
item_spawn.rand_amt = randi_range(25,100)
return item_spawn

View File

@@ -7,6 +7,7 @@ var bullet_damage
var bullet_force_mod = 1.0
var distance_from_player
var player
var fired_by
@onready var mesh = $gunbullet1
@onready var ray = $RayCast3D
@@ -16,8 +17,8 @@ var player
@onready var gunbullet1 = $gunbullet1/Cylinder
@onready var hit_indicator = $Audio/HitIndicator
@export var bullethole : Resource
@onready var level_control = get_tree().current_scene
var level_control
var rng = RandomNumberGenerator.new()
var av_x
var av_y
@@ -32,17 +33,21 @@ func _ready():
rotation += Vector3(av_x,av_y,av_z)
timer.start()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
position += transform.basis * Vector3(0, 0, -bullet_speed) * delta
rotation.x = clamp(rotation.x - delta * bullet_drop,deg_to_rad(-90),deg_to_rad(90))
if ray.is_colliding() and ray.get_collider != null:
if ray.is_colliding() and ray.get_collider() != null:
if ray.get_collider().is_in_group("player"):
var player = ray.get_collider()
player.level_control.health -= bullet_damage
if player.level_control.health <= bullet_damage:
player.level_control.last_hit = fired_by
player.hurt_audio.play()
else:
queue_free()
if ray.is_colliding() and !ray.get_collider().is_in_group("player"):

32
scripts/dead_cam.gd Normal file
View File

@@ -0,0 +1,32 @@
extends Node3D
@export var MOVE_SPEED = 15
@export var CAMERA_LOOK_SPEED = 20
@onready var look_ray = $LookRay
@onready var camera = $Camera3D
var target : Node
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
# Move towards and look at target
#calculate move direction
var target_pos_adjusted = Vector3(target.position.x -2,target.position.y + 4,target.position.z -2)
position = lerp(position,target_pos_adjusted,delta * MOVE_SPEED)
look_ray.look_at(Vector3(target.global_position), Vector3.UP)
camera.rotation = lerp(camera.rotation,look_ray.rotation,delta * CAMERA_LOOK_SPEED)
if Input.is_action_just_pressed("escape"):
get_tree().reload_current_scene()
queue_free()

View File

@@ -56,6 +56,7 @@ var bullet_destination
var gun_fire_pitch_starting
var current_weapon_index
var recoiling = false
var dead = false
# Slow Down Variables
const SLOWSPEED = .2
@@ -98,6 +99,9 @@ func _unhandled_input(event):
func _physics_process(delta):
if !dead:
# Add the gravity.
if not is_on_floor():
velocity.y -= gravity * delta

View File

@@ -1,6 +1,6 @@
extends CharacterBody3D
var player = null
var player
@export var health = 3
@export var number_of_drops = 3
@@ -19,7 +19,7 @@ const MAX_AV = 10
@onready var level_control = get_tree().current_scene
@onready var nav_agent = $NavigationAgent3D
@onready var target = $body/target
#@onready var target = $body/target
@onready var movement_shape = $MovementShape
@onready var barrel_1 = $TurretLook/Turret/Barrel1
@onready var barrel_2 = $TurretLook/Turret/Barrel2
@@ -57,7 +57,7 @@ var knocked = false
var stunned = false
func _ready():
player = get_node(player_path)
player = level_control.player
turret_material.emission_enabled = false
#randomly start the postfire timer so enemy turrets aren't synced
@@ -69,9 +69,11 @@ func _process(delta):
# Navigation
if !knocked:
if hive_velocity:
velocity = hive_velocity
if !stunned:
if player != null:
spider_look_next.look_at(Vector3(player.global_position.x, 0, player.global_position.z), Vector3.UP)
body.rotation.y = lerp(body.rotation.y, spider_look_next.rotation.y, delta * 1)
turret_look_next.look_at(player.global_position,Vector3.UP)
@@ -130,6 +132,7 @@ func _on_prefire_timer_timeout():
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
@@ -140,6 +143,7 @@ func _on_prefire_timer_timeout():
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