# EinSoftworks Library Integration This document describes how all EinSoftworks utility libraries are integrated into the Voider project. ## Integrated Libraries All six EinSoftworks libraries are fully integrated and working together: ### ✅ EinSoftworks.Movement - **Location**: `Libraries/movement` - **Usage**: `FirstPersonController` for player movement - **Features**: Bunny hopping, air strafing, crouching, sprinting - **Integration**: TestPlayer.cs extends FirstPersonController ### ✅ EinSoftworks.Input - **Location**: `Libraries/input` - **Usage**: Input management via InputManager singleton - **Features**: Action-based input, device detection, remapping - **Integration**: Automatic via InputManager.Instance ### ✅ EinSoftworks.Events - **Location**: `Libraries/events` - **Usage**: Event system for decoupled communication - **Features**: MovementEvents, EventBus, state notifications - **Integration**: TestGameManager subscribes to movement events ### ✅ EinSoftworks.StateManagement - **Location**: `Libraries/state-management` - **Usage**: Movement state machine (idle, walking, airborne, crouching) - **Features**: State transitions, hierarchical states - **Integration**: Built into CharacterController ### ✅ EinSoftworks.Camera - **Location**: `Libraries/camera` - **Usage**: First-person camera with mouse look - **Features**: Camera effects, smooth transitions - **Integration**: CameraMount node in FirstPersonController ### ✅ EinSoftworks.Utilities - **Location**: `Libraries/utilities` - **Usage**: Math and physics helper functions - **Features**: Vector operations, physics calculations - **Integration**: Used internally by movement system ## Test Scene **Location**: `Scenes/Testing/LibraryTest.tscn` The test scene demonstrates all libraries working together in a fully functional first-person movement system. ### Components 1. **TestPlayer** (FirstPersonController) - Full movement with all advanced mechanics - Real-time UI updates - Event publishing 2. **TestGameManager** - Event subscription management - Game state coordination - Player reset functionality 3. **TestUI** - Live stats display - FPS counter - Control instructions 4. **Environment** - Floor, ramps, platforms - Testing geometry for all movement types ## Project Configuration ### Voider.csproj ```xml ``` ### project.godot Input actions configured: - `move_forward` (W) - `move_back` (S) - `move_left` (A) - `move_right` (D) - `jump` (Space) - `crouch` (Ctrl) - `sprint` (Shift) - `walk` (Ctrl) Autoload configured: - `EventManager` - Global event management ## Usage Examples ### Creating a Player Controller ```csharp using EinSoftworks.Movement; public partial class MyPlayer : FirstPersonController { public override void _Ready() { base._Ready(); Config = new MovementConfig { MaxSpeed = 320f, EnableBunnyHopping = true }; SubscribeToStateChanges(OnStateChanged); } private void OnStateChanged(MovementStateChangedEvent evt) { GD.Print($"State: {evt.StateName}"); } } ``` ### Subscribing to Events ```csharp using EinSoftworks.Movement; public override void _Ready() { MovementEvents.PlayerJumped += OnPlayerJumped; MovementEvents.SpeedChanged += OnSpeedChanged; } private void OnPlayerJumped() { PlayJumpSound(); } public override void _ExitTree() { MovementEvents.ClearAllSubscriptions(); } ``` ### Using Input Manager ```csharp using EinSoftworks.Input; private InputManager _input; public override void _Ready() { _input = InputManager.Instance; } public override void _Process(double delta) { if (_input.IsActionJustPressed("jump")) { Jump(); } } ``` ## Build Status ✅ **Build Successful** ``` Build succeeded. 0 Warning(s) 0 Error(s) ``` All libraries compile and integrate without errors. ## Testing To test the library integration: 1. Open the Voider project in Godot 2. Run the scene: `Scenes/Testing/LibraryTest.tscn` 3. Test movement mechanics: - Walk around with WASD - Jump with Space - Sprint with Shift - Crouch with Ctrl - Try bunny hopping (jump + strafe) - Test air strafing 4. Observe UI updates in real-time 5. Check console for event notifications ## Performance Target: 60+ FPS All libraries are optimized for real-time game performance. ## Future Integration These libraries can be used throughout the Voider project: - **Player Systems**: Use Movement + Input for all player characters - **Camera Systems**: Use Camera library for different camera modes - **UI Systems**: Use Events for UI updates and notifications - **AI Systems**: Use StateManagement for enemy AI - **Game Systems**: Use Events for game state management ## Troubleshooting ### Build Errors - Ensure all library references are correct in .csproj - Verify all libraries are in `../../libraries/` relative path - Run `dotnet restore` if needed ### Runtime Errors - Check that EventManager autoload is configured - Verify input actions are defined in project.godot - Ensure all using statements are present in scripts ### Movement Issues - Verify collision shapes are properly configured - Check that InputManager is available - Ensure CameraNode is set on the controller ## Documentation Each library has comprehensive documentation in its README: - `/libraries/movement/README.md` - `/libraries/input/README.md` - `/libraries/events/README.md` - `/libraries/state-management/README.md` - `/libraries/camera/README.md` - `/libraries/utilities/README.md` ## Support For issues or questions about library integration, refer to: 1. Individual library READMEs 2. Test scene implementation (`Scripts/Testing/`) 3. Library planning document (`documentation/planning/UTILITY_PLANNING.md`)