private void SwitchMode(BuildMode mode)
        {
            _currentMode = mode;
            BuildScriptPrefs.SetCurrentMode(_currentMode);

            base.Repaint();
            GUIUtility.ExitGUI();
        }
        private void OnServerGUI()
        {
            EditorGUI.BeginChangeCheck();
            _socketPort = EditorGUILayout.IntField(new GUIContent("Socket Port", "The socket port used to host this server through."), _socketPort);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetSocketPort(_socketPort);
            }

            EditorGUILayout.Separator();

            var ip = IPUtils.GetLocalIPv4(NetworkInterfaceType.Ethernet);

            if (!string.IsNullOrEmpty(ip))
            {
                EditorGUILayout.DelayedTextField(new GUIContent("Ethernet IP v4 Address:", "Automatically identified local IP V4 address for Ethernet (Read Only)."), ip);
            }

            ip = IPUtils.GetLocalIPv4(NetworkInterfaceType.Wireless80211);
            if (!string.IsNullOrEmpty(ip))
            {
                EditorGUILayout.DelayedTextField(new GUIContent("Wireless IP v4 Address:", "Automatically identified local IP V4 address for Wireless (Read Only)."), ip);
            }

            EditorGUILayout.Separator();
            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Build for Server"))
            {
                if (!Directory.Exists(_buildFolder))
                {
                    SetBuildFolder();
                }

                if (_buildAndRun)
                {
                    BuildScripts.BuildAndRunServer64(_serverOnlyScene, _buildFolder, _devBuild, _buildTarget, _socketPort);
                }
                else
                {
                    BuildScripts.BuildServer64(_serverOnlyScene, _buildFolder, _devBuild, _buildTarget, _socketPort);
                }

                GUIUtility.ExitGUI();
            }

            if (GUILayout.Button("Run as Server"))
            {
                BuildScripts.PlayAsServer(_serverOnlyScene, _socketPort);
                GUIUtility.ExitGUI();
            }

            EditorGUILayout.EndHorizontal();
        }
        private string SetBuildFolder()
        {
            var fullPath = EditorUtility.OpenFolderPanel("Build Folder", Application.dataPath.Replace("Assets", string.Empty), "bin");

            if (!string.IsNullOrEmpty(fullPath))
            {
                _buildFolder = fullPath;
                BuildScriptPrefs.SetBuildFolder(_buildFolder);
                base.Repaint();
            }

            return(fullPath);
        }
        public void LoadPrefs()
        {
            if (string.IsNullOrEmpty(_serverOnlyScene))
            {
                _serverOnlyScene = BuildScriptPrefs.GetServerOnlyScene();
            }

            if (string.IsNullOrEmpty(_clientOnlyScene))
            {
                _clientOnlyScene = BuildScriptPrefs.GetClientOnlyScene();
            }

            if (string.IsNullOrEmpty(_singleOnlyScene))
            {
                _singleOnlyScene = BuildScriptPrefs.GetSingleOnlyScene();
            }

            if (string.IsNullOrEmpty(_buildFolder))
            {
                _buildFolder = BuildScriptPrefs.GetBuildFolder();
            }

            if (string.IsNullOrEmpty(_serverIp))
            {
                _serverIp = BuildScriptPrefs.GetServerIP();
            }

            if (_serverPort == -1)
            {
                _serverPort = BuildScriptPrefs.GetServerPort();
            }

            if (_socketPort == -1)
            {
                _socketPort = BuildScriptPrefs.GetSocketPort();
            }

            _currentMode         = BuildScriptPrefs.GetCurrentMode();
            _buildAndRun         = BuildScriptPrefs.GetBuildAndRun();
            _useLocal            = BuildScriptPrefs.GetUseLocal();
            _useHetzner          = BuildScriptPrefs.GetUseHetzner();
            _devBuild            = BuildScriptPrefs.GetDevelopmentBuild();
            _buildTarget         = BuildScriptPrefs.GetBuildTarget();
            _autoConnectOnEnable = BuildScriptPrefs.GetAutoConnectOnEnable();
        }
        private void RenderBuildFolder()
        {
            EditorGUILayout.LabelField(new GUIContent("Build Folder", "The folder to place builds in."), EditorStyles.centeredGreyMiniLabel);

            EditorGUILayout.BeginHorizontal();

            EditorGUI.BeginChangeCheck();
            _buildFolder = EditorGUILayout.TextField(new GUIContent("Build Folder:", "The folder to place builds in."), _buildFolder);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetBuildFolder(_buildFolder);
            }

            if (GUILayout.Button(new GUIContent("Browse", "Browse for folders in the project."), EditorStyles.miniButtonRight, GUILayout.Width(EditorGUIUtility.fieldWidth)))
            {
                SetBuildFolder();
                GUIUtility.ExitGUI();
            }

            EditorGUILayout.EndHorizontal();
        }
        private void OnClientGUI()
        {
            EditorGUI.BeginChangeCheck();
            _autoConnectOnEnable = EditorGUILayout.Toggle(new GUIContent("Auto Connect On Enable?", "Whether the ClientNetSender automatically connects on enable to the set IP and port."), _autoConnectOnEnable);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetAutoConnectOnEnable(_autoConnectOnEnable);
            }

            if (_autoConnectOnEnable)
            {
                EditorGUI.BeginChangeCheck();
                _useLocal = EditorGUILayout.Toggle(new GUIContent("Connect to Localhost?", "Whether the client should connect to a localhost (127.0.0.1), or another custom IP address."), _useLocal);

                if (EditorGUI.EndChangeCheck())
                {
                    if (_useHetzner && _useLocal)
                    {
                        _useHetzner = false;
                        BuildScriptPrefs.SetUseHetzner(_useHetzner);
                    }

                    BuildScriptPrefs.SetUseLocal(_useLocal);
                }

                EditorGUI.BeginChangeCheck();
                _useHetzner = EditorGUILayout.Toggle(new GUIContent("Connect to Hetzner Server?", "Whether the client should connect to the hetzner remote server (88.198.75.133), or another custom IP address."), _useHetzner);

                if (EditorGUI.EndChangeCheck())
                {
                    if (_useLocal && _useHetzner)
                    {
                        _useLocal = false;
                        BuildScriptPrefs.SetUseLocal(_useLocal);
                    }

                    BuildScriptPrefs.SetUseHetzner(_useHetzner);
                }

                EditorGUILayout.BeginHorizontal();

                EditorGUILayout.LabelField(new GUIContent("Server Address:", "The IP + port address of the server, which the client should connect to."), GUILayout.Width(EditorGUIUtility.labelWidth));

                if (!_useLocal && !_useHetzner)
                {
                    EditorGUI.BeginChangeCheck();
                    _serverIp = EditorGUILayout.TextField(_serverIp);

                    if (EditorGUI.EndChangeCheck())
                    {
                        BuildScriptPrefs.SetServerIP(_serverIp);
                    }
                }
                else if (_useLocal)
                {
                    EditorGUILayout.SelectableLabel(BuildConstants.localhost);
                }
                else if (_useHetzner)
                {
                    EditorGUILayout.SelectableLabel(BuildConstants.hetznerIp);
                }

                EditorGUI.BeginChangeCheck();
                _serverPort = EditorGUILayout.IntField(_serverPort);

                if (EditorGUI.EndChangeCheck())
                {
                    BuildScriptPrefs.SetServerPort(_serverPort);
                }

                EditorGUILayout.EndHorizontal();
            }
            else
            {
                EditorGUI.BeginChangeCheck();
                _serverPort = EditorGUILayout.IntField(new GUIContent("Server Port: ", "The server port to connect to. Should be the same port as on the server ;)"), _serverPort);

                if (EditorGUI.EndChangeCheck())
                {
                    BuildScriptPrefs.SetServerPort(_serverPort);
                }
            }

            EditorGUILayout.Separator();
            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Build for Client"))
            {
                if (!Directory.Exists(_buildFolder))
                {
                    SetBuildFolder();
                }

                if (_useLocal)
                {
                    if (_buildAndRun)
                    {
                        BuildScripts.BuildAndRunClientLocal(_clientOnlyScene, _buildFolder, _devBuild, _buildTarget, _serverPort, _autoConnectOnEnable);
                    }
                    else
                    {
                        BuildScripts.BuildClientLocal(_clientOnlyScene, _buildFolder, _devBuild, _buildTarget, _serverPort, _autoConnectOnEnable);
                    }
                }
                else if (_useHetzner)
                {
                    if (_buildAndRun)
                    {
                        BuildScripts.BuildAndRunForHetzner(_clientOnlyScene, _buildFolder, _devBuild, _buildTarget, _serverPort, _autoConnectOnEnable);
                    }
                    else
                    {
                        BuildScripts.BuildClientForHetzner(_clientOnlyScene, _buildFolder, _devBuild, _buildTarget, _serverPort, _autoConnectOnEnable);
                    }
                }
                else
                {
                    if (_buildAndRun)
                    {
                        BuildScripts.BuildAndRunClientForIP(_serverIp, _serverPort, _clientOnlyScene, _buildFolder, _devBuild, _buildTarget, _autoConnectOnEnable);
                    }
                    else
                    {
                        BuildScripts.BuildClientForIP(_serverIp, _serverPort, _clientOnlyScene, _buildFolder, _devBuild, _buildTarget, _autoConnectOnEnable);
                    }
                }

                GUIUtility.ExitGUI();
            }

            if (GUILayout.Button("Run as Client"))
            {
                if (_useLocal)
                {
                    BuildScripts.PlayAsClientLocal(_serverPort, _clientOnlyScene, _autoConnectOnEnable);
                }
                else if (_useHetzner)
                {
                    BuildScripts.PlayAsHetzner(_serverPort, _clientOnlyScene, _autoConnectOnEnable);
                }
                else
                {
                    BuildScripts.PlayAsClientForIP(_serverIp, _serverPort, _clientOnlyScene, _autoConnectOnEnable);
                }

                GUIUtility.ExitGUI();
            }

            EditorGUILayout.EndHorizontal();
        }
        private void RenderBuildAndRunning()
        {
            EditorGUILayout.LabelField(new GUIContent("Building & Running (" + _currentMode.ToString() + ")", "Building and optionally auto-running builds."), EditorStyles.centeredGreyMiniLabel);

            EditorGUI.BeginChangeCheck();

            _buildTarget = (BuildTarget)EditorGUILayout.EnumPopup(new GUIContent("Build Target", "Which platform to build for."), _buildTarget);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetBuildTarget(_buildTarget);
            }

            EditorGUI.BeginChangeCheck();

            _devBuild = EditorGUILayout.Toggle(new GUIContent("Development Build", "Toggle to build as development build."), _devBuild);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetDevelopmentBuild(_devBuild);
            }

            EditorGUI.BeginChangeCheck();
            _buildAndRun = EditorGUILayout.Toggle(new GUIContent("Build and Run?", "Whether to auto-run the game after building, if successful."), _buildAndRun);

            if (EditorGUI.EndChangeCheck())
            {
                BuildScriptPrefs.SetBuildAndRun(_buildAndRun);
            }

            // Actual mode pages
            switch (_currentMode)
            {
            case BuildMode.Singleplayer:
            {
                OnSingleplayerGUI();
                break;
            }

            case BuildMode.Client:
            {
                OnClientGUI();
                break;
            }

            case BuildMode.Server:
            {
                OnServerGUI();
                break;
            }
            }

            // vr mode
            using (var vrrow = new EditorGUILayout.HorizontalScope())
            {
                GUI.enabled = !Application.isPlaying;
                var vrSupport = EditorGUILayout.Toggle("VR Mode", PlayerSettings.virtualRealitySupported);
                if (!Application.isPlaying)
                {
                    PlayerSettings.virtualRealitySupported = vrSupport;
                }
                GUI.enabled = true;

                // buttons for VR platform definition - easier to access than player settings
                var supDevices = UnityEngine.XR.XRSettings.supportedDevices;
                var goodColor  = Color.green;
                var badColor   = Color.red;

                GUI.color = supDevices.Contains("OpenVR") ? goodColor : badColor;
                if (GUILayout.Button("OpenVR"))
                {
                    if (supDevices.Contains("OpenVR"))
                    {
                        // do nothing...
                    }
                    else
                    {
                        // add a new array containing only OpenVR
                        var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(this._buildTarget);
                        UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(buildTargetGroup, new string[] { "OpenVR" });
                    }
                }

                GUI.color = supDevices.Contains("Oculus") ? goodColor : badColor;
                if (GUILayout.Button("Oculus"))
                {
                    if (supDevices.Contains("Oculus"))
                    {
                        // do nothing...
                    }
                    else
                    {
                        // add a new array containing only Oculus
                        var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(this._buildTarget);
                        UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(buildTargetGroup, new string[] { "Oculus" });
                    }
                }

                GUI.color = Color.white;
            }
        }
        private void RenderAdditivelyLoadedScene()
        {
            EditorGUILayout.LabelField(new GUIContent("Additively Loaded Scene Path", "In order to facilitate different modes of play (Multiplayer Client & Server + Singleplayer), a scene is additively loaded to the 'base' scene with the specifics for that mode of play. The path for that scene is found underneath."), EditorStyles.centeredGreyMiniLabel);

            if (_currentMode == BuildMode.Singleplayer)
            {
                EditorGUILayout.BeginHorizontal();

                EditorGUI.BeginChangeCheck();
                _singleOnlyScene = EditorGUILayout.TextField(new GUIContent("Singleplayer Only Scene:", "The path for the additively loaded scene used for the Singleplayer mode of play."), _singleOnlyScene, EditorStyles.textField);

                if (EditorGUI.EndChangeCheck())
                {
                    BuildScriptPrefs.SetSingleOnlyScene(_singleOnlyScene);
                }

                if (GUILayout.Button(new GUIContent("Browse", "Browse for scenes in the Unity project."), EditorStyles.miniButtonRight, GUILayout.Width(EditorGUIUtility.fieldWidth)))
                {
                    var sceneBrowse = BrowseScene();
                    if (!string.IsNullOrEmpty(sceneBrowse))
                    {
                        _singleOnlyScene = sceneBrowse;
                        BuildScriptPrefs.SetSingleOnlyScene(_singleOnlyScene);
                    }

                    GUIUtility.ExitGUI();
                }

                EditorGUILayout.EndHorizontal();

                DrawLoadUnloadScene(_singleOnlyScene);
            }
            else if (_currentMode == BuildMode.Client)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUI.BeginChangeCheck();
                _clientOnlyScene = EditorGUILayout.TextField(new GUIContent("Client Only Scene:", "The path for the additively loaded scene used for the Client mode of play."), _clientOnlyScene, EditorStyles.textField);

                if (EditorGUI.EndChangeCheck())
                {
                    BuildScriptPrefs.SetClientOnlyScene(_clientOnlyScene);
                }

                if (GUILayout.Button(new GUIContent("Browse", "Browse for scenes in the Unity project."), EditorStyles.miniButtonRight, GUILayout.Width(EditorGUIUtility.fieldWidth)))
                {
                    var sceneBrowse = BrowseScene();
                    if (!string.IsNullOrEmpty(sceneBrowse))
                    {
                        _clientOnlyScene = sceneBrowse;
                        BuildScriptPrefs.SetClientOnlyScene(_clientOnlyScene);
                    }

                    GUIUtility.ExitGUI();
                }

                EditorGUILayout.EndHorizontal();

                DrawLoadUnloadScene(_clientOnlyScene);
            }
            else if (_currentMode == BuildMode.Server)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUI.BeginChangeCheck();
                _serverOnlyScene = EditorGUILayout.TextField(new GUIContent("Server Only Scene:", "The path for the additively loaded scene used for the Server mode of play."), _serverOnlyScene, EditorStyles.textField);

                if (EditorGUI.EndChangeCheck())
                {
                    BuildScriptPrefs.SetServerOnlyScene(_serverOnlyScene);
                }

                if (GUILayout.Button(new GUIContent("Browse", "Browse for scenes in the Unity project."), EditorStyles.miniButtonRight, GUILayout.Width(EditorGUIUtility.fieldWidth)))
                {
                    var sceneBrowse = BrowseScene();
                    if (!string.IsNullOrEmpty(sceneBrowse))
                    {
                        _serverOnlyScene = sceneBrowse;
                        BuildScriptPrefs.SetServerOnlyScene(_serverOnlyScene);
                    }

                    GUIUtility.ExitGUI();
                }

                EditorGUILayout.EndHorizontal();

                DrawLoadUnloadScene(_serverOnlyScene);
            }
        }
Exemple #9
0
 public static string GetServerDirectoryPath(BuildTarget target = BuildTarget.StandaloneLinux64)
 {
     return(Path.Combine(Path.Combine(BuildScriptPrefs.GetBuildFolder(), BuildScripts.serverBuildName), target.ToString()));
 }