# AGENTS

This file gives AI coding agents the minimum project context needed to work safely and productively in this Unity repository.

## Project Snapshot

- Unity editor version: 6000.5.6f1 (see [ProjectSettings/ProjectVersion.txt](ProjectSettings/ProjectVersion.txt)).
- Project type: Unity 2D game remake (see [README.md](README.md)).
- Input stack: Unity Input System package is enabled (see [Packages/manifest.json](Packages/manifest.json)).

## First Checks Before Editing

1. Read [ProjectSettings/ProjectVersion.txt](ProjectSettings/ProjectVersion.txt) and target that editor version.
2. Read [Packages/manifest.json](Packages/manifest.json) for package-provided APIs before introducing new types.
3. Do not edit generated folders or files listed in [.gitignore](.gitignore).

## Linux Build and Test Commands

Set a Unity executable path first (prefer your local Unity Hub install):

```bash
UNITY="${UNITY:-/home/$USER/Unity/Hub/Editor/6000.5.6f1/Editor/Unity}"
PROJECT="/home/mse/Documentos/Unity Projects/Barrack Unity"
```

Open project:

```bash
"$UNITY" -projectPath "$PROJECT"
```

Batch build (Linux player):

```bash
"$UNITY" \
  -batchmode -quit \
  -projectPath "$PROJECT" \
  -buildTarget StandaloneLinux64 \
  -buildLinux64Player "$PROJECT/Build/Barrack.x86_64" \
  -logFile "$PROJECT/Logs/build.log"
```

EditMode tests:

```bash
"$UNITY" \
  -batchmode -quit \
  -projectPath "$PROJECT" \
  -runTests -testPlatform EditMode \
  -testResults "$PROJECT/test-results-editmode.xml" \
  -logFile "$PROJECT/Logs/tests-editmode.log"
```

PlayMode tests:

```bash
"$UNITY" \
  -batchmode -quit \
  -projectPath "$PROJECT" \
  -runTests -testPlatform PlayMode \
  -testResults "$PROJECT/test-results-playmode.xml" \
  -logFile "$PROJECT/Logs/tests-playmode.log"
```

Notes:
- If no tests exist yet, test runs may complete with zero tests.
- Do not treat [Assembly-CSharp.csproj](Assembly-CSharp.csproj) as source of truth; Unity regenerates it.

## Key Code Areas

- [Assets/Scripts/Game](Assets/Scripts/Game): gameplay loop, board, filling logic, UI, level flow.
- [Assets/Scripts/Game/Balls](Assets/Scripts/Game/Balls): ball hierarchy and shared physics behavior.
- [Assets/Scripts/Game/Player](Assets/Scripts/Game/Player): player movement, bars, laser behavior.
- [Assets/Scripts/Game/Spawners](Assets/Scripts/Game/Spawners): timed entity spawners.
- [Assets/Scripts/Game/Yummies](Assets/Scripts/Game/Yummies): collectibles and rewards.
- [Assets/Scripts/MainMenu](Assets/Scripts/MainMenu): menu flow and scene loading.
- [Assets/Scripts/Utils](Assets/Scripts/Utils): reusable helpers.

## Project Conventions

- One class per file; class name matches file name.
- No namespaces in project scripts.
- PascalCase for classes/methods; camelCase for fields/locals.
- Many Inspector-assigned dependencies are public fields.
- Lifecycle and coroutine patterns follow standard Unity `Start`, `Update`, `FixedUpdate`, and `IEnumerator` usage.
- Prefer existing Input System patterns over legacy `Input` APIs.

## Unity Safety Rules

- Preserve `.meta` files and GUIDs when moving/renaming assets.
- Treat scenes and prefabs as serialized contracts: renaming serialized fields, components, tags, or animator parameters can silently break references.
- Keep runtime string contracts in sync:
  - scene names (for example in [Assets/Scripts/MainMenu/MenuCallbackHolder.cs](Assets/Scripts/MainMenu/MenuCallbackHolder.cs)),
  - animator states/triggers/bools,
  - `Resources.Load` paths (for example in [Assets/Scripts/Game/GameBoard.cs](Assets/Scripts/Game/GameBoard.cs)).
- Current scene build order lives in [ProjectSettings/EditorBuildSettings.asset](ProjectSettings/EditorBuildSettings.asset).

## Common Failure Patterns (Seen In Prior Sessions)

- Missing Inspector references leading to `NullReferenceException` at runtime.
- Animator transition or trigger mismatches causing entities to remain in wrong states.
- Type/namespace mismatches when using package APIs.

When adding fields or animator parameters, include defensive null checks and keep names synchronized with scene/prefab/controller data.

## Useful References

- [README.md](README.md)
- [ProjectSettings/ProjectVersion.txt](ProjectSettings/ProjectVersion.txt)
- [Packages/manifest.json](Packages/manifest.json)
- [Packages/packages-lock.json](Packages/packages-lock.json)
- [ProjectSettings/EditorBuildSettings.asset](ProjectSettings/EditorBuildSettings.asset)
- [Assets/InputSystem_Actions.inputactions](Assets/InputSystem_Actions.inputactions)
- [.vscode/launch.json](.vscode/launch.json)
- [.gitignore](.gitignore)