# Forge Garage Module

## Overview
The Garage module provides a comprehensive vehicle management system for the Forge client. It includes features for storing, spawning, and managing vehicles in a garage environment, with support for various vehicle types and states.

## Dependencies
- forge_client_main

## Authors
- J. Schmidt
- Creedcoder
- IDSolutions

## Features

### Garage System
1. **Garage Initialization** (`fnc_initGarage.sqf`)
   - Initializes the garage system
   - Sets up vehicle storage and management
   - Configures garage locations and spawn points
   - Manages vehicle state persistence

2. **Vehicle Management**
   - **Spawn Vehicle** (`fnc_spawnVehicle.sqf`)
     - Handles vehicle spawning from garage
     - Manages spawn locations and orientations
     - Preserves vehicle type information
     - Updates garage inventory

   - **Store Vehicle** (`fnc_storeVehicle.sqf`)
     - Manages vehicle storage in garage
     - Handles vehicle cleanup
     - Updates garage inventory
     - Preserves vehicle data

   - **Fetch Garage** (`fnc_fetchGarage.sqf`)
     - Retrieves garage vehicle information
     - Updates garage interface
     - Manages vehicle listings
     - Handles vehicle categorization

   - **Fetch Nearby** (`fnc_fetchNearby.sqf`)
     - Locates and manages nearby vehicles
     - Validates vehicle ownership
     - Handles vehicle state checks
     - Updates interface with nearby vehicles

3. **Vehicle Categories**
   - Cars (Light vehicles, transport)
   - Armor (Tanks, APCs)
   - Helicopters (All rotary-wing aircraft)
   - Planes (Fixed-wing aircraft)
   - Naval (Boats, ships)
   - Static (Weapons, emplacements)

4. **Vehicle States**
   - Available
   - In Use
   - Maintenance
   - Damaged
   - Fuel Status
   - Condition Tracking

### User Interface
1. **Garage Dialog**
   - Vehicle listing and management
   - Category filtering
   - Status indicators
   - Action buttons (Spawn/Store)
   - Vehicle details display

2. **Vehicle Information**
   - Vehicle name and type
   - Status indicators
   - Fuel level
   - Damage state
   - Maintenance status
   - Last used timestamp

3. **Controls**
   - Category filters
   - Vehicle actions
   - Status management
   - Quick access buttons

## Event Handlers
The module uses several event handlers for initialization and execution:
- `XEH_preInit.sqf`: Pre-initialization setup
- `XEH_postInit.sqf`: Post-initialization tasks
- `XEH_preStart.sqf`: Pre-start configuration
- `XEH_postInit_client.sqf`: Client-specific post-initialization
- `XEH_preInit_server.sqf`: Server-specific pre-initialization

## Usage
To use the garage module:
1. Ensure the module is properly loaded in your mission
2. Access the garage through the provided UI
3. Manage vehicles using the appropriate functions:
   ```sqf
   // Open garage interface
   [] call forge_client_garage_fnc_openGarage;
   
   // Store a vehicle
   [] call forge_client_garage_fnc_storeVehicle;
   
   // Spawn a vehicle
   [] call forge_client_garage_fnc_spawnVehicle;
   ```
4. Monitor vehicle status and location

## Debugging
Debug mode can be enabled by uncommenting the following in `script_component.hpp`:
```cpp
#define DEBUG_MODE_FULL
```

## Version Information
Version information is managed through the main Forge client system configuration.

## Technical Details
- Vehicle state persistence
- Category-based organization
- Status tracking system
- Location management
- Spawn point configuration
- Vehicle cleanup handling
- Interface synchronization
- Event system integration
- Error handling
- Debug support
- Data validation
- State management