mirror of
https://gitlab.com/open-fpsz/open-fpsz.git
synced 2026-01-19 19:44:46 +00:00
⚡️ Headless optimizations
This commit is contained in:
parent
4157ae7ba5
commit
bc5aa8a41f
|
|
@ -43,4 +43,3 @@ func drop(dropper : Player) -> void:
|
|||
_mesh.show()
|
||||
flag_state = FlagState.FLAG_STATE_DROPPED
|
||||
dropped.emit(dropper)
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,12 @@ func _ready() -> void:
|
|||
Vector3(0, flag.get_node("CollisionShape3D").shape.size.y, 0))
|
||||
|
||||
func _process(_delta : float) -> void:
|
||||
# disable waypoint repositioning when running headless
|
||||
if DisplayServer.get_name() == "headless":
|
||||
set_process(false)
|
||||
return
|
||||
|
||||
# repositon iff on viewport
|
||||
var camera : Camera3D = get_viewport().get_camera_3d()
|
||||
var viewport_rect : Rect2 = get_viewport_rect()
|
||||
# if the player is NOT infront of the camera or camera does NOT have LOS to player
|
||||
|
|
@ -32,15 +38,12 @@ func _process(_delta : float) -> void:
|
|||
return
|
||||
else:
|
||||
_iff_container.show() # display the IFF
|
||||
|
||||
# get the screen location of the players head
|
||||
var new_iff_position : Vector2 = camera.unproject_position(attach_point.global_position)
|
||||
|
||||
# check if the unprojected point lies inside the viewport
|
||||
if !Rect2(Vector2(0, 0), viewport_rect.size).has_point(new_iff_position):
|
||||
_iff_container.hide() # hide the IFF and exit function
|
||||
return
|
||||
|
||||
# move the IFF up so the bottom of it is at the players head
|
||||
new_iff_position.y -= _iff_container.size.y
|
||||
# move the IFF left so it's centered horizontally above players head
|
||||
|
|
|
|||
|
|
@ -31,12 +31,14 @@ func _on_multiplayer_pressed() -> void:
|
|||
$SettingsPanelContainer.hide()
|
||||
$MainPanelContainer.hide()
|
||||
$MultiplayerPanelContainer.show()
|
||||
show()
|
||||
|
||||
func _on_settings_pressed() -> void:
|
||||
$MultiplayerPanelContainer.hide()
|
||||
$MultiplayerPanelContainer.tab_container.current_tab = 0
|
||||
$SettingsPanelContainer.show()
|
||||
$MainPanelContainer.hide()
|
||||
show()
|
||||
|
||||
func _on_quit_pressed() -> void:
|
||||
get_tree().quit()
|
||||
|
|
@ -46,6 +48,7 @@ func _on_main_menu_pressed() -> void:
|
|||
$MultiplayerPanelContainer.tab_container.current_tab = 0
|
||||
$SettingsPanelContainer.hide()
|
||||
$MainPanelContainer.show()
|
||||
show()
|
||||
"
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_krqeq"]
|
||||
|
|
@ -81,7 +84,6 @@ signal join_server(host : String, port : int)
|
|||
|
||||
@onready var modal : Control = $Modal
|
||||
@onready var menu : CanvasLayer = get_parent()
|
||||
@onready var game : Node3D = get_tree().current_scene.get_node(\"/root/Game\")
|
||||
@onready var map_selector : OptionButton = %MapSelector
|
||||
|
||||
@export var tab_container : TabContainer
|
||||
|
|
@ -94,7 +96,7 @@ func _ready() -> void:
|
|||
call_deferred(\"_populate_map_selector\")
|
||||
|
||||
func _populate_map_selector() -> void:
|
||||
for map : PackedScene in game.maps:
|
||||
for map : PackedScene in MapsManager.maps:
|
||||
var map_name : String = map._bundled.names[0]
|
||||
map_selector.add_item(map_name)
|
||||
|
||||
|
|
|
|||
44
main.tscn
44
main.tscn
|
|
@ -1,9 +1,8 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://ma1if3sjox6i"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://ma1if3sjox6i"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://boviiugcnfyrj" path="res://modes/singleplayer/demo.tscn" id="1_50a80"]
|
||||
[ext_resource type="PackedScene" uid="uid://bjctlqvs33nqy" path="res://interfaces/menus/boot/boot.tscn" id="1_acy5o"]
|
||||
[ext_resource type="PackedScene" uid="uid://bvwxfgygm2xb8" path="res://modes/multiplayer/multiplayer.tscn" id="2_g8xeb"]
|
||||
[ext_resource type="Resource" uid="uid://dut5f1sq0wfeb" path="res://maps/maps.tres" id="3_1ipir"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_e61dq"]
|
||||
script/source = "# This file is part of open-fpsz.
|
||||
|
|
@ -26,12 +25,6 @@ class_name Game extends Node3D
|
|||
@export var SINGLEPLAYER : PackedScene
|
||||
@export var MULTIPLAYER : PackedScene
|
||||
|
||||
@export_category(\"Maps\")
|
||||
@export var _maps_resource : ArrayPackedSceneResource
|
||||
|
||||
@onready var maps : Array[PackedScene] = _maps_resource.get_items()
|
||||
|
||||
# current mode, when the value is set to null we're in the main menu
|
||||
var mode : Node:
|
||||
set(new_mode):
|
||||
# clean up previous mode
|
||||
|
|
@ -42,12 +35,14 @@ var mode : Node:
|
|||
# setup new mode
|
||||
if new_mode != null:
|
||||
add_child(new_mode)
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
else:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# only run server in headless
|
||||
if DisplayServer.get_name() == \"headless\":
|
||||
mode = MULTIPLAYER.instantiate()
|
||||
mode.start_server(9000, MapsManager.maps[MapsManager._rng.randi_range(0, len(MapsManager.maps) - 1)])
|
||||
return
|
||||
# connect boot menu signals
|
||||
$BootMenu.start_demo.connect(_start_demo)
|
||||
$BootMenu/MultiplayerPanelContainer.start_server.connect(_start_server)
|
||||
$BootMenu/MultiplayerPanelContainer.join_server.connect(_join_server)
|
||||
|
|
@ -55,16 +50,17 @@ func _ready() -> void:
|
|||
if not OS.is_debug_build():
|
||||
DisplayServer.window_set_mode(Settings.get_value(\"video\", \"window_mode\"))
|
||||
|
||||
|
||||
func _unhandled_input(event : InputEvent) -> void:
|
||||
if event.is_action_pressed(\"exit\"):
|
||||
# reset game mode
|
||||
mode = null
|
||||
# make it easier to exit the game during development
|
||||
if OS.is_debug_build():
|
||||
get_tree().quit(0)
|
||||
if mode is Multiplayer:
|
||||
$BootMenu._on_multiplayer_pressed()
|
||||
else:
|
||||
$BootMenu.show()
|
||||
$BootMenu._on_main_menu_pressed()
|
||||
# reset game mode and get back to main menu
|
||||
mode = null
|
||||
if DisplayServer.get_name() != \"headless\":
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
return
|
||||
|
||||
# switch window mode
|
||||
if event.is_action_pressed(\"window_mode\"):
|
||||
|
|
@ -82,15 +78,13 @@ func _unhandled_input(event : InputEvent) -> void:
|
|||
|
||||
func _start_demo() -> void:
|
||||
mode = SINGLEPLAYER.instantiate()
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
$BootMenu.hide()
|
||||
|
||||
func _start_server(port : int, nickname : String) -> void:
|
||||
mode = MULTIPLAYER.instantiate()
|
||||
mode.start_server({
|
||||
\"port\": port,
|
||||
\"nickname\": nickname,
|
||||
\"map\": maps[clamp($BootMenu/MultiplayerPanelContainer.map_selector.selected, 0, len(maps))]
|
||||
})
|
||||
mode.start_server(port, MapsManager.maps[$BootMenu/MultiplayerPanelContainer.map_selector.selected], nickname)
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
$BootMenu.hide()
|
||||
|
||||
func _join_server(host : String, port : int, nickname : String) -> void:
|
||||
|
|
@ -98,12 +92,12 @@ func _join_server(host : String, port : int, nickname : String) -> void:
|
|||
mode.connected_to_server.connect($BootMenu/MultiplayerPanelContainer._on_connected_to_server)
|
||||
mode.connection_failed.connect($BootMenu/MultiplayerPanelContainer._on_connection_failed)
|
||||
mode.join_server(host, port, nickname)
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
"
|
||||
|
||||
[node name="Game" type="Node3D"]
|
||||
script = SubResource("GDScript_e61dq")
|
||||
SINGLEPLAYER = ExtResource("1_50a80")
|
||||
MULTIPLAYER = ExtResource("2_g8xeb")
|
||||
_maps_resource = ExtResource("3_1ipir")
|
||||
|
||||
[node name="BootMenu" parent="." instance=ExtResource("1_acy5o")]
|
||||
|
|
|
|||
|
|
@ -34,3 +34,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.847419, 94.7914, -0.106026
|
|||
|
||||
[node name="FlagPillar" parent="." instance=ExtResource("5_4kwtt")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.849599, 92.7505, -0.104984)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1440, 0)
|
||||
|
|
|
|||
|
|
@ -18,22 +18,22 @@ ambient_light_source = 3
|
|||
tonemap_mode = 3
|
||||
tonemap_exposure = 0.6
|
||||
tonemap_white = 0.6
|
||||
ssr_enabled = true
|
||||
ssao_intensity = 5.0
|
||||
ssil_enabled = true
|
||||
ssil_intensity = 5.0
|
||||
ssil_sharpness = 0.7
|
||||
sdfgi_use_occlusion = true
|
||||
sdfgi_cascades = 6
|
||||
sdfgi_max_distance = 819.2
|
||||
sdfgi_y_scale = 0
|
||||
glow_normalized = true
|
||||
glow_intensity = 2.0
|
||||
glow_strength = 0.96
|
||||
fog_enabled = true
|
||||
fog_light_color = Color(1, 1, 1, 1)
|
||||
fog_light_energy = 0.15
|
||||
fog_density = 0.0025
|
||||
fog_light_energy = 0.5
|
||||
fog_density = 0.001
|
||||
fog_sky_affect = 0.3
|
||||
fog_height = 85.0
|
||||
fog_height_density = 0.01
|
||||
volumetric_fog_density = 0.003
|
||||
volumetric_fog_albedo = Color(1, 0.380392, 0.380392, 1)
|
||||
volumetric_fog_emission_energy = 192.23
|
||||
|
|
|
|||
|
|
@ -28,20 +28,17 @@ class_name Multiplayer extends Node
|
|||
signal connected_to_server
|
||||
signal connection_failed
|
||||
|
||||
func start_server(config : Dictionary) -> void:
|
||||
# Check if required parameters are missing
|
||||
var required_params : Array[String] = ["port", "map", "nickname"]
|
||||
for param in required_params:
|
||||
if not config.has(param):
|
||||
print("Missing param in server config:", param)
|
||||
return
|
||||
# server setup
|
||||
func start_server(port : int, map_scene : PackedScene, nickname : String = "mercury") -> void:
|
||||
# setup enet server peer
|
||||
var peer : ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
||||
peer.create_server(config["port"], MAX_CLIENTS)
|
||||
peer.create_server(port, MAX_CLIENTS)
|
||||
multiplayer.peer_disconnected.connect(remove_player)
|
||||
multiplayer.multiplayer_peer = peer
|
||||
|
||||
_load_map.call_deferred(config["map"], config["nickname"])
|
||||
_load_map(map_scene)
|
||||
|
||||
if DisplayServer.get_name() != "headless":
|
||||
add_player(1, nickname)
|
||||
|
||||
func join_server(host : String, port : int, nickname : String) -> void:
|
||||
var peer : ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
||||
|
|
@ -89,13 +86,11 @@ func remove_player(peer_id : int) -> void:
|
|||
player.queue_free()
|
||||
print("Peer `%s` disconnected" % node_name)
|
||||
|
||||
func _load_map(scene : PackedScene, nickname : String) -> void:
|
||||
func _load_map(scene : PackedScene) -> void:
|
||||
var map_scene : Node = scene.instantiate()
|
||||
MapsManager.current_map = map_scene
|
||||
map_scene.ready.connect(_add_flag)
|
||||
map.add_child(map_scene)
|
||||
if DisplayServer.get_name() != "headless":
|
||||
add_player(1, nickname)
|
||||
|
||||
func _add_flag() -> void:
|
||||
var flag : Flag = FLAG.instantiate()
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ var environment := Environment.new()
|
|||
## Random number generator instance
|
||||
var _rng := RandomNumberGenerator.new()
|
||||
|
||||
var _maps_resource : ArrayPackedSceneResource = preload("res://maps/maps.tres")
|
||||
var maps : Array[PackedScene] = _maps_resource.get_items()
|
||||
|
||||
## Reference to the current terrain map in the scene
|
||||
var current_map : Terrain3D = null:
|
||||
set(new_map):
|
||||
|
|
|
|||
Loading…
Reference in a new issue