diff --git a/.copilot/mcp-config.json b/.copilot/mcp-config.json new file mode 100644 index 0000000..bf9f939 --- /dev/null +++ b/.copilot/mcp-config.json @@ -0,0 +1,27 @@ +{ + "mcpServers": { + "sonarqube": { + "command": "docker", + "args": [ + "run", + "--init", + "--pull=always", + "-i", + "--rm", + "-e", + "SONARQUBE_TOKEN", + "-e", + "SONARQUBE_ORG", + "sonarsource/sonarqube-mcp" + ], + "env": { + "SONARQUBE_TOKEN": "", + "SONARQUBE_ORG": "" + }, + "type": "local", + "tools": [ + "*" + ] + } + } +} \ No newline at end of file diff --git a/.copilot/mcp.yml b/.copilot/mcp.yml new file mode 100644 index 0000000..df1852d --- /dev/null +++ b/.copilot/mcp.yml @@ -0,0 +1,39 @@ +# Copilot MCP configuration for Av3boy/SharpEngine +# Purpose: tell Copilot which repository resources to index and surface as context + +version: 1 +name: SharpEngine Copilot MCP +repository: Av3boy/SharpEngine + +# Which repo sources to include for context (issues, project boards, PRs, discussions, code, workflows) +contexts: + - type: github + include: + - issues + - projects + - pull_requests + - discussions + - labels + - milestones + - commits + - workflows + + - type: files + include_paths: + - README.md + - docs/** + - .github/** + - src/** + +settings: + indexing: + max_documents: 1000 + refresh: weekly + visibility: + include_private: false + +# Notes: +# - This file is a lightweight starting point. Adjust `include` and `include_paths` to match +# which repo artifacts you want the Copilot agent to surface (e.g., add tests/** or design/**). +# - No secrets or tokens are stored here; GitHub will use repository permissions when Copilot +# fetches the requested resources. diff --git a/.editorconfig b/.editorconfig index efb06f1..5d8e474 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,8 +1,275 @@ -[*.cs] +# Remove the line below if you want to inherit .editorconfig settings from higher directories +root = true -# IDE0290: Use primary constructor +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size = 4 +indent_style = space +tab_width = 4 + +# New line preferences +end_of_line = crlf +insert_final_newline = false + +#### .NET Code Actions #### + +# Type members +dotnet_hide_advanced_members = false +dotnet_member_insertion_location = with_other_members_of_the_same_kind +dotnet_property_generation_behavior = prefer_throwing_properties + +# Symbol search +dotnet_search_reference_assemblies = true + +#### .NET Coding Conventions #### + +# Organize usings +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = false +file_header_template = unset + +# this. and Me. preferences +dotnet_style_qualification_for_event = false:error +dotnet_style_qualification_for_field = false:error +dotnet_style_qualification_for_method = false:error +dotnet_style_qualification_for_property = false:error + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true:warning +dotnet_style_predefined_type_for_member_access = true + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning +dotnet_style_parentheses_in_other_binary_operators = never_if_unnecessary:suggestion +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:warning +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members + +# Expression-level preferences +dotnet_prefer_system_hash_code = true +dotnet_style_coalesce_expression = true:warning +dotnet_style_collection_initializer = true:warning +dotnet_style_explicit_tuple_names = true:warning +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true:warning +dotnet_style_object_initializer = true:warning +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_prefer_auto_properties = true:warning +dotnet_style_prefer_collection_expression = when_types_loosely_match +dotnet_style_prefer_compound_assignment = true +dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = false +dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed +dotnet_style_prefer_inferred_anonymous_type_member_names = true +dotnet_style_prefer_inferred_tuple_names = true +dotnet_style_prefer_is_null_check_over_reference_equality_method = true +dotnet_style_prefer_non_hidden_explicit_cast_in_source = true +dotnet_style_prefer_simplified_boolean_expressions = true:warning +dotnet_style_prefer_simplified_interpolation = true + +# Field preferences +dotnet_style_readonly_field = true:warning + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:warning + +# Suppression preferences +dotnet_remove_unnecessary_suppression_exclusions = none + +# New line preferences +dotnet_style_allow_multiple_blank_lines_experimental = false:error +dotnet_style_allow_statement_immediately_after_block_experimental = false:error + +#### C# Coding Conventions #### + +# var preferences +csharp_style_var_elsewhere = true +csharp_style_var_for_built_in_types = false +csharp_style_var_when_type_is_apparent = true + +# Expression-bodied members +csharp_style_expression_bodied_accessors = true:warning +csharp_style_expression_bodied_constructors = false:error +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_lambdas = true:warning +csharp_style_expression_bodied_local_functions = true:warning +csharp_style_expression_bodied_methods = true:warning +csharp_style_expression_bodied_operators = when_on_single_line:suggestion +csharp_style_expression_bodied_properties = when_on_single_line:warning + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = true:warning +csharp_style_pattern_matching_over_is_with_cast_check = true:warning +csharp_style_prefer_extended_property_pattern = true +csharp_style_prefer_not_pattern = true:warning +csharp_style_prefer_pattern_matching = true:warning +csharp_style_prefer_switch_expression = true:warning + +# Null-checking preferences +csharp_style_conditional_delegate_call = false:warning + +# Modifier preferences +csharp_prefer_static_anonymous_function = true:warning +csharp_prefer_static_local_function = true:warning +csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,closed,sealed,override,readonly,unsafe,required,volatile,async +csharp_style_prefer_readonly_struct = true:warning +csharp_style_prefer_readonly_struct_member = true + +# Code-block preferences +csharp_prefer_braces = false +csharp_prefer_simple_using_statement = true:warning +csharp_prefer_system_threading_lock = true +csharp_style_namespace_declarations = file_scoped:error +csharp_style_prefer_labeled_jump_statements = true +csharp_style_prefer_method_group_conversion = true csharp_style_prefer_primary_constructors = false +csharp_style_prefer_simple_property_accessors = true +csharp_style_prefer_top_level_statements = false:warning + +# Expression-level preferences +csharp_prefer_simple_default_expression = true:warning +csharp_style_deconstructed_variable_declaration = true:silent +csharp_style_implicit_object_creation_when_type_is_apparent = true:warning +csharp_style_inlined_variable_declaration = true:warning +csharp_style_prefer_implicitly_typed_lambda_expression = true +csharp_style_prefer_index_operator = true:silent +csharp_style_prefer_local_over_anonymous_function = true:warning +csharp_style_prefer_null_check_over_type_check = true:warning +csharp_style_prefer_range_operator = true:silent +csharp_style_prefer_tuple_swap = true +csharp_style_prefer_unbound_generic_type_in_nameof = true +csharp_style_prefer_utf8_string_literals = true +csharp_style_throw_expression = true:silent +csharp_style_unused_value_assignment_preference = discard_variable:warning +csharp_style_unused_value_expression_statement_preference = discard_variable:warning + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace:warning + +# New line preferences +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false:error +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false:warning +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:error +csharp_style_allow_embedded_statements_on_same_line_experimental = false:error + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = no_change +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.consts_should_be_consts.severity = suggestion +dotnet_naming_rule.consts_should_be_consts.symbols = consts +dotnet_naming_rule.consts_should_be_consts.style = consts + +dotnet_naming_rule.privates_and_internals_should_be_privates.severity = suggestion +dotnet_naming_rule.privates_and_internals_should_be_privates.symbols = privates_and_internals +dotnet_naming_rule.privates_and_internals_should_be_privates.style = privates + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +dotnet_naming_symbols.privates_and_internals.applicable_kinds = property, field, event, delegate +dotnet_naming_symbols.privates_and_internals.applicable_accessibilities = internal, private +dotnet_naming_symbols.privates_and_internals.required_modifiers = readonly, static + +dotnet_naming_symbols.consts.applicable_kinds = +dotnet_naming_symbols.consts.applicable_accessibilities = * +dotnet_naming_symbols.consts.required_modifiers = const + +# Naming styles + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_style.privates.required_prefix = _ +dotnet_naming_style.privates.required_suffix = +dotnet_naming_style.privates.word_separator = +dotnet_naming_style.privates.capitalization = camel_case -# IDE0130: Namespace does not match folder structure, Justification = "Either one is fine, depending on the sittuation you might want to use block type but file scoped is default." -dotnet_diagnostic.IDE0130.severity = silent -csharp_style_namespace_declarations = file_scoped:silent +dotnet_naming_style.consts.required_prefix = +dotnet_naming_style.consts.required_suffix = +dotnet_naming_style.consts.word_separator = _ +dotnet_naming_style.consts.capitalization = all_upper diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 1318621..b332ad9 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,17 +1,36 @@ -When adding new public members or editing existing ones, please ensure that you update the XML documentation comments for those members. -This helps maintain code readability and provides useful information for other developers who may use or maintain the code in the future. +Copilot/Agent Guidance (canonical: .github/copilot-instructions.md) -Additionally, if you are adding new features or making significant changes, consider updating any relevant unit tests to cover the new functionality and ensure that existing tests still pass. +Canonical location +- This file is the authoritative Copilot/automation guidance for this repository. Keep only this file as the canonical Copilot instruction source (remove any duplicate copies at repository root or elsewhere after review and approval). -All changes need to be unit testable. Favor composition over inheritance when designing new classes or features, and ensure that your code adheres to SOLID principles for maintainability and scalability. -When referencing classes like System.IO, System.Net.Http or similar, try to use a abstraction layer or interface to allow for easier testing and flexibility in the future. -This will help decouple your code from specific implementations and make it easier to mock dependencies in unit tests. +Commit and automation policy +- Agents MUST NOT create, amend, or push commits without explicit human approval. Present diffs and allow the user to explicitly approve (e.g., "Approve commit") before any commit is made. +- Include the required Co-authored-by trailer in commits made after explicit approval. -Give me a brief summary of the changes you are making, including the purpose and any relevant details, so that I can provide more specific guidance or suggestions if needed. +Coding style and change guidance +- When making changes to the codebase, follow existing styles, naming, formatting, and conventions used in the repository. When in doubt, examine the dominant pattern in the affected area and mimic it, or ask the user for guidance. +- Update XML documentation for any new or changed public members. +- Ensure changes are unit testable. Add or update unit tests to cover new behavior and run existing tests locally when possible. +- Favor composition over inheritance, and follow SOLID principles for maintainability and testability. +- When referencing system libraries (System.IO, System.Net.Http, etc.), prefer abstractions or interfaces to enable easier testing and mocking. -If you see any areas of the codebase that could benefit from refactoring or improvement, please feel free to suggest those changes as well. -This could include improving code readability, reducing complexity, or enhancing performance. -All suggestions should be accompanied by a clear rationale and, if possible, examples of how the changes would improve the codebase. -Suggestions need to be manually approved, so do not implement those by yourself without prior discussion and approval. +- Exception handling rule: do not use empty catch blocks. Every catch block must handle the exception appropriately; at minimum it must log the caught exception (including exception type and message). Swallowing exceptions silently is forbidden. Prefer catching specific exception types and rethrowing or wrapping as needed. For library code, include context in the log message to aid debugging. -Finally, please make sure to run all existing tests and any new tests you create to verify that your changes do not introduce any regressions or issues in the codebase. \ No newline at end of file +Issue and repository inquiries +- When a user asks about an issue, the agent should check the repository's GitHub Issues list first and reference any relevant issues. +- If the agent cannot access GitHub Issues (network restrictions, lack of permissions, or API limits), clearly inform the user that Issues could not be checked and that the agent will fall back to local code inspection only after notifying the user. + +External access and transparency +- If any external service (GitHub, CI, package registries) cannot be reached from the execution environment, explicitly state which checks or steps were skipped and why. + +Safety and secrets +- Never create or commit secrets, credentials, or private tokens. If code seems to include secrets, raise an alert and ask the user how to proceed. + +PR / branch guidance (recommended) +- Use descriptive PR titles and reference related issue numbers. If this repository has branch naming conventions, follow them; otherwise, ask the user for preferred branch naming. + +What to present to the user +- For any set of changes: present a concise diff or list of changed files, a short explanation of the change's purpose, and which tests were run (or which could not be run due to limitations). +- Ask for explicit approval before making commits. + +If you have additional preferences (tone, level of detail, or where this file should live), provide guidance and this file will be adjusted accordingly. \ No newline at end of file diff --git a/Examples/MinecraftClone/Minecraft.cs b/Examples/MinecraftClone/Minecraft.cs index cb637fd..39bdbc2 100644 --- a/Examples/MinecraftClone/Minecraft.cs +++ b/Examples/MinecraftClone/Minecraft.cs @@ -4,7 +4,9 @@ using Minecraft.Terrain.Layers; using SharpEngine.Core; using SharpEngine.Core.Entities; +using SharpEngine.Core.Entities.Properties; using SharpEngine.Core.Entities.UI; +using SharpEngine.Core.Entities.UI.Layouts; using SharpEngine.Core.Enums; using SharpEngine.Core.Interfaces; using SharpEngine.Core.Numerics; @@ -33,15 +35,6 @@ public class Minecraft : Game private readonly Terrain.TerrainGenerator_New _terrain; private readonly SceneNode _blocksNode; - /// - /// Gets the main window. - /// - public static Window Window - { - get => field ?? throw new InvalidOperationException("The game window has not been assigned yet."); - set; - } - /// /// Initializes a new instance of the . /// @@ -53,7 +46,7 @@ public Minecraft(Scene scene, ISettings settings, ILogger logger) _inventory = new Inventory(); - _blocksNode = _scene.AddNode("Blocks"); + _blocksNode = _scene.Root.AddChild("Blocks"); _terrain = new Terrain.TerrainGenerator_New(_scene, _blocksNode, [ new HeightMapPass(), @@ -88,28 +81,41 @@ public override void Initialize() private void InitializeUI() { - // var gridLayout = new GridLayout(); + var numElements = 10; + const float elementSpacing = 50; + const float elementSize = 50; - // TODO: #89 Fix UI renderer - _uiElem = new UIElement(Window.GetGL(), "uiElement"); - _scene.UIElements.Add(_uiElem); + var gridLayout = new GridLayout( + new Vector2(Window.Left, Window.Bottom), + new Vector2(Window.Right, Window.Bottom)) + { + Rows = 1, + Columns = (uint)numElements, + Spacing = new Vector2(elementSpacing, elementSpacing) + }; - var uiElem2 = new UIElement(Window.GetGL(), "uiElement"); - uiElem2.Transform.Scale = new Vector2(0.2f, 0.2f); - uiElem2.Transform.Position = new Vector2(30, 0); + for (int i = 0; i < numElements; i++) + { + var uiElem = new UIElement("uiElement " + i) + { + Width = elementSize, + Height = elementSize + }; - // gridLayout.AddChild(_uiElem, uiElem2); - _scene.UIElements.Add(_uiElem); - _scene.UIElements.Add(uiElem2); + _uiElem = uiElem; - // _scene.UIElements.Add(gridLayout); + gridLayout.AddChild(_uiElem); + } + + // Attach the layout into the scene graph so traversal finds the UI elements + _scene.Root.AddChild(gridLayout); } /// /// Handles rendering after the frame is drawn. /// /// Information about the frame. - public void OnAfterRender(Frame frame) + public override void OnAfterRender(Frame frame) { var x = _uiElem.Transform.Position.X; var y = _uiElem.Transform.Position.Y; diff --git a/Examples/MinecraftClone/Minecraft.csproj b/Examples/MinecraftClone/Minecraft.csproj index 447f24c..389d0a7 100644 --- a/Examples/MinecraftClone/Minecraft.csproj +++ b/Examples/MinecraftClone/Minecraft.csproj @@ -7,7 +7,8 @@ - + + diff --git a/Examples/MinecraftClone/Program.cs b/Examples/MinecraftClone/Program.cs index 97df2f9..b9f80fc 100644 --- a/Examples/MinecraftClone/Program.cs +++ b/Examples/MinecraftClone/Program.cs @@ -1,12 +1,14 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; - +using SharpEngine.Core; using SharpEngine.Core.DependencyInjection; using SharpEngine.Core.Entities.Views; +using SharpEngine.Core.Handlers; using SharpEngine.Core.Interfaces; using SharpEngine.Core.Renderers; using SharpEngine.Core.Scenes; using SharpEngine.Core.Windowing; +using System; namespace Minecraft; @@ -34,36 +36,14 @@ private static void ConfigureServices(IServiceCollection services) }); services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(serviceProvider => serviceProvider.GetRequiredService().Camera); + services.AddSingleton(); + services.AddSingleton(serviceProvider => serviceProvider.GetRequiredService().Camera); services.AddTransient(); services.AddTransient(); - services.AddWindow( - factory: serviceProvider => - { - var game = serviceProvider.GetRequiredService(); - var scene = serviceProvider.GetRequiredService(); - var windowLogger = serviceProvider.GetRequiredService>(); - var renderers = serviceProvider.GetServices(); - - return new Window(game.Camera, scene, game.Camera.Settings, windowLogger, renderers); - }, - configure: (serviceProvider, window) => - { - var game = serviceProvider.GetRequiredService(); - - window.OnLoaded += game.Initialize; - window.OnHandleMouse += game.HandleMouse; - window.OnUpdate += game.Update; - window.OnHandleKeyboard += game.HandleKeyboard; - window.OnButtonMouseDown += game.HandleMouseDown; - window.HandleMouseWheel += game.HandleMouseWheel; - window.OnAfterRender += game.OnAfterRender; - - Minecraft.Window = window; - }, - name: "minecraft", - isDefault: true); + services.AddEngine(engine => + { + engine.AddHandler().AddWindow(); + }); } } diff --git a/Examples/MinecraftClone/Resources/Slot.png b/Examples/MinecraftClone/Resources/Slot.png new file mode 100644 index 0000000..20fa147 Binary files /dev/null and b/Examples/MinecraftClone/Resources/Slot.png differ diff --git a/Examples/MinecraftClone/Terrain/TerrainGenerator.cs b/Examples/MinecraftClone/Terrain/TerrainGenerator.cs index b71e3e9..c9d37b5 100644 --- a/Examples/MinecraftClone/Terrain/TerrainGenerator.cs +++ b/Examples/MinecraftClone/Terrain/TerrainGenerator.cs @@ -1,6 +1,7 @@ using Minecraft.Terrain.Block; using SharpEngine.Core.Entities; using SharpEngine.Core.Entities.Lights; +using SharpEngine.Core.Entities.Properties; using SharpEngine.Core.Numerics; using SharpEngine.Core.Numerics.Noise; using SharpEngine.Core.Scenes; @@ -56,7 +57,7 @@ public sealed class TerrainGenerator_New internal TerrainGenerator_New(Scene scene, SceneNode blocksNode, IEnumerable? layers = null) { _scene = scene; - _lightsNode = _scene.AddNode("Lights"); + _lightsNode = _scene.Root.AddChild("Lights"); _blocksNode = blocksNode; _layers = layers?.ToArray() ?? Array.Empty(); } diff --git a/Examples/MinecraftClone/Terrain/TerrainGenerator_Old.cs b/Examples/MinecraftClone/Terrain/TerrainGenerator_Old.cs index 84ee4f0..31ec3ad 100644 --- a/Examples/MinecraftClone/Terrain/TerrainGenerator_Old.cs +++ b/Examples/MinecraftClone/Terrain/TerrainGenerator_Old.cs @@ -1,5 +1,6 @@ using Minecraft.Terrain.Block; using SharpEngine.Core.Entities.Lights; +using SharpEngine.Core.Entities.Properties; using SharpEngine.Core.Numerics; using SharpEngine.Core.Numerics.Noise; using SharpEngine.Core.Scenes; @@ -32,7 +33,7 @@ internal class TerrainGenerator_Old internal TerrainGenerator_Old(Scene scene, SceneNode blocksNode) { _scene = scene; - _lightsNode = _scene.AddNode("Lights"); + _lightsNode = _scene.Root.AddChild("Lights"); _blocksNode = blocksNode; } diff --git a/Examples/MultipleWindows/Program.cs b/Examples/MultipleWindows/Program.cs index b1dfc16..943d2f4 100644 --- a/Examples/MultipleWindows/Program.cs +++ b/Examples/MultipleWindows/Program.cs @@ -34,7 +34,7 @@ public static partial class Program public static async Task Main(string[] _) { Core.Handlers.WindowHandler windowHandler = new(); - windowHandler.Start(); + windowHandler.Start(_cancellationTokenSource); Console.WriteLine("end"); Console.ReadLine(); @@ -108,7 +108,7 @@ private static Window CreateWindow() } }; - var window = new Window(new(), options, _windowLogger); + var window = new Window(new(), options); window.Initialize(); return window; @@ -119,10 +119,10 @@ private static void EnqueueWindow() var window = CreateWindow(); // Prefer the higher-level Window event to avoid wiring low-level input handlers. - window.OnButtonMouseDown += (mouse, button) => Mouse_Click(mouse, (MouseButton)button, mouse.Position); + window.InputManager.OnButtonMouseDown += (mouse, button) => Mouse_Click(mouse, (MouseButton)button, mouse.Position); - if (window.Input is not null) - _inputContexts.Add(window.Input); + if (window.InputManager.Context is not null) + _inputContexts.Add(window.InputManager.Context); _windows.Add(window); } diff --git a/Examples/Tutorial 4.1 - Model Loading/Tutorial 4.1 - Model Loading.csproj b/Examples/Tutorial 4.1 - Model Loading/Tutorial 4.1 - Model Loading.csproj index bbd8dbb..04f525f 100644 --- a/Examples/Tutorial 4.1 - Model Loading/Tutorial 4.1 - Model Loading.csproj +++ b/Examples/Tutorial 4.1 - Model Loading/Tutorial 4.1 - Model Loading.csproj @@ -7,8 +7,9 @@ - + + diff --git a/README.md b/README.md index 0b0344a..8f9cdfe 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ [![NuGet Version](https://img.shields.io/nuget/v/SharpEngine.Core.NET)](https://www.nuget.org/packages/SharpEngine.Core.NET) ![NuGet Downloads](https://img.shields.io/nuget/dt/PACKAGE_NAME) +[![Quality gate status](https://sonarcloud.io/api/project_badges/measure?project=Av3boy_SharpEngine&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Av3boy_SharpEngine) +