added tracers

This commit is contained in:
leca 2024-03-27 20:07:26 +03:00
parent fb839f3467
commit b4677e91b9
7 changed files with 57 additions and 9 deletions

View File

@ -0,0 +1,15 @@
[gd_scene load_steps=4 format=3 uid="uid://cm4as5vv2k2di"]
[ext_resource type="Script" path="res://scripts/BulletTraces.gd" id="1_trgm5"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_g4lay"]
albedo_color = Color(1, 0, 1, 1)
emission = Color(1, 0, 0.741176, 1)
emission_energy_multiplier = 9.21
[sub_resource type="ImmediateMesh" id="ImmediateMesh_djmsg"]
[node name="MeshInstance3D" type="MeshInstance3D"]
material_override = SubResource("StandardMaterial3D_g4lay")
mesh = SubResource("ImmediateMesh_djmsg")
script = ExtResource("1_trgm5")

View File

@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://dvrv2bfmotivm"]
[ext_resource type="Texture2D" uid="uid://bmuo2tbe3r8ih" path="res://textures/logo/ammo.svg" id="1_p3k0o"]
[ext_resource type="Script" path="res://scripts/kill_log_entry.gd" id="1_tki6n"]
[ext_resource type="Script" path="res://scripts/KillLogEntry.gd" id="1_tki6n"]
[node name="kill_log_entry" type="HBoxContainer"]
offset_right = 311.0

11
scripts/BulletTraces.gd Normal file
View File

@ -0,0 +1,11 @@
extends MeshInstance3D
func init(start, end):
var draw_mesh = ImmediateMesh.new()
mesh = draw_mesh
draw_mesh.surface_begin(Mesh.PRIMITIVE_LINES, material_override)
draw_mesh.surface_add_vertex(to_local(start))
draw_mesh.surface_add_vertex(to_local(end))
draw_mesh.surface_end()
await get_tree().create_timer(1).timeout
free()

View File

@ -38,6 +38,11 @@ var properties_example = {
var client_settings
var server_settings
func apply_weapon_settings(s: Dictionary): #game/weapons/weapon
for weapon in s.values():
Weapons[s.find_key(weapon)] = weapon
print("New weapons: " + str(Weapons))
func _ready():
read_settings()
@ -66,6 +71,7 @@ func read_settings():
else:
server_settings_file = FileAccess.open("./settings/server-settings.json", FileAccess.READ)
server_settings = JSON.parse_string(server_settings_file.get_as_text())
apply_weapon_settings(server_settings["game"]["weapons"])
func save_client_settings():
var client_settings_file = FileAccess.open("./settings/client-settings.json", FileAccess.WRITE)

View File

@ -125,6 +125,7 @@ func shot(client_id):
var client_playermodel = ServerUtils.find_playermodel_by_internal_id(internal_id)
var raycast:RayCast3D = client_playermodel.get_node("Head/Camera/viewRaycast")
var weapon_raycast:RayCast3D = client_playermodel.get_node("Head/Camera/Hand/" + str(current_weapon) + "/raycast")
print("currect weapon: " + current_weapon)
raycast.target_position.z = -current_weapon_settings["range"]
raycast.force_raycast_update()
raycast.force_update_transform()

View File

@ -133,11 +133,7 @@ func change_weapon(new_weapon_number):
func find_weapon_in_inventory(number):
var found_weapon
print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa: " + str(properties["weapons"]))
for weapon in properties["weapons"].values():
#var a:Dictionary = properties["weapons"]
#a.
print("Checking: " + str(weapon))
if weapon["number"] == number:
found_weapon = weapon
break
@ -189,6 +185,7 @@ func try_shoot():
print(str(properties["current_weapon"]))
#var current_weapon = game_settings["weapons"].find_key(find_weapon_by_number(properties["current_weapon"]["number"]))
var current_weapon = find_weapon_name_by_number(properties["current_weapon"]["number"])#game_settings["weapons"].find_key(find_weapon_by_number(properties["current_weapon"]["number"]))
print("currect weapon: " + current_weapon)
var current_weapon_settings = game_settings["weapons"][current_weapon]
properties["reloading"] = false
@ -202,6 +199,26 @@ func try_shoot():
Networking.shot.rpc_id(1, multiplayer.get_unique_id())
properties["current_weapon"]["magazine"] -= 1
properties["last_shot"] = Time.get_ticks_msec()
var raycast:RayCast3D = get_node("Head/Camera/viewRaycast")
var weapon_raycast:RayCast3D = get_node("Head/Camera/Hand/" + str(current_weapon) + "/raycast")
raycast.target_position.z = -current_weapon_settings["range"]
raycast.force_raycast_update()
raycast.force_update_transform()
var target_point = raycast.get_collision_point()
weapon_raycast.target_position = weapon_raycast.to_local(target_point) * 1.1
weapon_raycast.rotation.y = atan((weapon_raycast.position.x - position.x) / ((-current_weapon_settings["range"]) - (abs(weapon_raycast.position.z - position.z))))
weapon_raycast.target_position.y += current_weapon_settings["spreading"] * randf() * sin(randf() * 2 * PI)
weapon_raycast.target_position.z += current_weapon_settings["spreading"] * randf() * cos(randf() * 2 * PI)
weapon_raycast.force_raycast_update()
weapon_raycast.force_update_transform()
var trace = preload("res://scenes/models/bullet_trace.tscn").instantiate()
get_node("..").add_child(trace)
trace.init((weapon_raycast.global_position), (weapon_raycast.get_collision_point()))
func reload():
var current_weapon_instance = properties["current_weapon"]
@ -240,10 +257,6 @@ func _unhandled_input(event):
camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-50), deg_to_rad(60))
func _physics_process(delta):
#for shape:CollisionShape3D in collision_shapes:
##shape.rotation = self.rotation
#shape.rotate_y(head.rotation.y)
#shapee.
if (!properties["is_playable"]): return
if (game_settings == null): return
if (multiplayer.multiplayer_peer == null):
@ -327,6 +340,8 @@ func set_game_settings(s):
acceleration = game_settings["moving"]["acceleration"]
inertia = game_settings["moving"]["inertia"]
change_weapon(properties["current_weapon"]["number"])
GameData.apply_weapon_settings(game_settings["weapons"])
Weapons = GameData.Weapons
@rpc ("authority", "call_remote", "reliable")
func teleport(pos):