public static void SharedVisualizeTestResults(
            ITempList <TestResult> physicsTestResults,
            CollisionGroup collisionGroup)
        {
            if (IsClient)
            {
                using var testResults = Api.Shared.GetTempList <Vector2D>();
                AddTestResults(physicsTestResults.AsList(), testResults.AsList());
                ClientComponentPhysicsSpaceVisualizer.VisualizeTestResults(testResults.AsList(),
                                                                           collisionGroup,
                                                                           isClient: true);
            }
            else // if server
            {
                Api.Assert(Api.IsEditor, "This is Editor-only server code");
                var allPlayers = Server.Characters.EnumerateAllPlayerCharacters(onlyOnline: true,
                                                                                exceptSpectators: false);

                var testResults = new List <Vector2D>();
                AddTestResults(physicsTestResults.AsList(), testResults);

                var collisionGroupId = CollisionGroups.GetCollisionGroupId(collisionGroup);
                instance.CallClient(
                    allPlayers,
                    // ReSharper disable once AccessToDisposedClosure
                    _ => _.ClientRemote_ProcessServerTestResults(testResults, collisionGroupId));
            }
        }
        private void ClientRemote_ProcessServerTestResults(
            List <Vector2D> testResults,
            CollisionGroupId collisionGroupId)
        {
            var collisionGroup = CollisionGroups.GetCollisionGroup(collisionGroupId);

            ClientComponentPhysicsSpaceVisualizer.VisualizeTestResults(testResults,
                                                                       collisionGroup,
                                                                       isClient: false);
        }
        private void ClientRemote_ProcessServerDebugPhysicsTesting(BasePhysicsShapeRemoteData wrappedShape)
        {
            var shape = PhysicsShapeRemoteDataHelper.Unwrap(wrappedShape);

            ClientComponentPhysicsSpaceVisualizer.ProcessServerDebugPhysicsTesting(shape);
        }
Exemplo n.º 4
0
        public override void ClientInitialize()
        {
            var scene = Api.Client.Scene;

            ClientComponentDebugGrid.Instance.Refresh();
            ClientDebugGuidesManager.Instance.Refresh();
            ClientComponentPhysicsSpaceVisualizer.Init();

            scene.CreateSceneObject("FPS Counter")
            .AddComponent <ClientComponentPerformanceIndicatorsManager>();

            scene.CreateSceneObject("Console manager")
            .AddComponent <ClientComponentConsoleErrorsWatcher>();

            ClientInputContext.Start("Console toggle")
            .HandleButtonDown(
                GameButton.ToggleDeveloperConsole,
                ConsoleControl.Toggle,
                evenIfHandled: true);

            ClientInputContext.Start("Debug tools toggle")
            .HandleButtonDown(
                GameButton.ToggleDebugToolsOverlay,
                DebugToolsOverlay.Toggle);

            ClientInputContext.Start("Full screen toggle")
            .HandleButtonDown(
                GameButton.ToggleFullscreen,
                () =>
            {
                var option          = Api.GetProtoEntity <VideoOptionScreenMode>();
                option.CurrentValue =
                    option.CurrentValue != VideoOptionScreenMode.ScreenMode.Fullscreen
                                              ? VideoOptionScreenMode.ScreenMode.Fullscreen
                                              : VideoOptionScreenMode.ScreenMode.Windowed;

                option.Category.ApplyAndSave();
            },
                evenIfHandled: true);

            ClientInputContext.Start("Main menu overlay")
            .HandleButtonDown(
                GameButton.CancelOrClose,
                MainMenuOverlay.Toggle);

            ClientInputContext.Start("Capture screenshot")
            .HandleButtonDown(
                GameButton.CaptureScreenshot,
                () =>
            {
                if (Client.SteamApi.IsSteamClient &&
                    Client.Input.IsKeyDown(InputKey.F12, evenIfHandled: true))
                {
                    // The default screenshot key (F12) was pressed while playing from Steam Client.
                    // It will trigger a screenshot by Steam Client (if it using the default key binding).
                    // Ignore the in-game screenshot functionality to avoid any issues with Steam Client.
                    return;
                }

                Client.Rendering.CaptureScreenshot();
                Api.Client.Audio.PlayOneShot(new SoundResource("UI/Notifications/Screenshot"));
            },
                evenIfHandled: true);

            ScreenshotNotification.InitializeScreenshotOverlaySystem();
        }