From 09e0b57387daa417950baeb4d1729c1dee94bce9 Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Mon, 22 Jul 2024 19:37:26 -0600 Subject: [PATCH] Added crosshair, jostling --- .../models/bipedal_mech/animations/walk.res | Bin 41394 -> 23319 bytes assets/models/bipedal_mech/mech.gd | 11 ++ assets/models/bipedal_mech/mech.tscn | 173 ++++++++++++------ assets/textures/crosshair.xcf | Bin 0 -> 1587 bytes assets/textures/crosshair_circle.png | 3 + assets/textures/crosshair_circle.png.import | 34 ++++ assets/textures/crosshair_dot.png | 3 + assets/textures/crosshair_dot.png.import | 34 ++++ src/crosshair.gd | 17 ++ src/main.tscn | 44 ++++- src/player/player.gd | 9 +- src/player/player.tscn | 2 + src/player/third_person_camera.gd | 21 ++- src/shaders/invert.gdshader | 9 + 14 files changed, 296 insertions(+), 64 deletions(-) create mode 100644 assets/models/bipedal_mech/mech.gd create mode 100644 assets/textures/crosshair.xcf create mode 100644 assets/textures/crosshair_circle.png create mode 100644 assets/textures/crosshair_circle.png.import create mode 100644 assets/textures/crosshair_dot.png create mode 100644 assets/textures/crosshair_dot.png.import create mode 100644 src/crosshair.gd create mode 100644 src/shaders/invert.gdshader diff --git a/assets/models/bipedal_mech/animations/walk.res b/assets/models/bipedal_mech/animations/walk.res index 46e127f1d46f211b0302b87023f194e90df02f76..9b3f7c3527069d10d9e3d20b171c393812be153c 100644 GIT binary patch literal 23319 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 BRVM%d literal 41394 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 void: + if (animation_tree["parameters/walk_space/blend_position"] as Vector2).length() > 0.1: + stomp.emit() diff --git a/assets/models/bipedal_mech/mech.tscn b/assets/models/bipedal_mech/mech.tscn index 23e97c5..50f261f 100644 --- a/assets/models/bipedal_mech/mech.tscn +++ b/assets/models/bipedal_mech/mech.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=29 format=3 uid="uid://dd7ebaau8a70n"] +[gd_scene load_steps=30 format=3 uid="uid://dd7ebaau8a70n"] [ext_resource type="PackedScene" uid="uid://fyy7y5h5iv1g" path="res://assets/models/bipedal_mech/scene.gltf" id="1_1xwab"] [ext_resource type="Animation" uid="uid://c0h2wkp2w2akg" path="res://assets/models/bipedal_mech/animations/cockpit_open.tres" id="2_puxwb"] +[ext_resource type="Script" path="res://assets/models/bipedal_mech/mech.gd" id="2_u6cpy"] [ext_resource type="Animation" uid="uid://biapp2lcuuswt" path="res://assets/models/bipedal_mech/animations/idle.tres" id="3_1ktyh"] [ext_resource type="Animation" uid="uid://tnhy6ie7iqlq" path="res://assets/models/bipedal_mech/animations/in_air.tres" id="4_hqfkt"] [ext_resource type="Animation" uid="uid://dub06dptmcmse" path="res://assets/models/bipedal_mech/animations/jump_start.tres" id="5_46rpa"] @@ -265,6 +266,23 @@ tracks/35/path = NodePath("Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/ tracks/35/interp = 1 tracks/35/loop_wrap = true tracks/35/keys = PackedFloat32Array(0, 1, -0.000385918, -1.27161e-14, 0.000401128, 1) +tracks/36/type = "method" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath(".") +tracks/36/interp = 1 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0.6667, 1.3333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_stomp" +}, { +"args": [], +"method": &"_stomp" +}] +} [sub_resource type="Animation" id="Animation_fgs48"] resource_name = "Armature|Walk" @@ -522,6 +540,23 @@ tracks/35/path = NodePath("Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/ tracks/35/interp = 1 tracks/35/loop_wrap = true tracks/35/keys = PackedFloat32Array(0, 1, -0.000385918, -1.27161e-14, 0.000401128, 1) +tracks/36/type = "method" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath(".") +tracks/36/interp = 1 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0.6667, 1.3333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_stomp" +}, { +"args": [], +"method": &"_stomp" +}] +} [sub_resource type="Animation" id="Animation_dmeqn"] resource_name = "Armature|Walk" @@ -779,6 +814,23 @@ tracks/35/path = NodePath("Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/ tracks/35/interp = 1 tracks/35/loop_wrap = true tracks/35/keys = PackedFloat32Array(0, 1, -0.000385918, -1.27161e-14, 0.000401128, 1) +tracks/36/type = "method" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath(".") +tracks/36/interp = 1 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0.6667, 1.3333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_stomp" +}, { +"args": [], +"method": &"_stomp" +}] +} [sub_resource type="AnimationLibrary" id="AnimationLibrary_pxfjg"] _data = { @@ -881,6 +933,7 @@ nodes/walk_space/position = Vector2(660, 260) node_connections = [&"air_scale", 0, &"air_anim", &"anim_state", 0, &"walk_scale", &"anim_state", 1, &"jump_state", &"jump_start_scale", 0, &"jump_start_anim", &"jump_state", 0, &"air_scale", &"jump_state", 1, &"landing_scale", &"landing_scale", 0, &"landing_anim", &"output", 0, &"anim_state", &"walk_scale", 0, &"walk_space"] [node name="Mech" instance=ExtResource("1_1xwab")] +script = ExtResource("2_u6cpy") [node name="AnimationPlayer" type="AnimationPlayer" parent="." index="0"] libraries = { @@ -903,43 +956,43 @@ parameters/walk_scale/scale = 1.0 parameters/walk_space/blend_position = Vector2(0, 0) [node name="Skeleton3D" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5" index="0"] -bones/1/position = Vector3(0, 0, 6.46634) +bones/1/position = Vector3(0, 0, 6.25956) bones/1/rotation = Quaternion(0.707107, 0, 0, 0.707107) bones/2/rotation = Quaternion(1.54543e-08, 1.54543e-08, -0.707107, 0.707107) -bones/3/rotation = Quaternion(0.655644, 0.674996, 0.235899, 0.242617) +bones/3/rotation = Quaternion(0.651302, 0.671041, 0.246924, 0.254043) bones/3/scale = Vector3(1, 1, 1) -bones/4/rotation = Quaternion(0.697912, 0.0564165, 0.0721084, 0.710307) +bones/4/rotation = Quaternion(0.732212, 0.0539352, 0.0758248, 0.67469) bones/4/scale = Vector3(1, 1, 1) -bones/5/rotation = Quaternion(-0.619592, -0.00143378, -0.101091, 0.778386) +bones/5/rotation = Quaternion(-0.648777, -0.00101797, -0.105351, 0.75365) bones/5/scale = Vector3(1, 1, 1) -bones/6/rotation = Quaternion(-0.435852, 0.0113441, -0.0629058, 0.897746) -bones/7/rotation = Quaternion(-0.839766, 0.0367104, -0.173618, 0.513129) +bones/6/rotation = Quaternion(-0.430424, 0.0118608, -0.0624292, 0.900387) +bones/7/rotation = Quaternion(-0.848977, 0.0351785, -0.176063, 0.496994) bones/7/scale = Vector3(1, 1, 1) bones/9/rotation = Quaternion(-0.577893, -0.0977404, -0.0868737, 0.805568) -bones/11/rotation = Quaternion(-0.836155, 0.0433616, -0.169046, 0.519989) +bones/11/rotation = Quaternion(-0.845569, 0.0417023, -0.171629, 0.503803) bones/11/scale = Vector3(1, 1, 1) bones/13/rotation = Quaternion(-0.583833, -0.0928994, -0.0936977, 0.80108) bones/13/scale = Vector3(1, 1, 1) bones/15/rotation = Quaternion(0.993231, -0.0067672, 0.0811647, 0.0828119) bones/15/scale = Vector3(1, 1, 1) -bones/17/rotation = Quaternion(0.751851, 0.0092213, 0.659186, 0.0104638) +bones/17/rotation = Quaternion(0.751422, 0.0195417, 0.659084, 0.0243246) bones/17/scale = Vector3(1, 1, 1) bones/19/rotation = Quaternion(-0.399104, -0.525183, -0.304683, 0.687072) bones/19/scale = Vector3(0.999999, 1, 1) bones/21/rotation = Quaternion(0.855906, -0.0322478, 0.0593455, 0.512701) -bones/23/rotation = Quaternion(0.901909, 0.00359093, 0.148827, 0.405459) +bones/23/rotation = Quaternion(0.873777, 0.00316782, 0.144331, 0.464406) bones/23/scale = Vector3(1, 1, 1) bones/25/rotation = Quaternion(-0.715396, -0.0713077, -0.0634678, 0.692168) bones/25/scale = Vector3(1, 1, 1) -bones/27/rotation = Quaternion(-0.550906, -0.00577628, -0.102558, 0.828222) +bones/27/rotation = Quaternion(-0.592901, -0.00509832, -0.108508, 0.797915) bones/29/rotation = Quaternion(0.808854, -0.0303334, 0.0651724, 0.583599) bones/31/rotation = Quaternion(0.808854, -0.0303334, 0.0651724, 0.583599) -bones/33/rotation = Quaternion(-0.54302, -0.00992266, -0.107616, 0.832736) -bones/35/rotation = Quaternion(-0.63019, 0.00362485, -0.102471, 0.769641) +bones/33/rotation = Quaternion(-0.58542, -0.00915627, -0.113493, 0.802695) +bones/35/rotation = Quaternion(-0.672817, 0.00415657, -0.108967, 0.731728) bones/35/scale = Vector3(1, 1, 1) bones/37/scale = Vector3(1, 1, 1) bones/39/scale = Vector3(1, 1, 1) -bones/41/rotation = Quaternion(-0.0147659, 0.935676, 0.352345, 0.0120526) +bones/41/rotation = Quaternion(-0.0150352, 0.940883, 0.33818, 0.0121114) bones/41/scale = Vector3(1, 1, 1) bones/43/rotation = Quaternion(-0.015884, 0.718179, -0.69565, -0.00621676) bones/43/scale = Vector3(1, 1, 1) @@ -962,37 +1015,37 @@ bones/66/rotation = Quaternion(-0.000385918, -2.26638e-14, 0.000401128, 1) bones/68/rotation = Quaternion(-0.706834, 0.000283644, -0.000283644, 0.70738) bones/70/rotation = Quaternion(-0.707107, 4.67924e-24, 4.67924e-24, 0.707107) bones/73/rotation = Quaternion(1.54543e-08, -1.54543e-08, 0.707107, 0.707107) -bones/74/rotation = Quaternion(-0.655644, 0.674996, 0.235899, -0.242617) +bones/74/rotation = Quaternion(-0.651302, 0.671041, 0.246924, -0.254043) bones/74/scale = Vector3(1, 1, 1) -bones/75/rotation = Quaternion(0.697912, -0.0564165, -0.0721084, 0.710307) +bones/75/rotation = Quaternion(0.732212, -0.0539352, -0.0758248, 0.67469) bones/75/scale = Vector3(1, 1, 1) -bones/76/rotation = Quaternion(-0.619592, 0.00143378, 0.101091, 0.778386) +bones/76/rotation = Quaternion(-0.648777, 0.00101796, 0.105351, 0.75365) bones/76/scale = Vector3(1, 1, 1) -bones/77/rotation = Quaternion(-0.435852, -0.0113441, 0.0629058, 0.897746) +bones/77/rotation = Quaternion(-0.430424, -0.0118608, 0.0624292, 0.900387) bones/77/scale = Vector3(1, 1, 1) -bones/78/rotation = Quaternion(-0.839766, -0.0367104, 0.173618, 0.513129) +bones/78/rotation = Quaternion(-0.848976, -0.0351782, 0.176064, 0.496994) bones/78/scale = Vector3(1, 1, 1) -bones/82/rotation = Quaternion(-0.836155, -0.0433616, 0.169046, 0.519989) +bones/82/rotation = Quaternion(-0.845569, -0.0417017, 0.171629, 0.503803) bones/82/scale = Vector3(1, 1, 1) bones/84/rotation = Quaternion(-0.583833, 0.0928994, 0.0936978, 0.80108) bones/86/rotation = Quaternion(0.993231, 0.0067672, -0.0811647, 0.0828119) bones/86/scale = Vector3(1, 1, 1) -bones/88/rotation = Quaternion(0.751851, -0.00922088, -0.659186, 0.0104641) +bones/88/rotation = Quaternion(0.751422, -0.019542, -0.659084, 0.0243245) bones/92/rotation = Quaternion(0.855906, 0.0322478, -0.0593455, 0.512701) bones/92/scale = Vector3(1, 1, 1) -bones/94/rotation = Quaternion(0.901909, -0.00359092, -0.148827, 0.405459) +bones/94/rotation = Quaternion(0.873777, -0.00316781, -0.144331, 0.464406) bones/94/scale = Vector3(1, 1, 1) bones/96/rotation = Quaternion(-0.715396, 0.0713076, 0.0634679, 0.692168) -bones/98/rotation = Quaternion(-0.550907, 0.00581827, 0.102585, 0.828217) +bones/98/rotation = Quaternion(-0.592901, 0.00509827, 0.108508, 0.797915) bones/100/rotation = Quaternion(0.808854, 0.0303333, -0.0651724, 0.583599) -bones/102/rotation = Quaternion(-0.543022, 0.00996488, 0.107644, 0.832731) +bones/102/rotation = Quaternion(-0.585419, 0.00915622, 0.113493, 0.802695) bones/102/scale = Vector3(1, 1, 1) bones/104/rotation = Quaternion(0.803479, 0.0249214, -0.0691385, 0.590779) -bones/106/rotation = Quaternion(-0.630191, -0.0035789, 0.102508, 0.769636) +bones/106/rotation = Quaternion(-0.672818, -0.00415663, 0.108966, 0.731728) bones/106/scale = Vector3(1, 1, 1) bones/108/scale = Vector3(1, 1, 1) bones/110/rotation = Quaternion(0.346017, 0.0755612, -0.0156624, 0.935049) -bones/112/rotation = Quaternion(0.0147659, 0.935676, 0.352345, -0.0120526) +bones/112/rotation = Quaternion(0.0150356, 0.940889, 0.338166, -0.0121113) bones/112/scale = Vector3(1, 1, 1) bones/114/rotation = Quaternion(0.015884, 0.718179, -0.69565, 0.00621692) bones/114/scale = Vector3(1, 1, 1) @@ -1008,106 +1061,106 @@ bones/126/rotation = Quaternion(0.993232, 0.00676712, -0.0811637, -0.0828125) bones/126/scale = Vector3(1, 1, 0.999988) [node name="Plane_009_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="0"] -transform = Transform3D(1, 0.000208825, -9.89214e-05, -0.000208631, 0.999999, 0.00177997, 9.9279e-05, -0.00177994, 0.999999, 0.000188351, -0.0058189, 0.000330746) +transform = Transform3D(0.999996, 0.000676498, 0.00286262, -0.000787154, 0.999246, 0.0388463, -0.00283416, -0.0388485, 0.999241, -0.0120866, -0.0283278, 0.0486985) [node name="Plane_012_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="1"] -transform = Transform3D(1, 0.000248894, -9.12547e-05, -0.00024876, 0.999998, 0.00178394, 9.16794e-05, -0.00178388, 0.999998, 0.000142336, -0.00573653, 0.00037545) +transform = Transform3D(0.999995, 0.00103264, 0.00309617, -0.00115313, 0.999232, 0.0391765, -0.0030533, -0.0391798, 0.999228, -0.0126374, -0.0282995, 0.048681) [node name="Cube_016_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="2"] -transform = Transform3D(1, 0.000167727, -7.08997e-05, -0.000167694, 1, 0.000539586, 7.09593e-05, -0.000539556, 1, 0.00020504, -0.00492105, -0.000811636) +transform = Transform3D(0.999999, -0.00030021, 0.00139831, 0.000300173, 1, 5.5626e-05, -0.00139827, -5.52088e-05, 0.999999, -0.00989199, -0.000311255, 0.00423729) [node name="Plane_004_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="3"] -transform = Transform3D(0.999996, -0.000558928, -0.00231916, 0.00056316, 0.999998, 0.00187401, 0.00231816, -0.00187538, 0.999996, 0.00346661, -0.00841075, -0.00784802) +transform = Transform3D(0.999997, -0.000482321, 0.00210897, 0.000380501, 0.998848, 0.047992, -0.00212961, -0.0479912, 0.998846, -0.00965333, -0.0524758, 0.0145226) [node name="Cube_013_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="4"] -transform = Transform3D(1, 0.000168607, -2.90573e-05, -0.000168562, 1, 0.00117546, 2.92584e-05, -0.00117546, 0.999999, 0.000189543, -0.00516421, -0.000810146) +transform = Transform3D(0.999997, -0.000310071, 0.00258977, 0.00027696, 0.999919, 0.0127915, -0.00259348, -0.0127908, 0.999915, -0.0103452, -0.00516152, 0.0054419) [node name="Plane_011_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="5"] -transform = Transform3D(1, 0.000105456, -0.00012063, -0.000105172, 0.999997, 0.00250045, 0.000120838, -0.00250048, 0.999997, 0.000742435, -0.0146177, -0.00125694) +transform = Transform3D(0.999998, -0.00153418, -0.00110752, 0.00160588, 0.997687, 0.0679595, 0.00100075, -0.0679611, 0.997688, 0.00845337, -0.405975, -0.010396) [node name="Plane_002_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="6"] -transform = Transform3D(1, 0.000279397, 4.01326e-05, -0.000279471, 0.999998, 0.00182441, -3.96147e-05, -0.00182456, 0.999998, -0.000150442, -0.00521135, 0.0010736) +transform = Transform3D(0.999995, 0.0010758, 0.00287483, -0.00119193, 0.999171, 0.0407078, -0.0028286, -0.0407111, 0.999167, -0.0132585, -0.0166031, 0.0820234) [node name="Plane_013_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="7"] -transform = Transform3D(1, 0.000279397, 4.01326e-05, -0.000279471, 0.999998, 0.00182441, -3.96147e-05, -0.00182456, 0.999998, -0.000150442, -0.00521135, 0.0010736) +transform = Transform3D(0.999995, 0.0010758, 0.00287483, -0.00119193, 0.999171, 0.0407078, -0.0028286, -0.0407111, 0.999167, -0.0132585, -0.0166031, 0.0820234) [node name="Cube_007_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="8"] -transform = Transform3D(1, 0.000249378, 4.70653e-05, -0.000249475, 0.999998, 0.002004, -4.65661e-05, -0.002004, 0.999998, -4.72069e-05, -0.00600904, -0.000368595) +transform = Transform3D(0.999997, -0.000486307, 0.00222186, 0.000371352, 0.998675, 0.0514536, -0.00224388, -0.0514526, 0.998673, -0.00980353, -0.0560383, 0.0175886) [node name="Plane_015_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="9"] -transform = Transform3D(1, 0.000131764, 1.88351e-05, -0.000131741, 1, -0.000544041, -1.89021e-05, 0.000543863, 1, 0.000100613, -0.000808299, -0.00234747) +transform = Transform3D(0.999994, -0.000135668, 0.00343373, 0.000361606, 0.997828, -0.0658715, -0.00341727, 0.0658723, 0.997822, -0.0127041, 0.201238, -0.0637798) [node name="Cube_010_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="10"] -transform = Transform3D(1, 1.79391e-05, -2.70499e-05, -1.78665e-05, 0.999997, 0.00247942, 2.71081e-05, -0.00247944, 0.999997, 0.000164509, -0.0151605, -0.00416899) +transform = Transform3D(1, -8.38228e-05, -0.000872246, 0.000141652, 0.997789, 0.066468, 0.000864799, -0.0664681, 0.997788, 0.00560045, -0.399766, -0.158443) [node name="Cube_012_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="11"] -transform = Transform3D(1, 5.62271e-06, -2.91198e-05, -5.57129e-06, 0.999999, 0.00162446, 2.91389e-05, -0.00162441, 0.999999, 0.000183344, -0.0104586, -0.00458622) +transform = Transform3D(1, -0.000322304, -0.000670722, 0.000345937, 0.999371, 0.0354678, 0.000658918, -0.035468, 0.999371, 0.00459433, -0.229222, -0.181004) [node name="Cylinder_002_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="12"] -transform = Transform3D(1, -1.77636e-15, 0, -1.77636e-15, 1, -4.37113e-08, 0, 4.37113e-08, 1, 0, 0, -0.0058589) +transform = Transform3D(1, -1.77636e-15, 0, -1.77636e-15, 1, -4.37113e-08, 0, 4.37113e-08, 1, 0, 0, -0.212643) [node name="Cube_006_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="13"] -transform = Transform3D(1, 7.18785e-10, -2.03527e-08, -7.31035e-10, 1, -1.49128e-07, 2.02767e-08, 1.78756e-07, 1, -1.19209e-07, -1.43051e-06, -0.00585842) +transform = Transform3D(1, 7.18899e-10, -2.01781e-08, -7.60139e-10, 1, -1.49128e-07, 2.01603e-08, 1.78756e-07, 1, -1.19209e-07, -1.43051e-06, -0.212644) [node name="Cube_017_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="14"] -transform = Transform3D(1, 3.1531e-10, 2.16907e-08, -3.26025e-10, 1, -1.19326e-07, -2.17319e-08, 1.78814e-07, 1, 1.19209e-07, -1.90735e-06, -0.00586033) +transform = Transform3D(1, 3.15225e-10, 2.16325e-08, -3.11474e-10, 1, -1.19326e-07, -2.16737e-08, 1.78814e-07, 1, 1.19209e-07, -1.90735e-06, -0.212645) [node name="Cube_005_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="15"] -transform = Transform3D(1, -1.42109e-13, -3.41061e-13, 2.27374e-13, 1, -9.23872e-07, 3.97904e-13, 9.23872e-07, 1, -9.09153e-13, 4.52995e-06, -0.00586033) +transform = Transform3D(1, -1.7053e-13, -3.41061e-13, 2.84217e-13, 1, -9.23872e-07, 3.41061e-13, 9.23872e-07, 1, -9.09153e-13, 4.52995e-06, -0.212645) [node name="Cube_005_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D/Cube_005_Material_0" index="0"] surface_material_override/0 = ExtResource("8_dt6e4") [node name="Cube_005_Inside_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="16"] -transform = Transform3D(1, -1.42109e-13, -3.41061e-13, 2.27374e-13, 1, -9.23872e-07, 3.97904e-13, 9.23872e-07, 1, -9.09153e-13, 4.52995e-06, -0.00586033) +transform = Transform3D(1, -1.7053e-13, -3.41061e-13, 2.84217e-13, 1, -9.23872e-07, 3.41061e-13, 9.23872e-07, 1, -9.09153e-13, 4.52995e-06, -0.212645) [node name="Plane_003_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="17"] -transform = Transform3D(1, 1.0877e-10, -1.02383e-08, -1.10134e-10, 1, -2.82831e-07, 1.02508e-08, 2.82773e-07, 1, -2.38419e-07, 0, -0.00585938) +transform = Transform3D(1, 1.08827e-10, -1.00637e-08, -1.10077e-10, 1, -2.82656e-07, 1.00761e-08, 2.82598e-07, 1, -2.38419e-07, 0, -0.212643) [node name="Plane_016_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="18"] -transform = Transform3D(1, -1.0877e-10, 1.02383e-08, 1.10134e-10, 1, -2.82831e-07, -1.02508e-08, 2.82773e-07, 1, 2.38419e-07, 0, -0.00585938) +transform = Transform3D(1, -1.08827e-10, 1.00637e-08, 1.10077e-10, 1, -2.82656e-07, -1.00761e-08, 2.82598e-07, 1, 2.38419e-07, 0, -0.212643) [node name="Cube_008_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="19"] -transform = Transform3D(1, -2.64698e-23, 9.95068e-31, 2.64698e-23, 1, 0, -9.95068e-31, 0, 1, -1.90621e-29, 0, -0.0058589) +transform = Transform3D(1, -2.64698e-23, 9.95068e-31, 2.64698e-23, 1, 0, -9.95068e-31, 0, 1, -1.90621e-29, 0, -0.212643) [node name="Cube_008_Inside_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="20"] -transform = Transform3D(1, -2.64698e-23, 9.95068e-31, 2.64698e-23, 1, 0, -9.95068e-31, 0, 1, -1.90621e-29, 0, -0.0058589) +transform = Transform3D(1, -2.64698e-23, 9.95068e-31, 2.64698e-23, 1, 0, -9.95068e-31, 0, 1, -1.90621e-29, 0, -0.212643) [node name="Plane_006_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="21"] -transform = Transform3D(1, -0.000209004, 9.89735e-05, 0.00020878, 1, 0.00178105, -9.9346e-05, -0.00178099, 0.999999, -0.00018692, -0.00581878, 0.000331163) +transform = Transform3D(0.999996, -0.000676036, -0.00286453, 0.000786722, 0.999246, 0.0388484, 0.00283602, -0.0388503, 0.999241, 0.0120888, -0.02833, 0.0487061) [node name="Plane_008_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="22"] -transform = Transform3D(1, -0.000249088, 9.11504e-05, 0.000248939, 1, 0.00178403, -9.15751e-05, -0.00178391, 0.999999, -0.000141382, -0.00573641, 0.00037539) +transform = Transform3D(0.999995, -0.00103359, -0.00309755, 0.00115408, 0.999233, 0.0391774, 0.00305459, -0.0391807, 0.999228, 0.01264, -0.0282973, 0.0486844) [node name="Cube_004_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="23"] -transform = Transform3D(1, -0.000167731, 7.09146e-05, 0.000167692, 1, 0.000539586, -7.09742e-05, -0.000539526, 1, -0.000205517, -0.00492115, -0.000811875) +transform = Transform3D(0.999999, 0.000300003, -0.00139847, -0.000299988, 1, 5.64307e-05, 0.00139841, -5.58496e-05, 0.999999, 0.00989199, -0.000310972, 0.00423768) [node name="Plane_005_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="24"] -transform = Transform3D(0.999997, 0.000559106, 0.00232062, -0.000562951, 0.999998, 0.00187385, -0.00231987, -0.0018753, 0.999995, -0.00346375, -0.00841123, -0.00785065) +transform = Transform3D(0.999998, 0.000481904, -0.00210907, -0.000379503, 0.998848, 0.047992, 0.00212923, -0.0479911, 0.998846, 0.00965858, -0.0524739, 0.0145243) [node name="Cube_003_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="25"] -transform = Transform3D(1, -0.000168614, 2.90573e-05, 0.000168569, 0.999999, 0.00117546, -2.9251e-05, -0.00117546, 0.999999, -0.00019002, -0.00516403, -0.000810385) +transform = Transform3D(0.999997, 0.000310034, -0.00258979, -0.000276968, 0.999918, 0.0127916, 0.00259348, -0.0127907, 0.999915, 0.0103447, -0.00516117, 0.00544214) [node name="Plane_007_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="26"] -transform = Transform3D(1, -0.000105456, 0.00012036, 0.000105187, 0.999997, 0.00250039, -0.000120599, -0.00250048, 0.999997, -0.000739813, -0.0146175, -0.00125599) +transform = Transform3D(0.999998, 0.00153416, 0.00110728, -0.00160593, 0.997687, 0.0679595, -0.00100052, -0.0679611, 0.997688, -0.00845122, -0.405975, -0.0103951) [node name="Plane_014_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="27"] -transform = Transform3D(1, -0.000212938, 3.3699e-05, 0.000212878, 0.999998, 0.00183728, -3.40603e-05, -0.00183749, 0.999998, -9.60827e-05, -0.0054698, 0.000836134) +transform = Transform3D(0.999995, -0.00107604, -0.00287502, 0.00119212, 0.999171, 0.0407079, 0.00282877, -0.0407111, 0.999167, 0.0132596, -0.0166022, 0.0820253) [node name="Plane_010_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="28"] -transform = Transform3D(1, -0.00022693, 2.88337e-05, 0.00022684, 0.999999, 0.00184411, -2.92473e-05, -0.00184414, 0.999999, -6.84261e-05, -0.00551021, 0.00084281) +transform = Transform3D(0.999994, -0.00190684, -0.00299408, 0.00202805, 0.999156, 0.0410292, 0.00291327, -0.0410351, 0.999154, 0.0146291, -0.0163962, 0.0808012) [node name="Cube_014_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="29"] -transform = Transform3D(1, -0.000171416, 4.05163e-05, 0.000171341, 0.999998, 0.00201902, -4.08739e-05, -0.00201914, 0.999998, -0.000202179, -0.00628805, -0.000633478) +transform = Transform3D(0.999997, 0.000486463, -0.00222396, -0.000371471, 0.998675, 0.0514538, 0.00224598, -0.0514528, 0.998673, 0.00980759, -0.0560388, 0.0175948) [node name="Plane_001_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="30"] -transform = Transform3D(1, -0.000131771, -1.86861e-05, 0.000131756, 1, -0.00054419, 1.8768e-05, 0.000544071, 1, -0.000100851, -0.000807941, -0.00234795) +transform = Transform3D(0.999994, 0.000135668, -0.00343358, -0.000361614, 0.997828, -0.0658717, 0.00341713, 0.0658726, 0.997822, 0.0127041, 0.201239, -0.0637798) [node name="Cube_015_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="31"] -transform = Transform3D(1, -1.81627e-05, 2.68199e-05, 1.80881e-05, 0.999997, 0.00247942, -2.68787e-05, -0.00247945, 0.999997, -0.000163078, -0.0151599, -0.00416851) +transform = Transform3D(1, 8.30274e-05, 0.000871937, -0.000140907, 0.997787, 0.0664992, -0.000864538, -0.0664994, 0.997786, -0.00559831, -0.399936, -0.158416) [node name="Cube_001_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="32"] -transform = Transform3D(1, -5.63203e-06, 2.91384e-05, 5.58006e-06, 0.999999, 0.00162446, -2.91583e-05, -0.00162441, 0.999999, -0.000183821, -0.0104582, -0.00458622) +transform = Transform3D(1, 0.000322295, 0.000670741, -0.000345959, 0.999371, 0.0354678, -0.000658938, -0.0354679, 0.999371, -0.0045948, -0.229222, -0.181005) [node name="Cylinder_001_Material_0" parent="Sketchfab_model/bed584e06fe94e71a7ac484cee9f0a16_fbx/Object_2/RootNode/Armature/Object_5/Skeleton3D" index="33"] -transform = Transform3D(1, 1.77636e-15, 0, 1.77636e-15, 1, -4.37113e-08, 0, 4.37113e-08, 1, 0, 0, -0.0058589) +transform = Transform3D(1, 1.77636e-15, 0, 1.77636e-15, 1, -4.37113e-08, 0, 4.37113e-08, 1, 0, 0, -0.212643) diff --git a/assets/textures/crosshair.xcf b/assets/textures/crosshair.xcf new file mode 100644 index 0000000000000000000000000000000000000000..73e6ce55f9302dae63e91ca315904977ff37c69e GIT binary patch literal 1587 zcmds0O>fgc5FM{g8j`djB%z8*r7a&)dWe)rh%1L45C+#RIDuHw3-`yD?Hv!gRBVwgt{Y=lzo`nitVRze|dhe);P48+z`Qp~+?*N0T^9 z7PK+?(>O0K*OAWCb+R~ajhAtluG379OEt;j)486Ozu7U|r@wK}borzEB0rml$u`!{ zpW$?Q>tqj;^KDY-WE-xcoHx?tGLH&9WxT^HdOMgsJK|;4L49$IHLcgi8TZ00&GXef z$@C&E_oQrC1DcTrI3j;>g(qGDKs#^WwH!(wIsBo+TMpL_Z#%r>@Lh*@!C7z5V#oTJ z|Ec9r@`T(#pdUND{z!b-98p)!q22~HM18Du`K*1kf3EG2?paBel0N4k7EN}!U@Dad;9>_KRT$SQUnL~Jfg@VsBKWrq`cit=W hD4W+u1naOK>#{!kU_b1O{jtxE?YoN^I7juSeged$Gr9l( literal 0 HcmV?d00001 diff --git a/assets/textures/crosshair_circle.png b/assets/textures/crosshair_circle.png new file mode 100644 index 0000000..982f57e --- /dev/null +++ b/assets/textures/crosshair_circle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dbb4fe9cd2133bdb02df4518635660621ebbb41428ce44fdc41edf029663eee +size 689 diff --git a/assets/textures/crosshair_circle.png.import b/assets/textures/crosshair_circle.png.import new file mode 100644 index 0000000..67333e5 --- /dev/null +++ b/assets/textures/crosshair_circle.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bepxfquua1v6" +path="res://.godot/imported/crosshair_circle.png-2b866d6d4df17d3d24ef4b12db7ff9e0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/crosshair_circle.png" +dest_files=["res://.godot/imported/crosshair_circle.png-2b866d6d4df17d3d24ef4b12db7ff9e0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/crosshair_dot.png b/assets/textures/crosshair_dot.png new file mode 100644 index 0000000..fc14680 --- /dev/null +++ b/assets/textures/crosshair_dot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1931f7aae1aab329cf715517138724191dcbd45517406039a0bb675e20a25b9 +size 597 diff --git a/assets/textures/crosshair_dot.png.import b/assets/textures/crosshair_dot.png.import new file mode 100644 index 0000000..cb556ff --- /dev/null +++ b/assets/textures/crosshair_dot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hmt7s15m7eto" +path="res://.godot/imported/crosshair_dot.png-02030b5dd1738bacd56dd6f6a7f06789.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/crosshair_dot.png" +dest_files=["res://.godot/imported/crosshair_dot.png-02030b5dd1738bacd56dd6f6a7f06789.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/crosshair.gd b/src/crosshair.gd new file mode 100644 index 0000000..0acb1d9 --- /dev/null +++ b/src/crosshair.gd @@ -0,0 +1,17 @@ +class_name Crosshair +extends CenterContainer + +const CROSSHAIR_RETURN_SPEED = 30 + +@onready var crosshair_circle: TextureRect = $CrosshairContainer/CrosshairCircle +@onready var crosshair_dot: TextureRect = $CrosshairContainer/CrosshairDot + + +func jostle(delta: Vector2) -> void: + crosshair_circle.position += delta + + +func _process(delta: float) -> void: + crosshair_circle.position = crosshair_circle.position.lerp( + Vector2.ZERO, delta * CROSSHAIR_RETURN_SPEED + ) diff --git a/src/main.tscn b/src/main.tscn index 4bb8df4..fd422cb 100644 --- a/src/main.tscn +++ b/src/main.tscn @@ -1,7 +1,17 @@ -[gd_scene load_steps=4 format=3 uid="uid://d75odchj18u1"] +[gd_scene load_steps=10 format=3 uid="uid://d75odchj18u1"] +[ext_resource type="Script" path="res://src/crosshair.gd" id="1_8vuwf"] [ext_resource type="Shader" path="res://src/shaders/threshold.gdshader" id="1_bg1gg"] [ext_resource type="PackedScene" uid="uid://drbiyuustse8b" path="res://src/maps/arena_map/arena_map.tscn" id="1_bvhtq"] +[ext_resource type="Shader" path="res://src/shaders/invert.gdshader" id="1_rg2hr"] +[ext_resource type="Texture2D" uid="uid://bepxfquua1v6" path="res://assets/textures/crosshair_circle.png" id="3_1ycfj"] +[ext_resource type="Texture2D" uid="uid://hmt7s15m7eto" path="res://assets/textures/crosshair_dot.png" id="3_3u7nt"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ag8l2"] +shader = ExtResource("1_rg2hr") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_csvvm"] +shader = ExtResource("1_rg2hr") [sub_resource type="ShaderMaterial" id="ShaderMaterial_ubp15"] shader = ExtResource("1_bg1gg") @@ -11,10 +21,40 @@ shader_parameter/threshold = 0.506 shader_parameter/contrast = 1.0 shader_parameter/offset = 0.0 -[node name="Main" type="Node3D"] +[node name="Main" type="Control"] +custom_minimum_size = Vector2(1900, 768) +layout_mode = 3 +anchors_preset = 0 + +[node name="Crosshair" type="CenterContainer" parent="." groups=["CrosshairGroup"]] +z_index = 1 +layout_mode = 0 +offset_right = 1900.0 +offset_bottom = 768.0 +script = ExtResource("1_8vuwf") + +[node name="CrosshairContainer" type="Control" parent="Crosshair"] +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 + +[node name="CrosshairCircle" type="TextureRect" parent="Crosshair/CrosshairContainer"] +material = SubResource("ShaderMaterial_ag8l2") +layout_mode = 2 +offset_right = 32.0 +offset_bottom = 32.0 +texture = ExtResource("3_1ycfj") +stretch_mode = 2 + +[node name="CrosshairDot" type="TextureRect" parent="Crosshair/CrosshairContainer"] +material = SubResource("ShaderMaterial_csvvm") +layout_mode = 2 +offset_right = 32.0 +offset_bottom = 32.0 +texture = ExtResource("3_3u7nt") [node name="ViewportContainer" type="SubViewportContainer" parent="."] material = SubResource("ShaderMaterial_ubp15") +layout_mode = 0 offset_right = 1900.0 offset_bottom = 768.0 stretch = true diff --git a/src/player/player.gd b/src/player/player.gd index 03a43d3..577ef5e 100644 --- a/src/player/player.gd +++ b/src/player/player.gd @@ -11,10 +11,12 @@ const TURN_SENSITIVITY: float = 0.04 # Get the gravity from the project settings to be synced with RigidBody nodes. var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") -@onready var camera_root: Node3D = $CameraRoot +@onready var camera_root: ThirdPersonCamera = $CameraRoot @onready var mesh: Node3D = $Mesh @onready var animation_tree: AnimationTree = $Mesh/Mech/AnimationTree +@onready var _crosshair: Crosshair = get_tree().get_first_node_in_group("CrosshairGroup") + func _physics_process(delta: float) -> void: var delta_factor: float = delta * TARGET_FPS @@ -61,3 +63,8 @@ func _physics_process(delta: float) -> void: velocity.z = lerpf(velocity.z, 0.0, delta_factor * drag) move_and_slide() + + +func _on_mech_stomp() -> void: + _crosshair.jostle(Vector2(randf_range(-5, 5), randf_range(-15, 5))) + # camera_root.jostle(randf_range(-2, 2)) diff --git a/src/player/player.tscn b/src/player/player.tscn index 7241f8d..e9e65a1 100644 --- a/src/player/player.tscn +++ b/src/player/player.tscn @@ -30,3 +30,5 @@ spring_length = -1.5 [node name="Camera3D" type="Camera3D" parent="CameraRoot/SpringArm3D"] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, -1.5) current = true + +[connection signal="stomp" from="Mesh/Mech" to="." method="_on_mech_stomp"] diff --git a/src/player/third_person_camera.gd b/src/player/third_person_camera.gd index 2b0c904..c3c68dd 100644 --- a/src/player/third_person_camera.gd +++ b/src/player/third_person_camera.gd @@ -1,5 +1,8 @@ +class_name ThirdPersonCamera extends Node3D +const CROSSHAIR_MOUSE_JOSTLE: float = 0.6 +const CORRECTION_SPEED: float = 10 @export var yaw_sensitivity: float = 0.4 @export var yaw_acceleration: float = 20.0 @@ -12,15 +15,31 @@ extends Node3D @onready var _target: Vector2 = Vector2(global_rotation_degrees.x, rotation_degrees.y) +@onready var _crosshair: Crosshair = get_tree().get_first_node_in_group("CrosshairGroup") + + func _ready() -> void: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + +func jostle(delta: float) -> void: + rotation_degrees.z += delta + + func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseMotion: var motion: Vector2 = (event as InputEventMouseMotion).relative _target.y = _target.y - motion.x * yaw_sensitivity - _target.x = clampf(_target.x + motion.y * pitch_sensitivity * (-1 if invert_pitch else 1), pitch_min, pitch_max) + _target.x = clampf( + _target.x + motion.y * pitch_sensitivity * (-1 if invert_pitch else 1), + pitch_min, + pitch_max + ) + _crosshair.jostle(motion * CROSSHAIR_MOUSE_JOSTLE) + func _physics_process(delta: float) -> void: rotation_degrees.y = lerpf(rotation_degrees.y, _target.y, delta * yaw_acceleration) rotation_degrees.x = lerpf(rotation_degrees.x, _target.x, delta * pitch_acceleration) + + rotation_degrees.z = lerpf(rotation_degrees.z, 0.0, delta * CORRECTION_SPEED) diff --git a/src/shaders/invert.gdshader b/src/shaders/invert.gdshader new file mode 100644 index 0000000..dd21425 --- /dev/null +++ b/src/shaders/invert.gdshader @@ -0,0 +1,9 @@ +shader_type canvas_item; + +uniform sampler2D screen_texture: hint_screen_texture; + +void fragment() { + vec4 color = vec4(texture(screen_texture, SCREEN_UV).rgb, texture(TEXTURE, UV).a); + + COLOR = vec4(1.0 - color.rgb, color.a); +} \ No newline at end of file