forked from unfa/liblast
Improved bullet tracer graphics, fixed shell casing velocity and rotation (not entirely, but almost - player vlocity is not applied, becasue it contains gravity and that's nnot good for this case).
Also fixed bullet tracer spawning a little further away to not clip the weapon. Also synced spawning the shell casing wiht the animation.godot4-port
parent
8035a3037d
commit
c041adc786
Binary file not shown.
|
@ -14,7 +14,7 @@ func _ready():
|
|||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
if first:
|
||||
translate_object_local(Vector3(- rand_range(0, velocity),0 ,0))
|
||||
translate_object_local(Vector3(- rand_range(0, velocity) - velocity*3 ,0 ,0))
|
||||
first = false
|
||||
else:
|
||||
translate_object_local(Vector3(-velocity,0,0))
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
"nodes" : [
|
||||
{
|
||||
"mesh" : 0,
|
||||
"name" : "Sphere"
|
||||
"name" : "Tracer"
|
||||
}
|
||||
],
|
||||
"materials" : [
|
||||
|
@ -23,8 +23,8 @@
|
|||
"doubleSided" : true,
|
||||
"emissiveFactor" : [
|
||||
1,
|
||||
0.6177892684936523,
|
||||
0.07687932252883911
|
||||
1,
|
||||
1
|
||||
],
|
||||
"name" : "BulletTracerMaterial",
|
||||
"pbrMetallicRoughness" : {
|
||||
|
@ -47,9 +47,11 @@
|
|||
"attributes" : {
|
||||
"POSITION" : 0,
|
||||
"NORMAL" : 1,
|
||||
"TEXCOORD_0" : 2
|
||||
"TANGENT" : 2,
|
||||
"TEXCOORD_0" : 3,
|
||||
"COLOR_0" : 4
|
||||
},
|
||||
"indices" : 3,
|
||||
"indices" : 5,
|
||||
"material" : 0
|
||||
}
|
||||
]
|
||||
|
@ -59,7 +61,7 @@
|
|||
{
|
||||
"bufferView" : 0,
|
||||
"componentType" : 5126,
|
||||
"count" : 26,
|
||||
"count" : 30,
|
||||
"max" : [
|
||||
0.08660250902175903,
|
||||
0.07499998807907104,
|
||||
|
@ -68,55 +70,77 @@
|
|||
"min" : [
|
||||
-0.08660256862640381,
|
||||
-0.07499998807907104,
|
||||
-10.209983825683594
|
||||
-12.261317253112793
|
||||
],
|
||||
"type" : "VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView" : 1,
|
||||
"componentType" : 5126,
|
||||
"count" : 26,
|
||||
"count" : 30,
|
||||
"type" : "VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView" : 2,
|
||||
"componentType" : 5126,
|
||||
"count" : 26,
|
||||
"type" : "VEC2"
|
||||
"count" : 30,
|
||||
"type" : "VEC4"
|
||||
},
|
||||
{
|
||||
"bufferView" : 3,
|
||||
"componentType" : 5126,
|
||||
"count" : 30,
|
||||
"type" : "VEC2"
|
||||
},
|
||||
{
|
||||
"bufferView" : 4,
|
||||
"componentType" : 5126,
|
||||
"count" : 30,
|
||||
"type" : "VEC4"
|
||||
},
|
||||
{
|
||||
"bufferView" : 5,
|
||||
"componentType" : 5123,
|
||||
"count" : 72,
|
||||
"count" : 90,
|
||||
"type" : "SCALAR"
|
||||
}
|
||||
],
|
||||
"bufferViews" : [
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 312,
|
||||
"byteLength" : 360,
|
||||
"byteOffset" : 0
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 312,
|
||||
"byteOffset" : 312
|
||||
"byteLength" : 360,
|
||||
"byteOffset" : 360
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 208,
|
||||
"byteOffset" : 624
|
||||
"byteLength" : 480,
|
||||
"byteOffset" : 720
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 144,
|
||||
"byteOffset" : 832
|
||||
"byteLength" : 240,
|
||||
"byteOffset" : 1200
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 480,
|
||||
"byteOffset" : 1440
|
||||
},
|
||||
{
|
||||
"buffer" : 0,
|
||||
"byteLength" : 180,
|
||||
"byteOffset" : 1920
|
||||
}
|
||||
],
|
||||
"buffers" : [
|
||||
{
|
||||
"byteLength" : 976,
|
||||
"uri" : "data:application/octet-stream;base64,0MxMstDMTKUYXCPBqFyxPcjMzDGQp/m9sFwxPZiZmb2Qp/m9mFGMPYBbmbLAJzA8oFEMPRAKc73AJzA8AAAAANDMTKXQzMw90MxMstDMTKUYXCPBsFwxvZiZmb2Qp/m9mFEMvRAKc73IJzA8AAAAANDMTKXQzMw90MxMstDMTKUYXCPBsFyxvcjMzLGQp/m9mFGMvVCwELLQJzA8AAAAANDMTKXQzMw90MxMstDMTKUYXCPBsFwxvZiZmT2Qp/m9mFEMvRAKcz3YJzA8AAAAANDMTKXQzMw90MxMstDMTKUYXCPBsFwxvZiZmT2Qp/m9sFwxPZiZmT2Qp/m9mFEMvRAKcz3YJzA8oFEMPRAKcz3IJzA8AAAAANDMTKXQzMw90MxMstDMTKUYXCPBAAAAANDMTKXQzMw9AAAAAAAAAAAAAIC//39/PwAAAAD8AX49/33/PrtFXb/8AX493vluPwAAAABvjbc+3vnuPp71Tr9vjbc+AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC//33/vrtFXb/8AX493vnuvp71Tr9vjbc+AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC//39/vwAAAAD8AX493vluvwAAAABvjbc+AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC//33/vrtFXT/8AX493vnuvp71Tj9vjbc+AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC//33/vrtFXT/8AX49/33/PrtFXT/8AX493vnuvp71Tj9vjbc+3vnuPp71Tj9vjbc+AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/VVUVPwAAgD+rqio/q6oqPwAAAD+rqio/qqoqP6yqqj4AAAA/rKqqPlVVFT8AAAAAVVXVPgAAgD+rqqo+q6oqP6qqqj6sqqo+VVXVPgAAAAAAAIA+AACAP6yqKj6rqio/qqoqPqyqqj4AAIA+AAAAAKyqqj0AAIA/AAAAAKuqKj8AAAAArKqqPqyqqj0AAAAAq6pqPwAAgD///38/q6oqP1VVVT+rqio///9/P6yqqj5VVVU/rKqqPquqaj8AAAAAAQBAPwAAgD///z8/AAAAAAAAAQACAAEAAwAEAAEABAACAAMABQAEAAYAAgAHAAIABAAIAAIACAAHAAQACQAIAAoABwALAAcACAAMAAcADAALAAgADQAMAA4ACwAPAAsADAAQAAsAEAAPAAwAEQAQABIAEwAUABMAFQAWABMAFgAUABUAFwAWABgAFAABABQAFgADABQAAwABABYAGQADAA=="
|
||||
"byteLength" : 2100,
|
||||
"uri" : "data:application/octet-stream;base64,0MxMstDMTKVbLkTBqFyxPcjMzDGQp/m9sFwxPZiZmb2Qp/m9mFGMPYBbmbLAJzA8oFEMPRAKc73AJzA8AAAAANDMTKXQzMw9sFwxvZiZmb2Qp/m9mFEMvRAKc73IJzA8sFyxvcjMzLGQp/m9mFGMvVCwELLQJzA80MxMstDMTKVbLkTBsFyxvcjMzLGQp/m9sFwxvZiZmT2Qp/m9mFGMvVCwELLQJzA8mFEMvRAKcz3YJzA8AAAAANDMTKXQzMw9sFwxPZiZmT2Qp/m9oFEMPRAKcz3IJzA8qFyxPcjMzDGQp/m9mFGMPYBbmbLAJzA8sFyxvcjMzLGQp/m9sFwxvZiZmT2Qp/m9AAAAAAAAAACeYsjAsFwxPZiZmT2Qp/m9qFyxPcjMzDGQp/m9sFwxvZiZmb2Qp/m9sFyxvcjMzLGQp/m9AAAAAAAAAACeYsjAsFwxPZiZmb2Qp/m9qFyxPcjMzDGQp/m9AAAAAAAAAAAAAIC/ANJ/PwAAAAAuwRY9ANL/PruLXb8uwRY93vluPwAAAABvjbc+3vnuPp71Tr9vjbc+AAAAAAAAAAAAAIA/ANL/vruLXb8uwRY93vnuvp71Tr9vjbc+ANJ/vwAAAAAuwRY93vluvwAAAABvjbc+AAAAAAAAAAAAAIC/ANJ/vwAAAAAuwRY9ANL/vruLXT8uwRY93vluvwAAAABvjbc+3vnuvp71Tj9vjbc+AAAAAAAAAAAAAIA/ANL/PruLXT8uwRY93vnuPp71Tj9vjbc+ANJ/PwAAAAAuwRY93vluPwAAAABvjbc+ANJ/vwAAAAAuwRY9ANL/vruLXT8uwRY9AAAAAAAAAAAAAIC/ANL/PruLXT8uwRY9ANJ/PwAAAAAuwRY9ANL/vruLXb8uwRY9ANJ/vwAAAAAuwRY9AAAAAAAAAAAAAIC/ANL/PruLXb8uwRY9ANJ/PwAAAAAuwRY9AACAP0V29DIAAACAAACAv0JYVDo18X8/MuqtvAAAgL/Gs10/HgAAP6vDy7MAAIC/NOCUPayvej8gv0G+AACAv9mzXT/7//8+wdQwNAAAgL8AAIA/uVg3tAAAAIAAAIC/xbNdPx4AAL9akrozAACAv9mzXT/8//++kZ+EtAAAgL9FWFQ6NfF/v0LqrTwAAIC/OeCUPayver8jv0E+AACAvwAAgD9FdvQzAAAAgAAAgD9FWFQ6NfF/Pz/qrTwAAIA/xbNdPx4AAD97k8EzAACAPzzglD2rr3o/K79BPgAAgD/Zs10//P//PmRxdLQAAIA/AACAP0x2dLMAAACAAACAP8azXT8eAAC/otrJswAAgD/Zs10/+///vpbTFjQAAIA/QVhUOjXxf78y6q28AACAPzPglD2sr3q/HL9BvgAAgD9GWFQ6NvF/P0LqrTwAAIA/xrNdPx8AAD+hM+czAACAPwAAgD9FdvSyAAAAgAAAgD/Gs10/HgAAv9mOy7MAAIA/QlhUOjXxf7806q28AACAP8azXT8fAAC/qb3uMwAAgL9HWFQ6NvF/v0TqrTwAAIC/AACAP4eCiTQAAACAAACAv8azXT8fAAA/0QTEswAAgL9CWFQ6NvF/PzHqrbwAAIC/6QAAPwAAAAAAAIA/imd7Pw8BQD+KZ3s/+ERlP9Imfj8IojI/0iZ+P+kAAD8AAIA/TgCAPopnez/xu5o+0iZ+PwAAAACKZ3s/8eHVPdImfj/pAAA/AAAAAAAAAACKZ3s/TgCAPopnez/x4dU90iZ+P/G7mj7SJn4/6QAAPwAAgD8PAUA/imd7PwiiMj/SJn4/AACAP4pnez/4RGU/0iZ+PwAAAACKZ3s/TgCAPopnez/pAAA/vnz4Pg8BQD+KZ3s/AACAP4pnez9OAIA+imd7PwAAAACKZ3s/6QAAP758+D4PAUA/imd7PwAAgD+KZ3s/AAAAAAAAAAAAAAAAAACAP00nnD5NJ5w+TSecPgAAgD9NJ5w+TSecPk0nnD4AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/TSecPk0nnD5NJ5w+AACAPwAAgD8AAIA/AACAPwAAgD9NJ5w+TSecPk0nnD4AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAAAAAAAgD9NJ5w+TSecPk0nnD4AAIA/TSecPk0nnD5NJ5w+AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP00nnD5NJ5w+TSecPgAAgD8AAIA/AACAPwAAgD8AAIA/TSecPk0nnD5NJ5w+AACAPwAAgD8AAIA/AACAPwAAgD9NJ5w+TSecPk0nnD4AAIA/TSecPk0nnD5NJ5w+AACAPwAAAAAAAAAAAAAAAAAAgD9NJ5w+TSecPk0nnD4AAIA/TSecPk0nnD5NJ5w+AACAP00nnD5NJ5w+TSecPgAAgD9NJ5w+TSecPk0nnD4AAIA/AAAAAAAAAAAAAAAAAACAP00nnD5NJ5w+TSecPgAAgD9NJ5w+TSecPk0nnD4AAIA/AAABAAIAAQADAAQAAQAEAAIAAwAFAAQAAAACAAYAAgAEAAcAAgAHAAYABAAFAAcAAAAGAAgABgAHAAkABgAJAAgABwAFAAkACgALAAwACwANAA4ACwAOAAwADQAPAA4ACgAMABAADAAOABEADAARABAADgAPABEACgAQABIAEAARABMAEAATABIAEQAPABMAFAAVABYAFwAYABYAGQAaABsAFQAXABYAHAAZABsAHQAcABsA"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://Assets/Effects/BulletTracer.gd" type="Script" id=1]
|
||||
[ext_resource path="res://Assets/Effects/BulletTracer.gltf" type="PackedScene" id=2]
|
||||
[ext_resource path="res://Assets/Effects/BulletTracerMaterial.tres" type="Material" id=3]
|
||||
|
||||
[sub_resource type="RayShape" id=1]
|
||||
length = 3.0
|
||||
|
@ -9,17 +10,21 @@ length = 3.0
|
|||
[node name="BulletTracer" type="Spatial"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="BulletTracer" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( -4.88762e-08, 0, -0.3, 0, 0.3, 0, 0.3, 0, -4.88762e-08, 0, 0, 0 )
|
||||
|
||||
[node name="Raycast" type="Area" parent="BulletTracer"]
|
||||
transform = Transform( 3.32303, 0, 0, 0, 3.32303, 0, 0, 0, 3.32303, 0.00196616, -7.94729e-07, -9.38667 )
|
||||
[node name="Raycast" type="Area" parent="."]
|
||||
transform = Transform( -1.62417e-07, 0, -0.996909, 0, 0.996909, 0, 0.996909, 0, -1.62417e-07, 2.816, -2.38419e-07, 0.000590307 )
|
||||
input_ray_pickable = false
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="BulletTracer/Raycast"]
|
||||
[node name="CollisionShape" type="CollisionShape" parent="Raycast"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00372178, -6.92157e-07, 2.79426 )
|
||||
shape = SubResource( 1 )
|
||||
[connection signal="body_entered" from="BulletTracer/Raycast" to="." method="_on_Raycast_body_entered"]
|
||||
|
||||
[node name="BulletTracer" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( -4.07302e-08, 0, -1, 0, 0.25, 0, 0.25, 0, -1.62921e-07, -0.00849247, 0.0281134, 0.0116889 )
|
||||
|
||||
[node name="Tracer" parent="BulletTracer" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0101204, 0, -0.0227299 )
|
||||
material/0 = ExtResource( 3 )
|
||||
[connection signal="body_entered" from="Raycast" to="." method="_on_Raycast_body_entered"]
|
||||
|
||||
[editable path="BulletTracer"]
|
||||
|
|
|
@ -1,19 +1,48 @@
|
|||
[gd_resource type="ShaderMaterial" load_steps=6 format=2]
|
||||
[gd_resource type="ShaderMaterial" load_steps=15 format=2]
|
||||
|
||||
[sub_resource type="VisualShaderNodeFresnel" id=1]
|
||||
default_input_values = [ 2, true, 3, 3.0 ]
|
||||
|
||||
[sub_resource type="VisualShaderNodeColorConstant" id=2]
|
||||
output_port_for_preview = 0
|
||||
constant = Color( 1, 0.937255, 0.215686, 1 )
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorOp" id=3]
|
||||
[sub_resource type="VisualShaderNodeScalarOp" id=1]
|
||||
default_input_values = [ 0, 0.0, 1, 1.3 ]
|
||||
operator = 2
|
||||
|
||||
[sub_resource type="VisualShaderNodeScalarConstant" id=4]
|
||||
[sub_resource type="VisualShaderNodeScalarOp" id=2]
|
||||
|
||||
[sub_resource type="VisualShaderNodeScalarOp" id=3]
|
||||
default_input_values = [ 0, 0.0, 1, 0.5 ]
|
||||
operator = 2
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorOp" id=13]
|
||||
operator = 2
|
||||
|
||||
[sub_resource type="VisualShaderNodeScalarConstant" id=14]
|
||||
constant = 8.0
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorScalarMix" id=15]
|
||||
|
||||
[sub_resource type="VisualShaderNodeFresnel" id=4]
|
||||
default_input_values = [ 2, true, 3, 0.5 ]
|
||||
|
||||
[sub_resource type="VisualShaderNodeColorConstant" id=5]
|
||||
output_port_for_preview = 0
|
||||
constant = Color( 1, 0.859069, 0.215686, 1 )
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorOp" id=6]
|
||||
operator = 2
|
||||
|
||||
[sub_resource type="VisualShaderNodeScalarConstant" id=7]
|
||||
constant = 2.0
|
||||
|
||||
[sub_resource type="VisualShader" id=5]
|
||||
[sub_resource type="VisualShaderNodeInput" id=8]
|
||||
output_port_for_preview = 0
|
||||
input_name = "color"
|
||||
|
||||
[sub_resource type="VisualShaderNodeColorConstant" id=9]
|
||||
output_port_for_preview = 0
|
||||
constant = Color( 0.650391, 0.192161, 0.0203247, 1 )
|
||||
|
||||
[sub_resource type="VisualShaderNodeScalarFunc" id=11]
|
||||
function = 18
|
||||
|
||||
[sub_resource type="VisualShader" id=12]
|
||||
code = "shader_type spatial;
|
||||
render_mode specular_disabled, unshaded;
|
||||
|
||||
|
@ -26,24 +55,54 @@ void vertex() {
|
|||
}
|
||||
|
||||
void fragment() {
|
||||
// Color:7
|
||||
vec3 n_out7p0 = vec3(0.650391, 0.192161, 0.020325);
|
||||
float n_out7p1 = 1.000000;
|
||||
|
||||
// Color:3
|
||||
vec3 n_out3p0 = vec3(1.000000, 0.937255, 0.215686);
|
||||
vec3 n_out3p0 = vec3(1.000000, 0.859069, 0.215686);
|
||||
float n_out3p1 = 1.000000;
|
||||
|
||||
// Scalar:14
|
||||
float n_out14p0 = 8.000000;
|
||||
|
||||
// VectorOp:13
|
||||
vec3 n_out13p0 = n_out3p0 * vec3(n_out14p0);
|
||||
|
||||
// Input:6
|
||||
vec3 n_out6p0 = COLOR.rgb;
|
||||
|
||||
// ScalarOp:10
|
||||
float n_in10p1 = 1.30000;
|
||||
float n_out10p0 = dot(n_out6p0, vec3(0.333333, 0.333333, 0.333333)) * n_in10p1;
|
||||
|
||||
// ScalarFunc:9
|
||||
float n_out9p0 = min(max(n_out10p0, 0.0), 1.0);
|
||||
|
||||
// VectorScalarMix:15
|
||||
vec3 n_out15p0 = mix(n_out7p0, n_out13p0, n_out9p0);
|
||||
|
||||
// Scalar:5
|
||||
float n_out5p0 = 2.000000;
|
||||
|
||||
// VectorOp:4
|
||||
vec3 n_out4p0 = n_out3p0 * vec3(n_out5p0);
|
||||
vec3 n_out4p0 = n_out15p0 * vec3(n_out5p0);
|
||||
|
||||
// Fresnel:2
|
||||
bool n_in2p2 = true;
|
||||
float n_in2p3 = 3.00000;
|
||||
float n_in2p3 = 0.50000;
|
||||
float n_out2p0 = n_in2p2 ? (pow(clamp(dot(NORMAL, VIEW), 0.0, 1.0), n_in2p3)) : (pow(1.0 - clamp(dot(NORMAL, VIEW), 0.0, 1.0), n_in2p3));
|
||||
|
||||
// ScalarOp:12
|
||||
float n_in12p1 = 0.50000;
|
||||
float n_out12p0 = n_out2p0 * n_in12p1;
|
||||
|
||||
// ScalarOp:11
|
||||
float n_out11p0 = n_out12p0 + dot(n_out6p0, vec3(0.333333, 0.333333, 0.333333));
|
||||
|
||||
// Output:0
|
||||
ALBEDO = n_out4p0;
|
||||
ALPHA = n_out2p0;
|
||||
ALPHA = n_out11p0;
|
||||
|
||||
}
|
||||
|
||||
|
@ -52,19 +111,37 @@ void light() {
|
|||
|
||||
}
|
||||
"
|
||||
graph_offset = Vector2( -509, -65.75 )
|
||||
graph_offset = Vector2( -221, -337.75 )
|
||||
modes/specular = 4
|
||||
flags/unshaded = true
|
||||
nodes/fragment/0/position = Vector2( 760, 120 )
|
||||
nodes/fragment/2/node = SubResource( 1 )
|
||||
nodes/fragment/2/position = Vector2( -380, 80 )
|
||||
nodes/fragment/3/node = SubResource( 2 )
|
||||
nodes/fragment/3/position = Vector2( -120, 260 )
|
||||
nodes/fragment/4/node = SubResource( 3 )
|
||||
nodes/fragment/4/position = Vector2( 280, 60 )
|
||||
nodes/fragment/5/node = SubResource( 4 )
|
||||
nodes/fragment/5/position = Vector2( 200, 380 )
|
||||
nodes/fragment/connections = PoolIntArray( 3, 0, 4, 0, 4, 0, 0, 0, 5, 0, 4, 1, 2, 0, 0, 1 )
|
||||
nodes/fragment/0/position = Vector2( 560, -300 )
|
||||
nodes/fragment/2/node = SubResource( 4 )
|
||||
nodes/fragment/2/position = Vector2( -640, -540 )
|
||||
nodes/fragment/3/node = SubResource( 5 )
|
||||
nodes/fragment/3/position = Vector2( -680, 260 )
|
||||
nodes/fragment/4/node = SubResource( 6 )
|
||||
nodes/fragment/4/position = Vector2( 260, 60 )
|
||||
nodes/fragment/5/node = SubResource( 7 )
|
||||
nodes/fragment/5/position = Vector2( 40, 260 )
|
||||
nodes/fragment/6/node = SubResource( 8 )
|
||||
nodes/fragment/6/position = Vector2( -640, -220 )
|
||||
nodes/fragment/7/node = SubResource( 9 )
|
||||
nodes/fragment/7/position = Vector2( -400, 40 )
|
||||
nodes/fragment/9/node = SubResource( 11 )
|
||||
nodes/fragment/9/position = Vector2( -80, -180 )
|
||||
nodes/fragment/10/node = SubResource( 1 )
|
||||
nodes/fragment/10/position = Vector2( -400, -160 )
|
||||
nodes/fragment/11/node = SubResource( 2 )
|
||||
nodes/fragment/11/position = Vector2( 100, -340 )
|
||||
nodes/fragment/12/node = SubResource( 3 )
|
||||
nodes/fragment/12/position = Vector2( -260, -520 )
|
||||
nodes/fragment/13/node = SubResource( 13 )
|
||||
nodes/fragment/13/position = Vector2( -380, 300 )
|
||||
nodes/fragment/14/node = SubResource( 14 )
|
||||
nodes/fragment/14/position = Vector2( -520, 460 )
|
||||
nodes/fragment/15/node = SubResource( 15 )
|
||||
nodes/fragment/15/position = Vector2( 40, 60 )
|
||||
nodes/fragment/connections = PoolIntArray( 5, 0, 4, 1, 6, 0, 10, 0, 10, 0, 9, 0, 6, 0, 11, 1, 2, 0, 12, 0, 12, 0, 11, 0, 11, 0, 0, 1, 4, 0, 0, 0, 3, 0, 13, 0, 14, 0, 13, 1, 7, 0, 15, 0, 13, 0, 15, 1, 9, 0, 15, 2, 15, 0, 4, 0 )
|
||||
|
||||
[resource]
|
||||
shader = SubResource( 5 )
|
||||
shader = SubResource( 12 )
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -27,7 +27,7 @@ meshes/lightmap_texel_size=0.1
|
|||
skins/use_named_skins=true
|
||||
external_files/store_in_subdir=false
|
||||
animation/import=true
|
||||
animation/fps=15
|
||||
animation/fps=30.0
|
||||
animation/filter_script=""
|
||||
animation/storage=false
|
||||
animation/keep_custom_tracks=false
|
||||
|
|
|
@ -48,13 +48,8 @@ size = Vector2( 0.3, 0.3 )
|
|||
[node name="Weapon" type="Spatial"]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="Handgun" parent="." instance=ExtResource( 1 )]
|
||||
|
||||
[node name="Muzzle" parent="Handgun" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3684, 0, 0 )
|
||||
|
||||
[node name="MuzzleFlash" type="Particles" parent="Handgun/Muzzle" index="0"]
|
||||
transform = Transform( -4.37113e-08, 0, 0.999999, 0, 0.999999, 0, -1, 0, -4.37114e-08, 0.0630998, 0.124057, 0 )
|
||||
[node name="MuzzleFlash" type="Particles" parent="."]
|
||||
transform = Transform( -4.37113e-08, 0, 0.999999, 0, 0.999999, 0, -1, 0, -4.37114e-08, -0.3053, 0.124057, 0 )
|
||||
cast_shadow = 0
|
||||
emitting = false
|
||||
amount = 16
|
||||
|
@ -65,6 +60,11 @@ visibility_aabb = AABB( -0.176241, -0.185755, -0.556571, 0.352482, 0.37151, 0.65
|
|||
process_material = SubResource( 5 )
|
||||
draw_pass_1 = SubResource( 7 )
|
||||
|
||||
[node name="Handgun" parent="." instance=ExtResource( 1 )]
|
||||
|
||||
[node name="Muzzle" parent="Handgun" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.331868, 0.125291, 0 )
|
||||
|
||||
[node name="Ejector" parent="Handgun" index="1"]
|
||||
transform = Transform( -1.62921e-07, -1, 0, 1, -1.62921e-07, 0, 0, 0, 1, -0.0373496, 0.126382, -0.00737098 )
|
||||
|
||||
|
|
|
@ -5,6 +5,12 @@ export(int) var Damage = 100
|
|||
|
||||
onready var camera = get_parent().get_parent()
|
||||
|
||||
onready var player = get_parent().get_parent().get_parent()
|
||||
|
||||
onready var ejector = find_node("Ejector")
|
||||
|
||||
onready var sound_shoot = $SoundShoot
|
||||
|
||||
var casing = preload("res://Assets/Weapons/Handgun/Casing.tscn")
|
||||
var tracer = preload("res://Assets/Effects/BulletTracer.tscn")
|
||||
|
||||
|
@ -15,7 +21,7 @@ var tracer = preload("res://Assets/Effects/BulletTracer.tscn")
|
|||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
sound_shoot.global_transform = camera.get_global_transform()
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
|
@ -25,36 +31,36 @@ func _ready():
|
|||
remote func shoot():
|
||||
|
||||
#print ("Camera location: ", camera.global_transform.origin)
|
||||
|
||||
var casing_instance = casing.instance()
|
||||
casing_instance.global_transform = find_node("Ejector").global_transform
|
||||
|
||||
casing_instance.rotate_y(deg2rad(90))
|
||||
casing_instance.angular_velocity = Vector3(rand_range(0, 40), 0, 0)
|
||||
casing_instance.linear_velocity = Vector3(rand_range(0, 1), 5, 0)
|
||||
|
||||
get_tree().root.call_deferred("add_child", casing_instance)
|
||||
|
||||
|
||||
var tracer_instance = tracer.instance()
|
||||
tracer_instance.hide()
|
||||
tracer_instance.global_transform = find_node("Muzzle").global_transform
|
||||
|
||||
get_tree().root.call_deferred("add_child", tracer_instance)
|
||||
|
||||
#tracer_instance.rotate_object_local(Vector3.AXIS_Y, PI/4)
|
||||
#tracer_instance.angular_velocity = Vector3(rand_range(0, 40), 0, 0)
|
||||
#tracer_instance.linear_velocity = Vector3(rand_range(0, 1), 5, 0)
|
||||
|
||||
|
||||
# TODO - fix casing rotation
|
||||
# TODO - apply initial linear and angular velocity
|
||||
|
||||
|
||||
tracer_instance.call_deferred("show")
|
||||
|
||||
$Handgun/AnimationPlayer.stop()
|
||||
$Handgun/AnimationPlayer.play("Shoot", -1, 2)
|
||||
|
||||
$SoundShoot.play()
|
||||
|
||||
$Handgun/Muzzle/MuzzleFlash.emitting = true
|
||||
yield(get_tree().create_timer(0.1),"timeout")
|
||||
$Handgun/Muzzle/MuzzleFlash.emitting = false
|
||||
$MuzzleFlash.emitting = true
|
||||
|
||||
yield(get_tree().create_timer(0.05),"timeout")
|
||||
|
||||
var casing_instance = casing.instance()
|
||||
casing_instance.global_transform = ejector.global_transform
|
||||
|
||||
casing_instance.rotate_object_local(Vector3.FORWARD, deg2rad(90))
|
||||
|
||||
casing_instance.angular_velocity = - ejector.global_transform.basis[2] * rand_range(23, 37)
|
||||
casing_instance.linear_velocity = ejector.global_transform.basis[0] * rand_range(3.2, 4.5) - ejector.global_transform.basis[2] * rand_range(2.6, 3.7)
|
||||
|
||||
|
||||
get_tree().root.call_deferred("add_child", casing_instance)
|
||||
|
||||
yield(get_tree().create_timer(0.05),"timeout")
|
||||
|
||||
$MuzzleFlash.emitting = false
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue