From 074ea8b463f785abe347c38af75745767c094186 Mon Sep 17 00:00:00 2001 From: leca Date: Sat, 17 Feb 2024 21:42:18 +0300 Subject: [PATCH] now headless version is run via --headless. By default, server launches with spectator camera --- models/spectator.tscn | 8 +++++++ project.godot | 15 ++++++++++++ scripts/Networking.gd | 3 +++ scripts/SpectatorControls.gd | 44 +++++++++++++++++++++++++++++++++++ settings/server-settings.json | 16 +++++++++++++ 5 files changed, 86 insertions(+) create mode 100644 models/spectator.tscn create mode 100644 scripts/SpectatorControls.gd diff --git a/models/spectator.tscn b/models/spectator.tscn new file mode 100644 index 0000000..f309fa8 --- /dev/null +++ b/models/spectator.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://bf6uev4mtg2ls"] + +[ext_resource type="Script" path="res://scripts/SpectatorControls.gd" id="1_uqbjn"] + +[node name="head" type="Node3D"] +script = ExtResource("1_uqbjn") + +[node name="Camera" type="Camera3D" parent="."] diff --git a/project.godot b/project.godot index 9323f1c..f72c0aa 100644 --- a/project.godot +++ b/project.godot @@ -59,3 +59,18 @@ shoot={ "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) ] } +crawl={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +MWU={ +"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":4,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +MWD={ +"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":5,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} diff --git a/scripts/Networking.gd b/scripts/Networking.gd index 45a9060..dfc20f3 100644 --- a/scripts/Networking.gd +++ b/scripts/Networking.gd @@ -42,6 +42,9 @@ func StartServer(): peer.connect("peer_connected", _Peer_Connected) peer.connect("peer_disconnected", _Peer_Disconnected) + var spectator = preload("res://models/spectator.tscn").instantiate() + server_map.add_child(spectator) + func send_everyone_except(client_id, args): if (typeof(args[0]) == 4): #string for current_client_id in clients.keys(): diff --git a/scripts/SpectatorControls.gd b/scripts/SpectatorControls.gd new file mode 100644 index 0000000..08ea335 --- /dev/null +++ b/scripts/SpectatorControls.gd @@ -0,0 +1,44 @@ +extends Node3D + +const SENSETIVITY = 0.009; +var walk = 2 +@onready var head = $"." +@onready var camera = $"./Camera" + +func _ready(): + camera.make_current() + +func _unhandled_input(event): + if Input.is_action_pressed("MWU"): + walk += walk / 5. + print("UP " + str(walk)) + if Input.is_action_pressed("MWD"): + walk -= walk / 5. + print("DOWN " + str(walk)) + walk = clamp(walk, 0.01, 15) + if event is InputEventMouseMotion: + head.rotate_y(-event.relative.x * SENSETIVITY) + camera.rotate_x(-event.relative.y * SENSETIVITY) + camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-90), deg_to_rad(90)) + +func _physics_process(delta): + var input_dir = Input.get_vector("left", "right", "forward", "backward") + #var direction = head.transform.rotation + var direction = (head.transform.basis * Vector3(input_dir.x, input_dir.x, input_dir.y)).normalized() + #var direction = (head.transform.basis * Vector2(input_dir.x, input_dir.y)).normalized() + var velocity = Vector3.ZERO + var speed + + + if Input.is_action_pressed("run"): + speed = walk * 2 + else: + speed = walk + velocity.y = Input.get_vector("crawl", "jump", "left", "right").x * speed + if direction: + velocity.x = direction.x * speed + velocity.z = direction.z * speed + else: + velocity.x = lerp(velocity.x, direction.x * speed, delta * 4) + velocity.z = lerp(velocity.z, direction.z * speed, delta * 4) + head.position += velocity diff --git a/settings/server-settings.json b/settings/server-settings.json index e269d45..99c7acc 100644 --- a/settings/server-settings.json +++ b/settings/server-settings.json @@ -8,6 +8,22 @@ "run": 24, "gravity": 9.8, "jump": 12 + }, + "weapons": { + "pistol": { + "damage": 10, + "reload": 2, + "magazine": 10, + "fireRate": 0.5, + "spreading": 0 + }, + "ak-47": { + "damage": 5, + "reload": 4, + "magazine": 30, + "fireRate": 0.2, + "spreading": 0 + } } } }