mostly finished revolver rig and script

This commit is contained in:
derek
2024-07-16 11:58:16 -05:00
parent 2b5e63a1ec
commit 3592386aac
13 changed files with 1304 additions and 82 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 154 KiB

View File

@@ -4,19 +4,21 @@ extends RigidBody3D
@onready var audio_drop = $DropSound
var rng = RandomNumberGenerator.new()
var random_rotation = true
# Called when the node enters the scene tree for the first time.
func _ready():
var lv_x = rng.randf_range(5.0,7.0)
var lv_y = rng.randf_range(0.0,3.0)
var lv_z = rng.randf_range(0.0,2.0)
var av_x = 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)
linear_velocity += transform.basis * Vector3(lv_x, lv_y, lv_z)
angular_velocity += transform.basis * Vector3(av_x,av_y,av_z)
if random_rotation == true:
var lv_x = rng.randf_range(5.0,7.0)
var lv_y = rng.randf_range(0.0,3.0)
var lv_z = rng.randf_range(0.0,2.0)
var av_x = 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)
linear_velocity += transform.basis * Vector3(lv_x, lv_y, lv_z)
angular_velocity += transform.basis * Vector3(av_x,av_y,av_z)
func _on_timer_timeout():
collision_shape.disabled = true

View File

@@ -16,8 +16,8 @@ mass = 0.1
continuous_cd = true
max_contacts_reported = 1
contact_monitor = true
linear_damp = 0.5
angular_damp = 0.5
linear_damp = 0.1
angular_damp = 0.1
script = ExtResource("1_34yke")
[node name="casing2" parent="." instance=ExtResource("1_8ox1t")]

View File

@@ -395,6 +395,7 @@ _data = {
script = ExtResource("2_6i1l4")
gun_name = "Mac 10"
max_ammo = 30
bullet_drop = 0.05
random_spread_amt = 1.5
fire_pitch_scale_amt = 0.1
flare_light = NodePath("mac10/SpotLight3D")

View File

@@ -67,6 +67,18 @@ tracks/1/keys = {
"update": 0,
"values": [Vector3(0, 0, -1.5708), Vector3(0.14619, 0.995226, -2.05295), Vector3(0.14619, 0.812874, -2.05295), Vector3(0.14619, 1.0641, -2.05295), Vector3(0.54766, -0.269512, -0.540009), Vector3(0.54766, -0.269512, -0.540009), Vector3(0, 0, -1.5708)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("revolver1/Chamber:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.24, 0.45, 2.66, 2.84),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Vector3(-0.0143475, 0, -0.0849619), Vector3(-0.014, -0.3, -0.085), Vector3(-0.014, -0.3, -0.085), Vector3(-0.0143475, 0, -0.0849619)]
}
[sub_resource type="Animation" id="Animation_rlxei"]
resource_name = "reload"
@@ -115,10 +127,10 @@ tracks/3/path = NodePath("revolver1/Chamber/casing_001:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.3, 0.31, 1.29, 1.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.3, 0.31),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false, false, true]
"values": [true, false]
}
tracks/4/type = "value"
tracks/4/imported = false
@@ -127,10 +139,10 @@ tracks/4/path = NodePath("revolver1/Chamber/casing_002:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.3, 0.31, 1.29, 1.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.3, 0.31),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false, false, true]
"values": [true, false]
}
tracks/5/type = "value"
tracks/5/imported = false
@@ -139,10 +151,10 @@ tracks/5/path = NodePath("revolver1/Chamber/casing_003:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.3, 0.31, 1.29, 1.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.3, 0.31),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false, false, true]
"values": [true, false]
}
tracks/6/type = "value"
tracks/6/imported = false
@@ -151,10 +163,10 @@ tracks/6/path = NodePath("revolver1/Chamber/casing_004:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.3, 0.31, 1.29, 1.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.3, 0.31),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false, false, true]
"values": [true, false]
}
tracks/7/type = "value"
tracks/7/imported = false
@@ -163,10 +175,10 @@ tracks/7/path = NodePath("revolver1/Chamber/casing_005:visible")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0.3, 0.31, 1.29, 1.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.3, 0.31),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false, false, true]
"values": [true, false]
}
tracks/8/type = "value"
tracks/8/imported = false
@@ -175,10 +187,10 @@ tracks/8/path = NodePath("revolver1/Chamber/casing:visible")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0.3, 0.31, 1.29, 1.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.3, 0.31),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false, false, true]
"values": [true, false]
}
tracks/9/type = "method"
tracks/9/imported = false
@@ -187,7 +199,7 @@ tracks/9/path = NodePath(".")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0.31, 1.86),
"times": PackedFloat32Array(0.31, 1.4),
"transitions": PackedFloat32Array(1, 1),
"values": [{
"args": [],
@@ -272,7 +284,7 @@ tracks/15/keys = {
[sub_resource type="Animation" id="Animation_n8vac"]
resource_name = "shoot"
length = 0.3
length = 0.25
step = 0.01
tracks/0/type = "value"
tracks/0/imported = false
@@ -281,7 +293,7 @@ tracks/0/path = NodePath("revolver1:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.03, 0.07, 0.3),
"times": PackedFloat32Array(0.03, 0.07, 0.25),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, -0.073), Vector3(0, 0.220238, 0.54816), Vector3(0, 0, -0.073)]
@@ -293,7 +305,7 @@ tracks/1/path = NodePath("revolver1:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.03, 0.07, 0.3),
"times": PackedFloat32Array(0.03, 0.07, 0.25),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, -1.5708), Vector3(0.450033, 0, -1.5708), Vector3(0, 0, -1.5708)]
@@ -334,6 +346,32 @@ tracks/4/keys = {
"update": 0,
"values": [Vector3(1.19209e-07, 1.5708, 1.5708), Vector3(1.0472, 1.5708, 1.5708)]
}
tracks/5/type = "method"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath(".")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.03),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [null],
"method": &"fire"
}]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("revolver1/Chamber:position")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(-0.0143475, 0, -0.0849619)]
}
[sub_resource type="Animation" id="Animation_w02ee"]
resource_name = "swap_in"
@@ -415,33 +453,26 @@ _data = {
"swap_out": SubResource("Animation_nvmxj")
}
[node name="revolver1" node_paths=PackedStringArray("chamber", "anim_player", "barrel_raycast", "casing_ejectors", "audio_fire", "audio_empty", "audio_reload") instance=ExtResource("1_i5f84")]
[node name="revolver1" instance=ExtResource("1_i5f84")]
script = ExtResource("2_7rsti")
gun_name = "Ye Ol' Revolver"
fire_mode = 1
fov_zoom_amt = 0.95
recoil_amount = 1.0
max_ammo = 6
start_mags = 4
bullet_damage = 5
bullet_speed = 300
bullet_drop = 0.0
random_spread_amt = 0.1
chamber = NodePath("revolver1/Chamber")
bullet = ExtResource("3_tru5y")
bullethole = ExtResource("4_ubqgq")
casing = ExtResource("5_m3vsl")
anim_player = NodePath("AnimationPlayer")
barrel_raycast = NodePath("revolver1/RayCastBarrel")
casing_ejectors = NodePath("revolver1/Chamber/RayCastCasing1")
audio_fire = NodePath("Audio/Fire")
audio_empty = NodePath("Audio/Empty")
audio_reload = NodePath("Audio/Reload")
spawn_casing = ExtResource("5_m3vsl")
[node name="revolver1" parent="." index="0"]
transform = Transform3D(-0.327362, 0.501856, 0.0312333, -0.502776, -0.327224, -0.0118659, 0.00710883, -0.0326464, 0.599069, 0.104408, 0.639685, -0.116275)
transform = Transform3D(-2.17199e-06, 0.600001, 0, -0.594652, -2.15264e-06, -0.0799332, -0.0799332, -2.89358e-07, 0.594652, 0, 0.0653908, 0.111429)
[node name="Chamber" parent="revolver1" index="0"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -0.0143475, 0, -0.0849619)
transform = Transform3D(0.866027, 4.84982e-07, 0.499998, 0.499998, -1.80999e-06, -0.866027, 4.84982e-07, 1, -1.80999e-06, -0.0143475, 0, -0.0849619)
[node name="casing" parent="revolver1/Chamber" index="6"]
transform = Transform3D(-0.611184, 1.18824e-07, 0.791489, -9.55509e-08, -1, 7.63428e-08, 0.791489, -2.89681e-08, 0.611184, -0.110813, 0.140209, -0.066206)
@@ -465,7 +496,7 @@ transform = Transform3D(4.17223e-07, 5.99699e-19, 2.10229, -2.98023e-07, -2.1022
transform = Transform3D(4.17223e-07, 7.04731e-19, 2.10229, -2.98023e-07, -2.10229, -5.96046e-08, 2.1023, -2.38418e-07, -2.98033e-07, 0.126097, 0.1392, -0.0677698)
[node name="Trigger" parent="revolver1" index="2"]
transform = Transform3D(-0.86282, -0.50551, 1.82994e-06, 0, -3.61999e-06, -1, 0.50551, -0.86282, 3.1234e-06, 0.226752, 0, -0.00209358)
transform = Transform3D(0.207537, -0.978227, 3.54117e-06, 0, -3.61999e-06, -1, 0.978227, 0.207537, -7.51281e-07, 0.226752, 0, -0.00209358)
[node name="RayCastBarrel" type="RayCast3D" parent="revolver1" index="3"]
transform = Transform3D(1.87678, -5.68434e-14, 0, 5.68434e-14, 1.87677, 0, 0, 0, 1.87678, -0.142459, 0.000826949, -1.92175)

File diff suppressed because one or more lines are too long

View File

@@ -39,7 +39,7 @@ 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))
await get_tree().create_timer(.02).timeout
await get_tree().create_timer(.02 * Engine.time_scale * (150/bullet_speed)).timeout
visible = true

View File

@@ -9,6 +9,7 @@ var cycle_count
@export_group("Gun Feel")
@export var gun_name : String
@export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var fov_zoom_amt = .98
@export var recoil_amount = .2
@export var max_ammo = 15
@export var start_mags = 3
@@ -111,7 +112,7 @@ func shoot(player,delta):
instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis
get_tree().get_root().add_child(instance_casing)
player.weapon_recoil(delta)
player.weapon_recoil()
if fire_mode != 0:
cycle_count -= 1

View File

@@ -137,9 +137,9 @@ func _physics_process(delta):
Engine.time_scale = lerp(0, 1, SLOWSPEED)
gun.random_spread_amt = 0
AudioServer.set_bus_effect_enabled(0,0,true)
camera.fov = lerp(camera.fov, camera.fov * .98, delta * 100)
camera.fov = lerp(camera.fov, camera.fov * gun.fov_zoom_amt, delta * 100)
if sensitivity_shift == true:
SENSITIVITY = lerp(SENSITIVITY, SENSITIVITY * .999, delta * 100)
SENSITIVITY = lerp(SENSITIVITY, SENSITIVITY * .998, delta * 100)
if remaining_stamina >0:
remaining_stamina -= 1000 * delta
else:
@@ -257,6 +257,7 @@ func weapon_bob(vel : float, delta):
weapon_holder.position.y = lerp(weapon_holder.position.y, def_weapon_holder_pos.y, .1 * delta)
weapon_holder.position.x = lerp(weapon_holder.position.x, def_weapon_holder_pos.x, .1 * delta)
func weapon_recoil(delta):
func weapon_recoil():
var recoil_to = camera.rotation.x + gun.recoil_amount
camera.rotation.x = clamp(lerp(camera.rotation.x,recoil_to, delta * 10), deg_to_rad(-90), deg_to_rad(60))
print(recoil_to)
camera.rotation.x = clamp(lerp(camera.rotation.x,recoil_to, .05), deg_to_rad(-90), deg_to_rad(60))

View File

@@ -9,6 +9,7 @@ var cycle_count
@export_group("Gun Feel")
@export var gun_name : String
@export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var fov_zoom_amt = .98
@export var recoil_amount = .2
@export var max_ammo = 15
@export var start_mags = 3
@@ -23,7 +24,27 @@ var cycle_count
@export var chamber : Node
@export var bullet : Resource
@export var bullethole : Resource
@export var casing : Resource
@export var spawn_casing : Resource
@export_subgroup("Revolver/Casings")
@export var casing0 : Node
@export var casing1 : Node
@export var casing2 : Node
@export var casing3 : Node
@export var casing4 : Node
@export var casing5 : Node
@export var casing_spawn0 : Node
@export var casing_spawn1 : Node
@export var casing_spawn2 : Node
@export var casing_spawn3 : Node
@export var casing_spawn4 : Node
@export var casing_spawn5 : Node
@export_subgroup("Revolver/Bullets")
@export var bullet0 : Node
@export var bullet1 : Node
@export var bullet2 : Node
@export var bullet3 : Node
@export var bullet4 : Node
@export var bullet5 : Node
@export_subgroup("Raycast Nodes")
@export var anim_player : Node
@export var barrel_raycast : Node
@@ -36,8 +57,13 @@ var cycle_count
@onready var player = $"../../../../"
@onready var level_control = $"../../../../../"
@onready var ammo_current
var casing_array = []
var casing_spawn_array = []
var bullet_array = []
var rng = RandomNumberGenerator.new()
var gun_index
var casings_chamber_last
#var ammo_current
var ammo_reserve
@@ -50,6 +76,11 @@ func _ready():
ammo_current = level_control.ammo_current[gun_index]
ammo_reserve = level_control.ammo_reserve[gun_index]
casings_chamber_last = max_ammo
casing_array = [casing0,casing1,casing2,casing3,casing4,casing5]
casing_spawn_array = [casing_spawn0,casing_spawn1,casing_spawn2,casing_spawn3,casing_spawn4,casing_spawn5]
bullet_array = [bullet0,bullet1,bullet2,bullet3,bullet4,bullet5]
if fire_mode == 0:
cycle_count = 1
@@ -69,13 +100,28 @@ func _process(delta):
func reload_finished():
#if max ammo in reserve fill all the way
if level_control.ammo_reserve[gun_index] >= max_ammo:
level_control.ammo_current[gun_index] += max_ammo
level_control.ammo_reserve[gun_index] -= max_ammo
casings_chamber_last = max_ammo
for i in casing_array:
i.visible = true
for i in bullet_array:
i.visible = true
player.reloading = false
#if not max ammo in reserve add remaining ammo
else:
level_control.ammo_current[gun_index] += level_control.ammo_reserve[gun_index]
var casings_in_chamber = level_control.ammo_reserve[gun_index]
casings_chamber_last = level_control.ammo_reserve[gun_index]
level_control.ammo_reserve[gun_index] -= level_control.ammo_reserve[gun_index]
while casings_in_chamber > 0:
casing_array[casings_in_chamber].visible = true
bullet_array[casings_in_chamber].visible = true
casings_in_chamber -= 1
await get_tree().create_timer(.01).timeout
player.reloading = false
func shoot(player,delta):
@@ -90,44 +136,54 @@ func shoot(player,delta):
audio_fire.play()
anim_player.play("shoot")
# instance bullet
var instance_bullet = bullet.instantiate()
instance_bullet.position = player.bullet_ray.global_position
#shoot bullet from real gun if gun is folded up
if player.gun_folded == false:
instance_bullet.transform.basis = player.bullet_ray.global_transform.basis
else:
instance_bullet.transform.basis = barrel_raycast.global_transform.basis
instance_bullet.bullet_speed = bullet_speed
instance_bullet.bullet_drop = bullet_drop
instance_bullet.bullet_damage = bullet_damage
instance_bullet.random_spread_amt = random_spread_amt
instance_bullet.instance_bullethole = bullethole.instantiate()
instance_bullet.gun = self
get_tree().get_root().add_child(instance_bullet)
player.weapon_recoil(delta)
# chamberspin transform
#DO SOMETHING HERE
if fire_mode != 0:
cycle_count -= 1
elif !anim_player.is_playing() and cycle_count != 0:
anim_player.play("empty")
audio_empty.play()
func fire(delta):
var instance_bullet = bullet.instantiate()
instance_bullet.position = player.bullet_ray.global_position
#shoot bullet from real gun if gun is folded up
if player.gun_folded == false:
instance_bullet.transform.basis = player.bullet_ray.global_transform.basis
else:
instance_bullet.transform.basis = barrel_raycast.global_transform.basis
instance_bullet.bullet_speed = bullet_speed
instance_bullet.bullet_drop = bullet_drop
instance_bullet.bullet_damage = bullet_damage
instance_bullet.random_spread_amt = random_spread_amt
instance_bullet.instance_bullethole = bullethole.instantiate()
instance_bullet.gun = self
get_tree().get_root().add_child(instance_bullet)
player.weapon_recoil()
# chamberspin transform
#DO SOMETHING HERE
if fire_mode != 0:
cycle_count -= 1
func reload(player,delta):
if level_control.ammo_current[gun_index] < max_ammo and player.reloading == false and level_control.ammo_reserve[gun_index] > 0:
player.reloading = true
anim_player.play("reload")
audio_reload.play()
for i in bullet_array:
i.visible = false
if anim_player.is_playing() and anim_player.current_animation == "reload":
level_control.ammo_current[gun_index] = 0
func spawn_casings():
pass
#var instance_mag = mag.instantiate()
#instance_mag.position = mag_ejector.global_position
#instance_mag.transform.basis = mag_ejector.global_transform.basis
#get_tree().get_root().add_child(instance_mag)
func spawn_casings():
for i in casing_array:
if casings_chamber_last > 0:
var instance_casing = spawn_casing.instantiate()
instance_casing.position = i.global_position
instance_casing.random_rotation = false
instance_casing.transform.basis = i.global_transform.basis
instance_casing.rotation.x += deg_to_rad(90)
instance_casing.linear_velocity.y = -(8 + rng.randf_range(0,3))
get_tree().get_root().add_child(instance_casing)
casings_chamber_last -= 1
func swapped_out():
queue_free()