added xunit and a few tests with gdunit

This commit is contained in:
2026-02-20 15:41:43 +01:00
parent 6101406f45
commit 4474ba22fa
16 changed files with 1673 additions and 129 deletions

28
agents.md Normal file
View File

@@ -0,0 +1,28 @@
### Project Overview: Godot C# Movement Tests
This project is a high-performance 3D character controller for Godot 4.x using C# 13 and .NET 9. It focuses on modular movement systems (Dash, Mantle, Stairs) and robust combat mechanics (Damage, Health, Knockback) decoupled through interfaces.
### Core Architecture
- **Modular Systems**: The `PlayerController.cs` acts as a central hub for multiple specialized "Systems" (e.g., `DashSystem`, `MantleSystem`, `HeadSystem`, `StairsSystem`).
- **State Management**: Uses `GodotStateCharts` for complex movement and action states. Look for state transitions and triggers within the system scripts.
- **Interface-Driven Design**: Located in `/interfaces/`, these define how objects interact (e.g., `IDamageable`, `IHealthable`, `IKnockbackable`). Always implement these interfaces for new interactable entities.
- **Node Composition**: Most systems are attached to the `PlayerController` scene as child nodes and initialized via their respective `Init()` methods or exported fields.
### Key Directories
- `/scenes/player_controller/`: Contains the main player scene, the central `PlayerController.cs`, and its sub-systems.
- `/scenes/player_controller/components/`: Modular logic for specific features like Dash, Mantle, and Weapons.
- `/interfaces/`: Core C# interfaces and shared records (e.g., `DamageRecord`, `HealthChangedRecord`).
- `/tests/`: Automated unit and integration tests using `GdUnit4` and `xUnit`.
### Coding Standards & Idioms
- **C# 13 & .NET 9**: Use modern C# features (records, primary constructors, collection expressions).
- **Godot Partial Classes**: All Godot scripts must be `partial` and use `[GlobalClass]` where appropriate for editor visibility.
- **RustyOptions**: The project uses `RustyOptions` for safer null handling and result types (`Option<T>`, `Result<T, E>`).
- **Signals**: Use `[Signal]` and the `EventHandler` pattern for Godot signals.
- **Dependency Injection**: Systems are typically assigned to fields in `PlayerController` via the editor or `GetNode<T>()` in `_Ready()`.
### LLM Interaction Tips
1. **Partial Classes**: When suggesting changes to `PlayerController.cs` or systems, remember they are `partial`. Large files like `PlayerController.cs` (2500+ lines) are often split or contain many regions.
2. **Node Hierarchy**: Always check `PlayerController.tscn` or system scenes (`head_system.tscn`) when dealing with node references (`GetNode`).
3. **GdUnit4**: For testing, follow the pattern in `tests/PlayerMovementTest.cs`. Use `ISceneRunner` to simulate inputs and await frames/milliseconds.
4. **Vector Operations**: Use Godot's built-in `Vector3` methods for movement logic. The project often uses `GlobalPosition` and `DirectionTo`.
5. **Boilerplate**: When creating new systems, mirror the `Init()` and `_PhysicsProcess` patterns found in existing systems like `DashSystem.cs` or `MantleSystem.cs`.