From 24914cb6fae3b6afc7b05d1c88c50c0d7e3e2bdb Mon Sep 17 00:00:00 2001
From: Nikolai Rodionov <allanger@badhouseplants.net>
Date: Sun, 26 Jan 2025 20:20:15 +0100
Subject: [PATCH] WIP: Spawn bullets on the server and sync them

---
 project.godot                             | 1 +
 scenes/characters/blue/dummy.gd           | 5 +++--
 scenes/characters/blue/dummy.tscn         | 2 +-
 scenes/characters/blue/head_collision.gd  | 2 +-
 scenes/characters/placeholder.tscn        | 5 ++++-
 scenes/maps/el_test.gd                    | 2 +-
 scenes/weapon/bullet.gd                   | 5 +++++
 scripts/player/player_input_controller.gd | 2 +-
 8 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/project.godot b/project.godot
index 4a33c0e..5ec4179 100644
--- a/project.godot
+++ b/project.godot
@@ -36,6 +36,7 @@ import/blender/enabled=false
 
 body=""
 target=""
+player_placeholder=""
 
 [input]
 
diff --git a/scenes/characters/blue/dummy.gd b/scenes/characters/blue/dummy.gd
index 304b3d7..0bff5c0 100644
--- a/scenes/characters/blue/dummy.gd
+++ b/scenes/characters/blue/dummy.gd
@@ -16,10 +16,11 @@ func _process(delta: float) -> void:
 
 func _on_head_collision_body_part_hit(dam: Variant) -> void:
 	print("head is hit" + str(dam))
-	#owner_placeholder.take_damage(dam)
+	print(owner_placeholder)
+	owner_placeholder.take_damage(dam)
 	pass # Replace with function body.
 
 func _get_owner() -> CharacterBody3D:
-	var owner_placeholder := find_parent("CharacterPlaceholder")
+	var owner_placeholder := find_parent("PlayerPlaceholder*")
 	return owner_placeholder
 	
diff --git a/scenes/characters/blue/dummy.tscn b/scenes/characters/blue/dummy.tscn
index aa01e88..264f01e 100644
--- a/scenes/characters/blue/dummy.tscn
+++ b/scenes/characters/blue/dummy.tscn
@@ -1344,7 +1344,7 @@ surface_material_override/0 = SubResource("StandardMaterial3D_j3emx")
 [node name="HitCollisions" type="Node3D" parent="Body/Armature/Skeleton3D"]
 
 [node name="BoneAttachment3D" type="BoneAttachment3D" parent="Body/Armature/Skeleton3D"]
-transform = Transform3D(0.978017, -0.176546, -0.110973, 0.15839, 0.282801, 0.946011, -0.135631, -0.942791, 0.304547, -11.8203, 17.7472, -135.936)
+transform = Transform3D(0.978017, -0.176546, -0.110972, 0.15839, 0.282801, 0.94601, -0.135631, -0.942791, 0.304547, -11.8203, 17.7472, -135.936)
 bone_name = "mixamorig_Head"
 bone_idx = 5
 
diff --git a/scenes/characters/blue/head_collision.gd b/scenes/characters/blue/head_collision.gd
index 84611b4..72de7af 100644
--- a/scenes/characters/blue/head_collision.gd
+++ b/scenes/characters/blue/head_collision.gd
@@ -1,6 +1,6 @@
 extends Area3D
 
-@export var damage: int = 100
+@export var damage: int = 20
 
 signal body_part_hit(dam)
 # Called when the node enters the scene tree for the first time.
diff --git a/scenes/characters/placeholder.tscn b/scenes/characters/placeholder.tscn
index 2f5314e..bcf712f 100644
--- a/scenes/characters/placeholder.tscn
+++ b/scenes/characters/placeholder.tscn
@@ -14,6 +14,9 @@ properties/0/replication_mode = 1
 properties/1/path = NodePath(".:rotation")
 properties/1/spawn = true
 properties/1/replication_mode = 1
+properties/2/path = NodePath(".:health")
+properties/2/spawn = true
+properties/2/replication_mode = 1
 
 [sub_resource type="Animation" id="Animation_falg4"]
 length = 0.001
@@ -149,7 +152,7 @@ grow_vertical = 0
 text = "100"
 label_settings = SubResource("LabelSettings_toaij")
 
-[node name="FPS" type="Label" parent="FirstPersonCameraMount/HUD"]
+[node name="FPS" type="Label" parent="FirstPersonCameraMount/HUD" groups=["player_placeholder"]]
 layout_mode = 1
 offset_right = 40.0
 offset_bottom = 23.0
diff --git a/scenes/maps/el_test.gd b/scenes/maps/el_test.gd
index ccbc102..9366263 100644
--- a/scenes/maps/el_test.gd
+++ b/scenes/maps/el_test.gd
@@ -16,7 +16,7 @@ func _ready() -> void:
 	if multiplayer.is_server():
 		for i in GameServerManager.players:
 			char = ResourceLoader.load("res://scenes/characters/placeholder.tscn").instantiate()
-			char.name = str(GameServerManager.players[i].name)
+			char.name = "PlayerPlaceholder" + str(GameServerManager.players[i].name)
 			char.global_position = position
 			var my_random_number = RandomNumberGenerator.new().randf_range(0.0, 5.0)
 			char.global_position = position
diff --git a/scenes/weapon/bullet.gd b/scenes/weapon/bullet.gd
index e398fec..09691ab 100644
--- a/scenes/weapon/bullet.gd
+++ b/scenes/weapon/bullet.gd
@@ -22,6 +22,11 @@ func _process(delta):
 	#ray.collision_mask = 1
 	#ray.enabled = 1
 	if ray.is_colliding():
+		var collider = ray.get_collider()
+		if collider != null and collider.is_in_group("target"):
+			ray.get_collider().take_damage()
+		if collider != null and collider.is_in_group("body"):
+			ray.get_collider().hit()
 		print("I got hit")
 		rigid_body_3d.visible = false
 		particles.emitting = true
diff --git a/scripts/player/player_input_controller.gd b/scripts/player/player_input_controller.gd
index cc1ec4b..be3cabb 100644
--- a/scripts/player/player_input_controller.gd
+++ b/scripts/player/player_input_controller.gd
@@ -3,7 +3,7 @@
 # ---------------------------------------------------------------------
 class_name PlayerInput extends CharacterBody3D
 
-var health: int = 100
+@export var health: int = 100
 
 @export_category("PlayerInput")