Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Debug game - vibe coded successfully - #551

Merged
AngeloTadeucci merged 2 commits into
masterfrom
debuggame
Jul 23, 2025
Merged

Debug game - vibe coded successfully#551
AngeloTadeucci merged 2 commits into
masterfrom
debuggame

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Jul 23, 2025

Copy link
Copy Markdown
Collaborator

Added field details, player and field npcs details

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive debug UI for field and actor inspection, including interactive panels for field information, actor lists, and detailed actor stats.
    • Selecting a field renderer now automatically opens a corresponding debug window if not already open.
  • Bug Fixes

    • Corrected mesh construction logic to ensure proper rendering of cube meshes.
  • Refactor

    • Improved code clarity, encapsulation, and consistency across the debug graphics system.
    • Updated string formatting in UI windows to use modern C# interpolated strings.
    • Simplified internal logic and improved thread safety in debug window management.
  • Chores

    • Registered additional types for dependency injection and improved error handling for unmapped keys in the debug UI.

@coderabbitai

coderabbitaiBot commented Jul 23, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces a comprehensive refactor and expansion of the debug graphics and UI system in the server debug game module. Major changes include a full-featured debug UI for field and actor inspection, improved thread safety, code clarity, and encapsulation. Several files are updated for consistency, error handling, and automatic debug window management.

Changes

File(s)Change Summary
Maple2.Server.DebugGame/Graphics/Assets/CoreModels.csFixed cube mesh triangle construction by correcting vertex indexing logic to use index buffer for accurate vertex selection.
Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.csExtensively refactored and expanded to provide interactive debug UI for field and actor inspection, including thread-safe window management, new rendering and update logic, and detailed actor panels.
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.csSimplified initialization logic, clarified null assignments, and updated API usage from ref to in for certain method calls.
Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.csRefactored for improved encapsulation, thread safety, and code clarity; adjusted access modifiers, reordered resource initialization and cleanup, and updated resource management logic.
Maple2.Server.DebugGame/Graphics/ImGuiController.csChanged unmapped key behavior in SilkKeyToImGui from throwing exceptions to returning ImGuiKey.None.
Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.csSimplified property syntax, switched to interpolated strings, and added logic to auto-create field windows when selecting a field renderer.
Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.csReplaced all string.Format usages with C# interpolated strings in UI rendering logic.
Maple2.Server.DebugGame/Program.csRemoved unnecessary .ToString() call for IP address and registered TriggerCache as a singleton in the Autofac container.

Sequence Diagram(s)

sequenceDiagram
participant User
participant DebugFieldWindow
participant DebugFieldRenderer
participant FieldListWindow
participant Context
User->>FieldListWindow: Selects a field renderer
FieldListWindow->>FieldListWindow: Calls AutoCreateFieldWindow(renderer)
FieldListWindow->>Context: Checks for existing DebugFieldWindow
alt No window exists
FieldListWindow->>Context: Calls FieldWindowOpened()
Context-->>FieldListWindow: Returns new DebugFieldWindow
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
else Window exists
FieldListWindow->>DebugFieldWindow: Sets ActiveRenderer
end
DebugFieldWindow->>DebugFieldRenderer: Renders field and actor info
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

  • fix: GRPC game ip #220: Updates Program.cs to remove .ToString() on Target.GrpcGameIp and configures AddChannelRequest usage, directly related to the same field and method usage.
  • Debug renderer  #209: Introduces and implements the CoreModels class and mesh creation logic, which is directly affected by the vertex indexing fix in this PR.

Poem

In windows bright, the fields unfold,
With actors' tales and stats retold.
Debuggers hop with nimble care,
Inspecting cubes and data there.
A thread-safe warren, neat and new—
This bunny's code now hops for you!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f817327 and 38bbb4a.

📒 Files selected for processing (2)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d54ce3 and f817327.

📒 Files selected for processing (8)
  • Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (5 hunks)
  • Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (3 hunks)
  • Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (2 hunks)
  • Maple2.Server.DebugGame/Program.cs (2 hunks)
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

🧰 Additional context used
🧠 Learnings (4)
Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (6)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-10-09T04:13:28.776Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #270
File: Maple2.Server.DebugGame/Graphics/Scene/Camera.cs:15-17
Timestamp: 2024-09-30T04:17:39.756Z
Learning: In Camera.cs, the SetProperties method is intentionally left unimplemented because it's not necessary outside of the work-in-progress debug renderer.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-08-11T06:52:42.080Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs:286-294
Timestamp: 2024-10-09T04:13:28.776Z
Learning: The GetResourceRootPath method in DebugGraphicsContext is only called during initialization, and a non-cached result is desired for future update checks.

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (2)

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-08-11T07:13:23.335Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

Learnt from: mettaursp
PR: #209
File: Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs:41-43
Timestamp: 2024-10-09T04:13:28.776Z
Learning: Currently, there are no unmanaged resources in the DebugFieldRenderer class of the Maple2 project.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: format
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (19)
Maple2.Server.DebugGame/Program.cs (2)

48-48: LGTM! Removed redundant string conversion.

The removal of .ToString() indicates that Target.GrpcGameIp is already a string type, making the conversion unnecessary and improving performance slightly.


111-113: Good addition of TriggerCache registration.

The registration of TriggerCache as a singleton with property injection is appropriate for a cache component that should be shared across the application and supports the expanded debugging capabilities.

Maple2.Server.DebugGame/Graphics/Ui/Windows/WindowListWindow.cs (1)

41-43: Good modernization with string interpolation.

The replacement of string.Format calls with C# string interpolation improves readability and provides slight performance benefits. The logic remains unchanged while making the code more maintainable.

Also applies to: 107-113

Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs (1)

123-125: Critical bug fix for cube mesh construction.

This fix correctly uses indices from cubeSolidIndices array instead of the loop counter to access vertices. The previous implementation would have created incorrect triangles by using sequential vertex indices rather than the intended triangle vertex indices from the index buffer.

Maple2.Server.DebugGame/Graphics/ImGuiController.cs (1)

437-437: Good defensive programming improvement.

Returning ImGuiKey.None instead of throwing NotImplementedException for unmapped keys provides better fault tolerance. This prevents crashes from unknown key mappings while maintaining functionality for recognized keys, which is appropriate for debug UI input handling.

Maple2.Server.DebugGame/Graphics/DebugFieldWindow.cs (4)

46-47: Good simplification by removing unnecessary unsafe block.

The IsInitialized check doesn't require unsafe context, so removing the unsafe block simplifies the code while maintaining the same functionality.


82-82: Improved clarity with explicit null assignments.

Using explicit null instead of default for reference types makes the intent clearer and improves code readability during cleanup operations.

Also applies to: 91-91


118-118: Better explicit initialization for pointer variable.

Using explicit null initialization instead of default for the pointer variable makes the intent clearer and is more readable.


164-164: Correct use of in parameters for read-only data.

Using in parameters instead of ref is semantically correct for these DirectX API calls since the viewport and render target data are only being read, not modified. This provides better compile-time safety and intent clarity.

Also applies to: 166-166

Maple2.Server.DebugGame/Graphics/Ui/Windows/FieldListWindow.cs (2)

7-10: LGTM! Clean refactoring to expression-bodied properties.

The simplification of property getters improves code readability while maintaining the same functionality.


97-101: Good modernization with string interpolation.

The switch from string.Format to C# interpolated strings improves readability and is the preferred approach in modern C#.

Maple2.Server.DebugGame/Graphics/DebugFieldRenderer.cs (5)

15-22: Excellent thread-safe property implementation.

The IsActive property correctly uses mutex synchronization to safely check the activeWindows count across threads.


33-43: Smart optimization to prevent redundant field updates.

The Update method efficiently checks if the field has already been updated in the current frame before performing the update, preventing duplicate work when multiple windows are rendering the same field.


45-74: Well-structured UI rendering with good separation of concerns.

The render method effectively coordinates the field information window layout and properly manages window positioning for the actor details panel. The separation into helper methods improves maintainability.


136-228: Comprehensive actor list implementation with consistent table structure.

The actor list properly handles selection for players, NPCs, and mobs with a uniform table structure. The selectable rows provide good UX for actor inspection.


387-401: Proper thread-safe window lifecycle management.

The AttachWindow and DetachWindow methods correctly use mutex synchronization to safely manage the activeWindows collection, ensuring thread-safe window attachment and detachment.

Maple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs (3)

19-19: Good encapsulation improvement.

Changing ForceDXVK to ForceDxvk with private access follows C# naming conventions and improves encapsulation.


46-56: Excellent thread-safe property implementation for field renderers.

The FieldRenderers property correctly uses mutex synchronization and returns a defensive copy of the array to prevent external modifications.


388-426: Comprehensive frame timing implementation.

The delta tracking provides detailed performance metrics with a rolling average, min/max tracking, and frame rate limiting to ~60 FPS. This is useful for performance monitoring in the debug UI.

Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs Outdated
Comment threadMaple2.Server.DebugGame/Graphics/DebugGraphicsContext.cs
@AngeloTadeucciAngeloTadeucci changed the title Debug game - vibe coded succesfullyDebug game - vibe coded successfullyJul 23, 2025
@AngeloTadeucci
AngeloTadeucci merged commit 44433d5 into masterJul 23, 2025
4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the debuggame branch July 23, 2025 16:40
@coderabbitaicoderabbitaiBot mentioned this pull request Jul 24, 2025
@coderabbitaicoderabbitaiBot mentioned this pull request Oct 3, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@AngeloTadeucci@Zintixx