mags are now ejected with the calculated av/lv of the animation
This commit is contained in:
@@ -470,7 +470,7 @@ tracks/1/keys = {
|
|||||||
"times": PackedFloat32Array(0, 0.3, 0.87, 0.93, 1.22, 1.6),
|
"times": PackedFloat32Array(0, 0.3, 0.87, 0.93, 1.22, 1.6),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Vector3(0, -1.5708, 0), Vector3(-0.232886, -1.07885, -0.764517), Vector3(-0.629713, -1.24344, 0.0923291), Vector3(-0.492603, -1.40009, 0.121521), Vector3(-0.372059, -1.53262, 0.126735), Vector3(0, -1.5708, 0)]
|
"values": [Vector3(0, -1.5708, 0), Vector3(-0.232129, -1.07861, -2.11708), Vector3(-0.629713, -1.24344, 0.0923291), Vector3(-0.492603, -1.40009, 0.121521), Vector3(-0.372059, -1.53262, 0.126735), Vector3(0, -1.5708, 0)]
|
||||||
}
|
}
|
||||||
tracks/2/type = "value"
|
tracks/2/type = "value"
|
||||||
tracks/2/imported = false
|
tracks/2/imported = false
|
||||||
@@ -539,13 +539,19 @@ tracks/7/path = NodePath(".")
|
|||||||
tracks/7/interp = 1
|
tracks/7/interp = 1
|
||||||
tracks/7/loop_wrap = true
|
tracks/7/loop_wrap = true
|
||||||
tracks/7/keys = {
|
tracks/7/keys = {
|
||||||
"times": PackedFloat32Array(0.28, 0.95),
|
"times": PackedFloat32Array(0, 0.28, 0.2801, 0.95),
|
||||||
"transitions": PackedFloat32Array(1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||||
"values": [{
|
"values": [{
|
||||||
"args": [],
|
"args": [],
|
||||||
|
"method": &"mark_anim_rot"
|
||||||
|
}, {
|
||||||
|
"args": [],
|
||||||
"method": &"spawn_mag"
|
"method": &"spawn_mag"
|
||||||
}, {
|
}, {
|
||||||
"args": [],
|
"args": [],
|
||||||
|
"method": &"mark_anim_rot"
|
||||||
|
}, {
|
||||||
|
"args": [],
|
||||||
"method": &"reload_finished"
|
"method": &"reload_finished"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
@@ -729,10 +735,11 @@ _data = {
|
|||||||
&"swap_out": SubResource("Animation_i5303")
|
&"swap_out": SubResource("Animation_i5303")
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="mac10" type="Node3D" node_paths=PackedStringArray("anim_player", "barrel_ray", "casing_ejector", "mag_ejector", "audio_fire", "audio_empty", "audio_reload")]
|
[node name="mac10" type="Node3D" node_paths=PackedStringArray("anim_player", "anim_rot_body", "barrel_ray", "casing_ejector", "mag_ejector", "audio_fire", "audio_empty", "audio_reload")]
|
||||||
script = ExtResource("2_rdhyh")
|
script = ExtResource("2_rdhyh")
|
||||||
weapon_info = ExtResource("3_h7i0a")
|
weapon_info = ExtResource("3_h7i0a")
|
||||||
anim_player = NodePath("GunAnims")
|
anim_player = NodePath("GunAnims")
|
||||||
|
anim_rot_body = NodePath("mac10")
|
||||||
barrel_ray = NodePath("mac10/RayCastBarrel")
|
barrel_ray = NodePath("mac10/RayCastBarrel")
|
||||||
casing_ejector = NodePath("mac10/RayCastCasing")
|
casing_ejector = NodePath("mac10/RayCastCasing")
|
||||||
mag_ejector = NodePath("mac10/RayCastMag")
|
mag_ejector = NodePath("mac10/RayCastMag")
|
||||||
|
|||||||
@@ -55,10 +55,8 @@ size = Vector3(0.152, 0.867395, 0.075)
|
|||||||
[node name="Mag1" type="RigidBody3D" groups=["spawned"]]
|
[node name="Mag1" type="RigidBody3D" groups=["spawned"]]
|
||||||
collision_layer = 32
|
collision_layer = 32
|
||||||
collision_mask = 105
|
collision_mask = 105
|
||||||
mass = 2.0
|
mass = 10.0
|
||||||
continuous_cd = true
|
continuous_cd = true
|
||||||
linear_damp = 0.5
|
|
||||||
angular_damp = 0.5
|
|
||||||
script = ExtResource("1_rutbo")
|
script = ExtResource("1_rutbo")
|
||||||
|
|
||||||
[node name="mag" type="MeshInstance3D" parent="."]
|
[node name="mag" type="MeshInstance3D" parent="."]
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ class_name weapon
|
|||||||
|
|
||||||
@export var weapon_info : weapon_resource
|
@export var weapon_info : weapon_resource
|
||||||
@export var anim_player : AnimationPlayer
|
@export var anim_player : AnimationPlayer
|
||||||
|
@export var anim_rot_body : Node3D
|
||||||
@export var barrel_ray : RayCast3D
|
@export var barrel_ray : RayCast3D
|
||||||
@export var casing_ejector : RayCast3D
|
@export var casing_ejector : RayCast3D
|
||||||
@export var mag_ejector : RayCast3D
|
@export var mag_ejector : RayCast3D
|
||||||
@@ -23,6 +24,9 @@ class_name weapon
|
|||||||
|
|
||||||
@onready var player = get_tree().current_scene.player
|
@onready var player = get_tree().current_scene.player
|
||||||
|
|
||||||
|
#calculate spawn angular and linear velocity
|
||||||
|
var spawn_av_lv = []
|
||||||
|
|
||||||
# Revolver vars
|
# Revolver vars
|
||||||
var revolver_chamber_rot_amt = 0
|
var revolver_chamber_rot_amt = 0
|
||||||
var casings_chamber_last
|
var casings_chamber_last
|
||||||
@@ -158,9 +162,12 @@ func reload():
|
|||||||
|
|
||||||
func spawn_mag():
|
func spawn_mag():
|
||||||
var instance_mag = weapon_info.mag.instantiate()
|
var instance_mag = weapon_info.mag.instantiate()
|
||||||
|
var anim_velocity = solve_anim_av_lv()
|
||||||
|
|
||||||
instance_mag.position = mag_ejector.global_position
|
instance_mag.position = mag_ejector.global_position
|
||||||
instance_mag.transform.basis = mag_ejector.global_transform.basis
|
instance_mag.transform.basis = mag_ejector.global_transform.basis
|
||||||
instance_mag.linear_velocity += transform.basis * Vector3(0, -20, 0) + player.velocity
|
instance_mag.linear_velocity += transform.basis * anim_velocity["lv"] * 5
|
||||||
|
instance_mag.angular_velocity += transform.basis * anim_velocity["av"]
|
||||||
get_tree().get_root().add_child(instance_mag)
|
get_tree().get_root().add_child(instance_mag)
|
||||||
|
|
||||||
func spawn_casing():
|
func spawn_casing():
|
||||||
@@ -293,6 +300,33 @@ func bullet_fire():
|
|||||||
SignalBus.emit_signal("shot_fired")
|
SignalBus.emit_signal("shot_fired")
|
||||||
|
|
||||||
|
|
||||||
|
func mark_anim_rot():
|
||||||
|
if anim_rot_body != null:
|
||||||
|
if spawn_av_lv.size() < 2:
|
||||||
|
var time = anim_player.current_animation_position
|
||||||
|
var rot = anim_rot_body.rotation
|
||||||
|
var pos = anim_rot_body.position
|
||||||
|
print("MARK STATS : ",{"time" : time,"rot" : rot,"pos" : pos})
|
||||||
|
spawn_av_lv.append({"time" : time,"rot" : rot,"pos" : pos})
|
||||||
|
|
||||||
|
func solve_anim_av_lv():
|
||||||
|
if spawn_av_lv.size() >= 2:
|
||||||
|
print("SPAWN_AV_LV : ",spawn_av_lv)
|
||||||
|
var start = spawn_av_lv[0]
|
||||||
|
var end = spawn_av_lv[1]
|
||||||
|
|
||||||
|
var calculated_av = (end["rot"] - start["rot"]) / (end["time"] - start["time"])
|
||||||
|
var calculated_lv = (end["pos"] - start["pos"]) / (end["time"] - start["time"])
|
||||||
|
|
||||||
|
#clear array
|
||||||
|
#spawn_av_lv = []
|
||||||
|
|
||||||
|
print("CALCULATED AV: ",calculated_av, " - CALCULATED LV",calculated_lv)
|
||||||
|
|
||||||
|
return {"av" : calculated_av,"lv" : calculated_lv}
|
||||||
|
else:
|
||||||
|
return {"av" : Vector3.ZERO,"lv" : Vector3.ZERO}
|
||||||
|
|
||||||
func can_fire():
|
func can_fire():
|
||||||
if anim_player.is_playing() and anim_player.current_animation == "reload":
|
if anim_player.is_playing() and anim_player.current_animation == "reload":
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user