Skip to content

Commit bd8491c

Browse files
committed
started implementing shoot bullet
1 parent 440fb64 commit bd8491c

File tree

8 files changed

+111
-38
lines changed

8 files changed

+111
-38
lines changed

client/assets/bullet/bullet.gd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var from_player : int
44
#var bullet_state : Array
55

66
func _ready():
7+
print("hello world from: " + str(name))
78
# $AudioStreamPlayer3d.play()
89
#func _physics_process(_delta):
910
# # if category bullet doesnt exist in global_state add it

client/assets/net/server_to_client.gd

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
extends Node
22

3+
@onready var b_res := preload("res://../assets/bullet/bullet.tscn")
34

45
@rpc("call_remote", "reliable")
56
func preconfig(info):
@@ -84,6 +85,12 @@ func send_output_to_client_unreliable(states_udp_json_string: String):
8485
rigid_cube.rotation = Vector3(str_to_var("Vector3" + states_udp["rigid_cube"][id]["rotation"]))
8586
if states_udp["rigid_cube"][id].has("position"):
8687
rigid_cube.position = Vector3(str_to_var("Vector3" + states_udp["rigid_cube"][id]["position"]))
88+
if states_udp.has("bullet"):
89+
for id in states_udp["bullet"]:
90+
var bullet = get_node("/root/main/bullets/").get_node(id)
91+
if bullet:
92+
if states_udp["bullet"][id].has("position"):
93+
bullet.position = Vector3(str_to_var("Vector3" + states_udp["bullet"][id]["position"]))
8794

8895

8996
@rpc("call_remote", "reliable")
@@ -94,3 +101,16 @@ func send_output_to_client_reliable(states_tcp_json_string: String):
94101
var player = get_node("/root/main/players/" + id + "/" + id)
95102
if states_tcp["player"][id].has("camera_arm_scale"):
96103
player.camera_arm.scale = Vector3(str_to_var("Vector3" + states_tcp["player"][id]["camera_arm_scale"]))
104+
105+
106+
@rpc("call_remote", "reliable")
107+
func spawn_bullet_on_client(data):
108+
# print("spawn bullet rpc received: todo")
109+
# print("from_player: " + str(data["from_player"]))
110+
# print("position: " + str(data["position"]))
111+
112+
var b := b_res.instantiate()
113+
b.name = data["name"]
114+
b.position = data["position"]
115+
b.from_player = data["from_player"]
116+
$"/root/main/bullets".add_child(b)

client/main.tscn

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010

1111
[node name="players" type="Node" parent="."]
1212

13+
[node name="maps" type="Node" parent="."]
14+
15+
[node name="bullets" type="Node" parent="."]
16+
1317
[node name="ui" type="CanvasLayer" parent="."]
1418

1519
[node name="launcher" parent="ui" instance=ExtResource("1_ixexp")]
@@ -18,8 +22,6 @@
1822

1923
[node name="loading" parent="ui" instance=ExtResource("3_d60gv")]
2024

21-
[node name="maps" type="Node" parent="."]
22-
2325
[node name="net" type="Node" parent="."]
2426
script = ExtResource("2_3nswm")
2527

server/assets/bullet/bullet.gd

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,56 @@
11
extends Area3D
22

33
var from_player : int
4+
var old_position: Vector3
45
#var bullet_state : Array
5-
var target : Vector3
66

77
var g : float = ProjectSettings.get_setting("physics/3d/default_gravity")
88
var velocity := Vector3.ZERO
99

10-
@onready var ray_dir : Vector3 = global_position.direction_to(target).normalized()
10+
@onready var player: CharacterBody3D = get_node("/root/main/players/" + str(from_player) + "/" + str(from_player))
11+
@onready var camera := player.get_node("SpringArm3D/Camera3D")
12+
@onready var ch_pos : Vector2 = player.get_node("crosshair").position + player.get_node("crosshair").size * 0.5
13+
@onready var ray_dir : Vector3 = camera.project_ray_normal(ch_pos)
1114
@export var bullet_velocity := 40
15+
#@onready var raycast: RayCast3D = player.get_node("shoot_from/RayCast3D")
16+
17+
var aim_direction
18+
19+
@export var distance_limit: float = 5.0
1220

1321
func _ready():
14-
print("hello world from: " + str(name))
15-
# var timer := Timer.new()
16-
# self.add_child(timer)
17-
# timer.connect("timeout", destroy)
18-
# timer.set_wait_time(3)
19-
# timer.start()
20-
21-
#func _physics_process(delta):
22-
# velocity.y += g * delta
23-
# velocity=ray_dir * bullet_velocity
24-
# global_transform.origin += velocity * delta
25-
26-
#Add bullet_state to global_state after physic calculations
27-
# bullet_state = [from_player, position]
28-
29-
#if bullet doesnt exist add it to global_state
30-
# if !get_node("/root/Main").global_state.has("bullet"):
31-
# get_node("/root/Main").global_state["bullet"] = {}
32-
33-
# add bullet_state to global_state
34-
# get_node("/root/Main").global_state["bullet"][name] = bullet_state
22+
var timer := Timer.new()
23+
self.add_child(timer)
24+
timer.connect("timeout", destroy)
25+
timer.set_wait_time(4)
26+
timer.start()
27+
28+
func _physics_process(delta):
29+
velocity.y += g * delta
30+
velocity= ray_dir * bullet_velocity
31+
global_transform.origin += velocity * delta
32+
33+
#UDP: add bullet_state_udp to states_udp
34+
var bullet_state_udp: Dictionary = {}
35+
if position.distance_to(old_position) >0.00001: # only add if changed enough
36+
old_position=position
37+
bullet_state_udp["position"] = position
38+
if !bullet_state_udp.is_empty(): # only add if not empty
39+
#if states_udp doesnt have player category add it to states_udp
40+
if !get_node("/root/main/net").states_udp.has("bullet"):
41+
get_node("/root/main/net").states_udp["bullet"] = {}
42+
# add player_state to states_udp
43+
get_node("/root/main/net").states_udp["bullet"][name] = bullet_state_udp
3544

3645
func _on_body_entered(body):
3746
print(str(name) + " collided with " + str(body.name))
3847
# if body is CharacterBody3D:
3948
# body.damage(10)
4049

41-
#TODO: Why doesnt it get deleted from global_state????????????
42-
# get_node("/root/Main/").global_state["bullet"].erase(name)
43-
# queue_free()
50+
queue_free()
4451

4552
func destroy():
4653
# get_node("/root/Main/").global_state["bullet"].erase(name)
4754
queue_free()
55+
56+
#TODO: free_bullet_on_client + server func in net.gd

server/assets/net/net.gd

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ var states_udp: Dictionary
2525
var cl_updaterate = float(20)
2626
var cl_updaterate_timer = 0.0
2727

28+
@onready var b_res := preload("res://../assets/bullet/bullet.tscn")
29+
2830
func _ready():
2931
#set server tickrate -> relevant for physics_process() function --> needed for interpolation
3032
Engine.physics_jitter_fix = 0.0
@@ -196,6 +198,22 @@ func free_player(id):
196198
for item_name in range(range_start, range_end):
197199
get_node("../ui/table/GridContainer/" + str(item_name)).free()
198200

201+
func spawn_bullet(from_player: int):
202+
#on server
203+
var b := b_res.instantiate()
204+
b.name = str(from_player) + "_" + str(randi()%1001+1)
205+
b.position = get_node("/root/main/players/" + str(from_player) + "/" + str(from_player) + "/shoot_from").global_position
206+
b.from_player = from_player
207+
$"/root/main/bullets".add_child(b)
208+
209+
#on clients
210+
var data: Dictionary = {}
211+
for p in get_node("/root/main/players").get_children():
212+
data["name"] = b.name
213+
data["from_player"] = from_player
214+
data["position"] = get_node("/root/main/players/" + str(from_player) + "/" + str(from_player) + "/shoot_from").global_position
215+
$server_to_client.spawn_bullet_on_client.rpc_id(int(str(p.get_name())), data)
216+
199217

200218
func print_net_info():
201219
print("****************************************")

server/assets/net/server_to_client.gd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ func free_player_on_client():
2020
func send_output_to_client_unreliable():
2121
pass
2222

23+
2324
@rpc("reliable")
2425
func send_output_to_client_reliable():
2526
pass
27+
28+
29+
@rpc("reliable")
30+
func spawn_bullet_on_client():
31+
pass
32+

server/assets/player/player.gd

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var old_camera_arm_scale
2323

2424
@onready var camera_arm = $"SpringArm3D"
2525
@onready var camera = camera_arm.get_node("Camera3D")
26-
@onready var b_res := preload("res://../assets/bullet/bullet.tscn")
26+
#@onready var b_res := preload("res://../assets/bullet/bullet.tscn")
2727

2828
func _ready():
2929
var mesh_instance: MeshInstance3D = $MeshInstance3D
@@ -63,14 +63,9 @@ func _physics_process(delta):
6363
#Handle shoot.
6464
if $inputs.shoot:
6565
print(name + ": shoot")
66-
# var b := b_res.instantiate()
67-
# b.position = $"shoot_from".global_position
68-
# b.from_player = int(str(name))
69-
70-
# $"/root/main/net".spawn_bullet_on_server()
71-
# $"/root/main/net".spawn_bullet_on_client()
72-
# $"/root/main/bullets".add_child(b)
73-
# get_node("/root/Main/BulletSpawner").add_child(b, true)
66+
var from_player = int(str(name))
67+
$"/root/main/net".spawn_bullet(from_player)
68+
# $"/root/main/net".spawn_bullet_on_clients(from_player)
7469

7570
#Handle zoom
7671
if $inputs.zoom != $inputs.old_zoom:

server/assets/player/player.tscn

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[gd_scene load_steps=6 format=3 uid="uid://dbx2gi2mny360"]
1+
[gd_scene load_steps=7 format=3 uid="uid://dbx2gi2mny360"]
22

33
[ext_resource type="Script" path="res://assets/player/player.gd" id="1_15wb6"]
44
[ext_resource type="Script" path="res://assets/player/inputs.gd" id="3_ut27v"]
@@ -10,6 +10,8 @@
1010
[sub_resource type="BoxMesh" id="BoxMesh_hbdr7"]
1111
size = Vector3(0.8, 0.2, 0.8)
1212

13+
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_k50v0"]
14+
1315
[node name="player" type="CharacterBody3D"]
1416
script = ExtResource("1_15wb6")
1517

@@ -36,3 +38,22 @@ mesh = SubResource("BoxMesh_hbdr7")
3638

3739
[node name="shoot_from" type="Node3D" parent="."]
3840
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.41399, -1.18601)
41+
42+
[node name="RayCast3D" type="RayCast3D" parent="shoot_from"]
43+
target_position = Vector3(0, 0, -100)
44+
45+
[node name="crosshair" type="TextureRect" parent="."]
46+
anchors_preset = 8
47+
anchor_left = 0.5
48+
anchor_top = 0.5
49+
anchor_right = 0.5
50+
anchor_bottom = 0.5
51+
offset_left = -20.0
52+
offset_top = -20.0
53+
offset_right = 20.0
54+
offset_bottom = 20.0
55+
grow_horizontal = 2
56+
grow_vertical = 2
57+
size_flags_horizontal = 4
58+
size_flags_vertical = 4
59+
texture = SubResource("PlaceholderTexture2D_k50v0")

0 commit comments

Comments
 (0)