SanAndreasUnity/Assets/Scripts/Networking/NetCmdLineHandler.cs
2021-03-02 23:47:51 +01:00

62 lines
2.1 KiB
C#

using System.Collections;
using System.Linq;
using SanAndreasUnity.GameModes;
using UnityEngine;
using SanAndreasUnity.Utilities;
namespace SanAndreasUnity.Net
{
public class NetCmdLineHandler : MonoBehaviour
{
public int numFramesToWait = 5;
IEnumerator Start()
{
if (!Mirror.NetworkManager.isHeadless)
yield break;
for (int i=0; i < this.numFramesToWait; i++)
yield return null;
ushort portNum = (ushort) NetManager.defaultListenPortNumber;
CmdLineUtils.GetUshortArgument("portNum", ref portNum);
string sceneName = "Main";
CmdLineUtils.GetArgument("scene", ref sceneName);
ushort maxNumPlayers = (ushort) NetManager.maxNumPlayers;
CmdLineUtils.GetUshortArgument("maxNumPlayers", ref maxNumPlayers);
string serverIp = "127.0.0.1";
CmdLineUtils.GetArgument("serverIp", ref serverIp);
string gameModeName = null;
CmdLineUtils.GetArgument("gameMode", ref gameModeName);
if (!string.IsNullOrWhiteSpace(gameModeName))
{
var gameModeInfo = GameModeManager.Instance.GameModes.FirstOrDefault(gm => gm.Name == gameModeName);
if (gameModeInfo != null)
GameModeManager.Instance.SelectGameMode(gameModeInfo);
else
Debug.LogError($"Game mode with name '{gameModeName}' not found");
}
if (CmdLineUtils.HasArgument("startServer"))
{
Debug.LogFormat("Starting server in headless mode, params: {0}, {1}, {2}", portNum, sceneName, maxNumPlayers);
NetManager.StartServer(portNum, sceneName, maxNumPlayers, true, false);
}
else if (CmdLineUtils.HasArgument("startClient"))
{
Debug.LogFormat("Starting client in headless mode, params: {0}, {1}", serverIp, portNum);
NetManager.StartClient(serverIp, portNum);
}
}
}
}