{"record":{"id":"55fdc3d365823d16","repo":"stride3d/stride","slug":"gamesettings","errorCode":null,"errorMessage":"gameSettings","messagePattern":"gameSettings","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Navigation/DynamicNavigationMeshSystem.cs","lineNumber":109,"sourceCode":"                BuildSettings = ObjectFactoryRegistry.NewInstance<NavigationMeshBuildSettings>();\n                IncludedCollisionGroups = CollisionFilterGroupFlags.AllFilter;\n                Groups = new List<NavigationMeshGroup>\n                {\n                    ObjectFactoryRegistry.NewInstance<NavigationMeshGroup>(),\n                };\n            }\n\n            sceneSystem = Services.GetSafeServiceAs<SceneSystem>();\n            scriptSystem = Services.GetSafeServiceAs<ScriptSystem>();\n        }\n\n        /// <summary>\n        /// Copies the default settings from the <see cref=\"GameSettings\"/> for building navigation\n        /// </summary>\n        public void InitializeSettingsFromGameSettings(GameSettings gameSettings)\n        {\n            if (gameSettings == null)\n                throw new ArgumentNullException(nameof(gameSettings));\n\n            // Initialize build settings from game settings\n            var navigationSettings = gameSettings.GetOrCreateConfiguration<NavigationSettings>();\n\n            InitializeSettingsFromNavigationSettings(navigationSettings);\n        }\n\n        /// <inheritdoc />\n        public override void Update(GameTime gameTime)\n        {\n            // This system should load from settings before becoming functional\n            if (!Enabled)\n                return;\n\n            if (currentSceneInstance != sceneSystem?.SceneInstance)\n            {\n                // ReSharper disable once PossibleNullReferenceException\n                UpdateScene(sceneSystem.SceneInstance);","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Navigation/DynamicNavigationMeshSystem.cs#L91-L127","documentation":"InitializeSettingsFromGameSettings copies navigation build settings from a GameSettings asset. The library throws ArgumentNullException immediately when the gameSettings argument is null, because there is no meaningful default to copy from a missing settings object.","triggerScenarios":"Calling InitializeSettingsFromGameSettings(null), typically when GameSettings has not been loaded/assigned before navigation initialization runs.","commonSituations":"Headless or tool builds where GameSettings assets aren't loaded; custom game-entry code that calls navigation initialization before the settings service provides a GameSettings; refactoring that removed the settings load step.","solutions":["Load or resolve the GameSettings asset before calling InitializeSettingsFromGameSettings and pass the loaded instance","If no custom settings are needed, skip this call and rely on NavigationSettings defaults instead of passing null","Wrap the call in a null check (if (gameSettings != null)) when settings may legitimately be absent"],"exampleFix":"// before\nnavigationSystem.InitializeSettingsFromGameSettings(gameSettings); // gameSettings may be null\n// after\nif (gameSettings != null)\n    navigationSystem.InitializeSettingsFromGameSettings(gameSettings);","handlingStrategy":"validation","validationCode":"if (gameSettings == null)\n    throw new InvalidOperationException(\"GameSettings must be loaded before initializing navigation settings\");\nnavigationSystem.InitializeSettingsFromGameSettings(gameSettings);","typeGuard":"bool hasGameSettings = gameSettings != null;","tryCatchPattern":"try\n{\n    navigationSystem.InitializeSettingsFromGameSettings(gameSettings);\n}\ncatch (ArgumentNullException)\n{\n    // settings not loaded yet; fall back to defaults\n}","preventionTips":["Load GameSettings assets during startup before any system initialization","Never pass null for settings arguments; prefer skipping the call to use defaults","Assert settings availability in debug builds"],"tags":["csharp","null-argument","navigation"],"backgroundTag":"null-argument","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}