diff --git a/assets/mac_10.tscn b/assets/mac_10.tscn index 3432217..f8d1d93 100644 --- a/assets/mac_10.tscn +++ b/assets/mac_10.tscn @@ -470,7 +470,7 @@ tracks/1/keys = { "times": PackedFloat32Array(0, 0.3, 0.87, 0.93, 1.22, 1.6), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), "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/imported = false @@ -539,13 +539,19 @@ tracks/7/path = NodePath(".") tracks/7/interp = 1 tracks/7/loop_wrap = true tracks/7/keys = { -"times": PackedFloat32Array(0.28, 0.95), -"transitions": PackedFloat32Array(1, 1), +"times": PackedFloat32Array(0, 0.28, 0.2801, 0.95), +"transitions": PackedFloat32Array(1, 1, 1, 1), "values": [{ "args": [], +"method": &"mark_anim_rot" +}, { +"args": [], "method": &"spawn_mag" }, { "args": [], +"method": &"mark_anim_rot" +}, { +"args": [], "method": &"reload_finished" }] } @@ -729,10 +735,11 @@ _data = { &"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") weapon_info = ExtResource("3_h7i0a") anim_player = NodePath("GunAnims") +anim_rot_body = NodePath("mac10") barrel_ray = NodePath("mac10/RayCastBarrel") casing_ejector = NodePath("mac10/RayCastCasing") mag_ejector = NodePath("mac10/RayCastMag") diff --git a/assets/mag1.tscn b/assets/mag1.tscn index 5eb96a8..f700a95 100644 --- a/assets/mag1.tscn +++ b/assets/mag1.tscn @@ -55,10 +55,8 @@ size = Vector3(0.152, 0.867395, 0.075) [node name="Mag1" type="RigidBody3D" groups=["spawned"]] collision_layer = 32 collision_mask = 105 -mass = 2.0 +mass = 10.0 continuous_cd = true -linear_damp = 0.5 -angular_damp = 0.5 script = ExtResource("1_rutbo") [node name="mag" type="MeshInstance3D" parent="."] diff --git a/scripts/weapon_uberscript.gd b/scripts/weapon_uberscript.gd index 765ed44..7f9af5a 100644 --- a/scripts/weapon_uberscript.gd +++ b/scripts/weapon_uberscript.gd @@ -3,6 +3,7 @@ class_name weapon @export var weapon_info : weapon_resource @export var anim_player : AnimationPlayer +@export var anim_rot_body : Node3D @export var barrel_ray : RayCast3D @export var casing_ejector : RayCast3D @export var mag_ejector : RayCast3D @@ -23,6 +24,9 @@ class_name weapon @onready var player = get_tree().current_scene.player +#calculate spawn angular and linear velocity +var spawn_av_lv = [] + # Revolver vars var revolver_chamber_rot_amt = 0 var casings_chamber_last @@ -158,9 +162,12 @@ func reload(): func spawn_mag(): var instance_mag = weapon_info.mag.instantiate() + var anim_velocity = solve_anim_av_lv() + instance_mag.position = mag_ejector.global_position 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) func spawn_casing(): @@ -293,6 +300,33 @@ func bullet_fire(): 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(): if anim_player.is_playing() and anim_player.current_animation == "reload": return false