From 8d12eff2141bb027c937691348fa92815f946a33 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Sat, 24 Aug 2024 18:32:24 +0200 Subject: [PATCH] shooting pens (locally) --- godot/Assets/Models/Weapons/pen_base.res | 3 +++ godot/Assets/Models/Weapons/pen_lid.res | 3 +++ godot/Scenes/Weapons/pen.tscn | 19 +++++++++++++++++++ godot/project.godot | 5 +++++ include/client/FirstPersonPlayer.h | 1 + src/client/FirstPersonPlayer.cpp | 22 ++++++++++++++++++++++ 6 files changed, 53 insertions(+) create mode 100644 godot/Assets/Models/Weapons/pen_base.res create mode 100644 godot/Assets/Models/Weapons/pen_lid.res create mode 100644 godot/Scenes/Weapons/pen.tscn diff --git a/godot/Assets/Models/Weapons/pen_base.res b/godot/Assets/Models/Weapons/pen_base.res new file mode 100644 index 0000000..dca2a49 --- /dev/null +++ b/godot/Assets/Models/Weapons/pen_base.res @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bd2197e0699397070ca3faadcb22dbd91cd647a88e75627f48727b7f6195eea +size 31918 diff --git a/godot/Assets/Models/Weapons/pen_lid.res b/godot/Assets/Models/Weapons/pen_lid.res new file mode 100644 index 0000000..661a0fc --- /dev/null +++ b/godot/Assets/Models/Weapons/pen_lid.res @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96dab3028bac68a12453293f89fa27d1898acd3f4f832b6c990ecc5abfd8f1a9 +size 126452 diff --git a/godot/Scenes/Weapons/pen.tscn b/godot/Scenes/Weapons/pen.tscn new file mode 100644 index 0000000..96b547c --- /dev/null +++ b/godot/Scenes/Weapons/pen.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=3 format=3 uid="uid://c475s3klxqoej"] + +[ext_resource type="ArrayMesh" path="res://Assets/Models/Weapons/pen_base.res" id="1_clcko"] +[ext_resource type="ArrayMesh" path="res://Assets/Models/Weapons/pen_lid.res" id="2_0u0nh"] + +[node name="Stylo" type="Node3D"] + +[node name="Armature" type="Node3D" parent="."] +transform = Transform3D(5, 0, 0, 0, 0.0178025, -4.99997, 0, 4.99997, 0.0178025, 0, 0, -0.0892955) + +[node name="pen_base" type="MeshInstance3D" parent="Armature"] +transform = Transform3D(0.140708, 0, 0, 0, -1.67737e-08, 0.140708, 0, -0.140708, -1.67737e-08, -1.12406e-11, 0.00945318, -3.65384e-09) +mesh = ExtResource("1_clcko") +skeleton = NodePath("") + +[node name="pen_lid" type="MeshInstance3D" parent="Armature/pen_base"] +transform = Transform3D(1.14449, 0, 0, 0, 1.14449, 0, 0, 0, 1.14449, 7.98797e-11, 5.07782e-10, -0.0671831) +mesh = ExtResource("2_0u0nh") +skeleton = NodePath("") diff --git a/godot/project.godot b/godot/project.godot index a64f2c6..28d79d0 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -57,3 +57,8 @@ escape={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) ] } +shoot={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} diff --git a/include/client/FirstPersonPlayer.h b/include/client/FirstPersonPlayer.h index 7c439db..2acbd41 100644 --- a/include/client/FirstPersonPlayer.h +++ b/include/client/FirstPersonPlayer.h @@ -28,6 +28,7 @@ class FirstPersonPlayer : public Player { void UpdateFOV(float delta); void UpdateCamera(const godot::InputEventMouseMotion&); void UpdatePosition(float delta); + void Shoot(); }; } // namespace blitz \ No newline at end of file diff --git a/src/client/FirstPersonPlayer.cpp b/src/client/FirstPersonPlayer.cpp index e31519a..a8d0464 100644 --- a/src/client/FirstPersonPlayer.cpp +++ b/src/client/FirstPersonPlayer.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include #include @@ -37,6 +39,8 @@ static constexpr float MAX_FOV_VELOCITY = SPRINT_SPEED * 2.0f; static const float LerpValue = 0.10; static const float AnimationBlend = 7.0; +static const char BulletScenePath[] = "res://Scenes/Weapons/pen.tscn"; + void FirstPersonPlayer::_bind_methods() {} FirstPersonPlayer::FirstPersonPlayer() : Player(), m_BobTime(0) {} @@ -102,6 +106,24 @@ void FirstPersonPlayer::_physics_process(float a_Delta) { m_Player->move_and_slide(); UpdateAnimation(a_Delta); + + Shoot(); +} + +void FirstPersonPlayer::Shoot() { + if (Input::get_singleton()->is_action_pressed("shoot")) { + Ref bulletScene = ResourceLoader::get_singleton()->load(BulletScenePath); + auto* bullet = Object::cast_to(bulletScene->instantiate()); + + bullet->set_position(m_Camera->get_global_position()); + + Transform3D rotation = bullet->get_transform(); + rotation.basis = m_Camera->get_global_transform().basis; + bullet->set_transform(rotation); + + Node* entities = get_node("../../Entities"); + entities->add_child(bullet); + } } void FirstPersonPlayer::UpdateBobbing(float a_Delta) {