Implemented --dedicated-server mode. Tested a bit, set it to use less GPU and make no sound, also not capture mouse etc, and display an overview of the game.

main
unfa 2021-09-28 02:07:30 +02:00
parent 1a40489237
commit 59c68c997b
1 changed files with 66 additions and 31 deletions

View File

@ -94,7 +94,7 @@ func _process(delta):
if local_player: if local_player:
$Label.text += "\n\nLOCAL PLAYER DEAD: " + str(local_player.dead) $Label.text += "\n\nLOCAL PLAYER DEAD: " + str(local_player.dead)
$Label.text += "\n\nWEAPON SPREAD: " + str(local_player.weapon.spread) $Label.text += "\n\nWEAPON SPREAD: " + str(local_player.weapon.spread) #TODO use this to alter crosshair
$Label.text += "\n\nGAME RESET AT: " + str(reset_at) $Label.text += "\n\nGAME RESET AT: " + str(reset_at)
@ -106,19 +106,19 @@ func _process(delta):
create_player(i, is_local, true) create_player(i, is_local, true)
spawn_queue.erase(i) spawn_queue.erase(i)
# 3 seconds left to new round if local_player:
if 0 < reset_at and (uptime + 3.5) >= reset_at and (uptime + 3) < reset_at and not $Announcer.is_playing(): # 3 seconds left to new round
$Announcer.speak($Announcer.getready) if 0 < reset_at and (uptime + 3.5) >= reset_at and (uptime + 3) < reset_at and not $Announcer.is_playing():
$Announcer.speak($Announcer.getready)
# starting new round # starting new round
if 0 < reset_at and uptime >= reset_at: if 0 < reset_at and uptime >= reset_at:
hud.scoretab(false) hud.scoretab(false)
local_player.dead = false local_player.dead = false
reset_at = -1 reset_at = -1
$Announcer.speak($Announcer.go) $Announcer.speak($Announcer.go)
for i in player_list.players.keys(): for i in player_list.players.keys():
player_list.players[i].score = 0 player_list.players[i].score = 0
class PlayerList: class PlayerList:
var players = {} var players = {}
@ -178,19 +178,22 @@ func _input(_event) -> void:
hud.scoretab(false) hud.scoretab(false)
@rpc(any, sync, reliable) func game_over(winner): @rpc(any, sync, reliable) func game_over(winner):
local_player.rpc(&'set_dead', true) if local_player:
hud.game_over(winner) local_player.rpc(&'set_dead', true)
hud.game_over(winner)
spawn_queue.clear() spawn_queue.clear()
for j in player_list.players.keys(): for j in player_list.players.keys():
spawn_queue[j] = uptime + reset_delay spawn_queue[j] = uptime + reset_delay
reset_at = uptime + reset_delay reset_at = uptime + reset_delay
if winner == local_player.get_multiplayer_authority(): if local_player:
$Announcer.speak($Announcer.victory) if winner == local_player.get_multiplayer_authority():
elif player_list.get(local_player.get_multiplayer_authority()).score == 0: $Announcer.speak($Announcer.victory)
$Announcer.speak($Announcer.defeat2) # embarrasing defeat elif player_list.get(local_player.get_multiplayer_authority()).score == 0:
else: $Announcer.speak($Announcer.defeat2) # embarrasing defeat
$Announcer.speak($Announcer.defeat) else:
$Announcer.speak($Announcer.defeat)
func check_game_win_condition(): func check_game_win_condition():
for i in player_list.players.keys(): for i in player_list.players.keys():
@ -244,6 +247,8 @@ func update_hud():
var old_name = player_list.get(pid).name var old_name = player_list.get(pid).name
if old_name != new_info.name: if old_name != new_info.name:
chat.chat_notification("Player [b]" + old_name + "[/b] changed name to [b]" + new_info.name + "[/b]") chat.chat_notification("Player [b]" + old_name + "[/b] changed name to [b]" + new_info.name + "[/b]")
else:
create_player(pid, false)
if $Players.has_node(str(pid)): if $Players.has_node(str(pid)):
var player = $Players.get_node(str(pid)) var player = $Players.get_node(str(pid))
@ -252,7 +257,8 @@ func update_hud():
player_list.set(pid, new_info) # server relays other PID's data player_list.set(pid, new_info) # server relays other PID's data
# update local HUD # update local HUD
update_hud() if local_player:
update_hud()
#check_game_win_condition() #check_game_win_condition()
func push_local_player_info(): # func push_local_player_info(): #
@ -302,7 +308,9 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
var spawnpoint = $Map/SpawnPoints.get_children()[randi() % len($Map/SpawnPoints.get_children())] var spawnpoint = $Map/SpawnPoints.get_children()[randi() % len($Map/SpawnPoints.get_children())]
player_node.global_transform = spawnpoint.global_transform player_node.global_transform = spawnpoint.global_transform
player_list.players[pid].health = 100 player_list.players[pid].health = 100
push_local_player_info()
if local_player:
push_local_player_info()
#focus = GameFocus.GAME # make sure the player has no menu displayed when they respawn #focus = GameFocus.GAME # make sure the player has no menu displayed when they respawn
return # avoid running the rest of this function return # avoid running the rest of this function
@ -355,8 +363,36 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
func start_dedicated_server(): # start server without creating a local player func start_dedicated_server(): # start server without creating a local player
role = MultiplayerRole.DEDICATED_SERVER role = MultiplayerRole.DEDICATED_SERVER
peer.create_server(NET_PORT, 16) peer.create_server(NET_PORT, 16)
get_tree().multiplayer_peer = peer get_tree().multiplayer.multiplayer_peer = peer
#create_player(1, true)
get_viewport().debug_draw = Viewport.DebugDraw.DEBUG_DRAW_OVERDRAW
get_viewport().msaa = Viewport.MSAA.MSAA_DISABLED
get_viewport().use_debanding = false
get_viewport().screen_space_aa = 0
get_viewport().lod_threshold = 128
get_viewport().get_camera_3d().effects = null
get_viewport().shadow_atlas_size = 64
$Map/Decals.hide()
$Map/Lights.hide()
$Map/ReflectionProbes.hide()
AudioServer.set_bus_mute(0, true) # mute sound
$Label.show()
#get_tree().root.title = "LIBLAST DEDICATED SERVER"
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
gui.hide()
hud.show()
hud.get_node("ScoreRank").hide()
hud.get_node("Stats").hide()
hud.get_node("Crosshair").hide()
hud.scoretab(true)
func host_server(): func host_server():
_on_Host_pressed() _on_Host_pressed()
@ -387,9 +423,8 @@ func _on_Connect_pressed():
get_tree().multiplayer.multiplayer_peer = peer get_tree().multiplayer.multiplayer_peer = peer
func _player_connected(pid) -> void: func _player_connected(pid) -> void:
print("player connected, id: ", pid) print("peer connected, id: ", pid)
create_player(pid, false)
if get_tree().multiplayer.is_server(): # if we're the server if get_tree().multiplayer.is_server(): # if we're the server
for i in player_list.players.keys(): # send the player_list to the new client for i in player_list.players.keys(): # send the player_list to the new client
#pass #pass
@ -430,7 +465,7 @@ func _server_disconnected() -> void:
func _ready() -> void: func _ready() -> void:
hud.hide() # start in the menu hud.hide() # start in the menu
print("Commandline arguments: ", OS.get_cmdline_args()) focus = GameFocus.MENU
get_tree().multiplayer.connect("peer_connected", self._player_connected) get_tree().multiplayer.connect("peer_connected", self._player_connected)
get_tree().multiplayer.connect("peer_disconnected", self._player_disconnected) get_tree().multiplayer.connect("peer_disconnected", self._player_disconnected)
@ -438,7 +473,7 @@ func _ready() -> void:
get_tree().multiplayer.connect("connection_failed", self._connected_fail) get_tree().multiplayer.connect("connection_failed", self._connected_fail)
get_tree().multiplayer.connect("server_disconnected", self._server_disconnected) get_tree().multiplayer.connect("server_disconnected", self._server_disconnected)
if OS.get_cmdline_args().has("dedicated_server"): if OS.get_cmdline_args().has("--dedicated-server"):
start_dedicated_server() start_dedicated_server()
func change_player_color(color): func change_player_color(color):