# Advanced Wars

## clang-tidy

- Um `clang-tidy` für eine einzelne Datei (z.B. `main.cpp`) auszuführen:

    `clang-tidy src/game/main.cpp -header-filter="src/game/main\.cpp" -p build/`

- Um `clang-tidy` für das ganze Projekt auszuführen und die Warnings in die Datei `clang-tidy-warnings.txt` zu schreiben:

    `find src/game -name '*.cpp' -o -name '*.hpp' | xargs clang-tidy -header-filter="src/game/.*" -p build/ 1> clang-tidy-warnings.txt`

## Build-Anleitung

### Linux/MacOS

1. Repository klonen:

    ```bash
    git clone https://github.com/username/project.git
    cd project
    ```

2. Build-Verzeichnis erstellen:

    ```bash
    mkdir build && cd build
    ```

3. CMake konfigurieren und Build ausführen:
    ```bash
    cmake ..
    cmake --build .
    ```

### Windows

1. Repository klonen:

    ```powershell
    git clone https://github.com/username/project.git
    cd project
    ```

2. Build-Verzeichnis erstellen:

    ```powershell
    mkdir build
    cd build
    ```

3. CMake konfigurieren und Build ausführen:
    ```powershell
    cmake ..
    cmake --build . --config Release
    ```

### Visual Studio

1. Repository klonen
2. Visual Studio öffnen
3. "Ordner öffnen" wählen und zum Projektverzeichnis navigieren
4. Visual Studio erkennt automatisch das CMake-Projekt
5. Build über "Build All" ausführen

#### Falls Syntax errors

1. Erstelle .vscode/c_cpp_properties.json Datei
2. Füge die folgende JSON so oder so ähnlich ein:

```json
{
	"configurations": [
		{
			"name": "Fedora",
			"includePath": ["/usr/include", "/usr/include/SDL2"],
			"defines": [],
			"intelliSenseMode": "linux-gcc-x64",
			"compilerPath": "/usr/bin/gcc",
			"cStandard": "c17",
			"cppStandard": "c++17"
		}
	],
	"version": 4
}
```

## Build-Optionen

CMake kann mit verschiedenen Optionen konfiguriert werden:

```bash
cmake .. -DCMAKE_BUILD_TYPE=Release    # Release-Build
cmake .. -DCMAKE_BUILD_TYPE=Debug      # Debug-Build
```

## Prerequisites for Leveleditor

- QT 6: `sudo apt install qt6-base-dev`

## Authors

Max Körschen:

- Units.cpp/hpp (Combat and movement)
- Helpmenu.cpp/hpp
- UnitInfoMenu.cpp/hpp
- RecruitingMenu.cpp/hpp and Recruiting interactions with level-class
- Building.cpp/hpp (interactions and logic)
- level.cpp/hpp (eventhandling for units and buildings, movement, attack etc)
- debugging in CombatEngine.cpp/hpp, Bullets.cpp/hpp

Lorenz Diel:

- Units.cpp/hpp
- UnitInfoMenu.cpp/hpp
- level.cpp/hpp
- Config.cpp/hpp
- Weapon.cpp/hpp
- CombatEngine.cpp/hpp

David Maul:

- Engine.cpp/hpp
- Scene.hpp
- Spritesheet.cpp/hpp
- Tile.cpp/hpp
- Window.cpp/hpp
- Effect.cpp/hpp
- Level.cpp/hpp
- main.cpp

Frederik Keens:

- main.cpp
- Player.cpp/hpp
- Level.cpp/hpp
- Building.cpp/hpp
- Unit.cpp/hpp
- Tile.cpp/hpp
- Spritesheet.cpp/hpp
- Scene.hpp
- Engine.cpp/hpp

David Hermann:

- Projektmanagement (GitLab Issues, Milestones, etc.)
- Projektstruktur (Ordnerhierarchien)
- Refactoring der Architektur für bessere Modularität, Memory Management und Box2d Integration
- Spezifische Arbeit:
    - CMakeLists.txt
    - CombatEngine.cpp/hpp (refactoring, box2d integration)
    - GameManager.cpp/hpp
    - Unit.cpp/hpp (refactoring, box2d integration)
    - Bullet.cpp/hpp
    - Level.cpp/hpp (refactoring, box2d integration)
    - PhysicsBody.cpp/hpp (box2d integration)
    - PhysicsEngine.cpp/hpp (box2d integration)
    - Menu.cpp/hpp (Main Menu UI)
    - ContextMenu.cpp/hpp (Context Menu)
    - Dimensions.hpp