# Agent de Sécurité

## 1. Définition
Employé responsable de l'ordre et de la sécurité dans le zoo. Il gère les visiteurs indisciplinés, prévient le vandalisme et peut intervenir en cas d'évasion d'animal (si fonctionnalité présente). Achetable avec des pièces.

## 2. Fonctions
*   **Surveillance :** Patrouille dans les allées pour rassurer les visiteurs (+attractivité).
*   **Intervention :** Expulse les visiteurs qui jettent des déchets ou embêtent les animaux.
*   **Protection :** Capture les animaux échappés (avec filet ou tranquillisant).
*   **Dissuasion :** Sa simple présence réduit la probabilité d'actes de vandalisme dans un rayon donné.

## 3. Icone
*   **Représentation :** Écusson ou Casquette de police.
*   **Couleur dominante :** Bleu marine et Jaune.

## 4. Interactions
*   **Recrutement :** Menu "Employés", coût en pièces.
*   **Ordre :** Le joueur peut cliquer sur une zone pour envoyer l'agent en priorité.
*   **Licenciement :** Possible via le menu employé.

## 5. Annexes Techniques

### Données (JSON)
```json
{
  "employee_id": "security_05",
  "type": "agent_securite",
  "name": "Sgt. Pepper",
  "created_at": "timestamp",
  "salary": 40,
  "hire_cost": 400,
  "state": "enum (PATROL, CHASE, REST, INTERACT)",
  "position": { "x": 12.5, "y": 14.0 },
  "target_position": { "x": 20, "y": 10 },
  "stats": {
    "intimidation": 10,
    "speed": 1.1,
    "stamina": 100
  },
  "iso_x": "integer",
  "iso_y": "integer",
  "z_index": "integer"
}
```

### Règles Métier
*   **Rayon d'action :** 5 cases autour de lui.
*   **Fatigue :** Doit se reposer au Staff Room toutes les 4h in-game.
*   **Priorité :** Animal échappé > Vandalism > Déchets > Patrouille.

### Algorithme de Comportement (FSM)
```python
def update_security_agent(agent, world):
    if agent.state == "REST":
        agent.stamina += 5
        if agent.stamina >= 100:
            agent.state = "PATROL"
        return

    # Scan des menaces
    threat = scan_for_threats(agent.position, radius=10)
    
    if threat:
        agent.state = "CHASE"
        agent.target = threat.position
        move_towards(agent, threat.position, agent.speed * 1.5) # Course
        if distance(agent, threat) < 1:
            neutralize(threat)
    else:
        agent.state = "PATROL"
        patrol_randomly(agent)
```

## 6. Annexes UX/UI
*   **Visuel Carte :** Personnage en uniforme bleu.
*   **Animation :**
    *   **Marche :** Calme, mains dans le dos.
    *   **Course :** Rapide, sifflet à la bouche.
    *   **Action :** Sort un carnet (amende) ou un filet (animal).
*   **Feedback :** Les visiteurs s'écartent sur son passage.
*   **Vue Isométrique :** Sprite 8 directions pour des déplacements fluides.

## Affichage contextuel (modules)
L’agent de sécurité sert de personnage contextuel lors des incidents d’ordre/sécurité.

### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `VANDALISM_ALERT` / `VANDALISM_DETECTED` | menace détectée | bulle “Incident” + CTA “Envoyer sécurité” |
| `ESCAPE_ALERT` / `ESCAPE_DETECTED` | évasion détectée | bulle “Évasion” + CTA focus zone |
| `ZONE_BLOCKED` | zone bloquée | message explicite + explication détour |


# Annexes UX/UI

## 0. Direction Artistique & Vue
*   **Vue** : Isométrique (2.5D).
*   **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
*   **Sprites** : 4 directions.
*   **Interactions** :
    *   **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
    *   **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.


## Définition

| Champ | Valeur |
|---|---|
| Entité | Employé “Agent de sécurité” |
| Rôle | Maintenir l’ordre, réduire vandalisme/incidents, gérer visiteurs indisciplinés, intervenir (si feature) sur évasions. |
| IA | FSM/priority queue : Évasion > Vandalisme > Déchets > Patrouille. |
| Vue | Isométrique 2.5D, sprite 4 directions (le bloc “8 directions” existant est conservé comme option d’animation), hitbox base-sprite. |

## Fonctions (tableau détaillé)

| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Patrouille | Tick agent | routes, densité | présence | Choisit chemins (visiteurs attirés chemins) | Event `SECURITY_PATROL_TICK` |
| Dissuasion vandalisme | proximité incident | `intimidation`, rayon | proba vandalisme - | Effet plafonné ; dépend densité | Event `SECURITY_DETERRENCE_APPLIED` |
| Intervention visiteur | visiteur “indiscipliné” | target | expulsion/stop | Temps action ; cooldown | Event `SECURITY_INTERACT_START/END` |
| Gestion évasion (option) | animal `ESCAPED` | animal pos | capture | Nécessite équipement (filet) ou tranquillisant | Event `SECURITY_CAPTURE` |
| Gestion fatigue | temps actif | stamina | REST | Repos staff room obligatoire | Event `SECURITY_REST_START/END` |

## Icone de base

| Élément | Spécification |
|---|---|
| Représentation | Écusson / casquette |
| Couleur dominante | Bleu marine / jaune |
| Variantes | `icon_security_badge.png`, `icon_security_cap.png` |
| États | Badge “alerte” (rouge), “patrouille” (pas), “recherche” (loupe) |

## Interactions (tableau détaillé)

| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Recruter | Action | coins ≥ `hire_cost` | Menu Employés → Sécurité → Confirmer | agent créé | `INSUFFICIENT_FUNDS`, `EMPLOYEE_CAP_REACHED` |
| Envoyer en priorité | Action | zone/cible valide | clic carte → “Envoyer sécurité” | target prioritaire | `NO_SECURITY_AVAILABLE`, `INVALID_TARGET` |
| Licencier | Action | pas en capture verrouillée | panel agent → “Licencier” | suppression | `ACTION_BLOCKED` |
| Inspecter incidents | Consultation | - | panel → incidents | liste + ETA | - |
| Activer mode “strict” | Configuration | upgrade / coût | toggle | intervention + mais visiteurs stress + | `LOCKED_FEATURE` |

## Annexes Techniques

### 1. Données et États (tableau détaillé)

| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `employee_id` | string | `security_05` | DB | unique |
| `type` | enum | `agent_securite` | DB | constante |
| `created_at` | timestamp | - | DB | - |
| `salary` | int | 40 | config | coins/jour |
| `hire_cost` | int | 400 | config | one-shot |
| `state` | enum | `PATROL|CHASE|REST|INTERACT` | runtime | FSM |
| `position` | object | `{x,y}` | runtime | monde |
| `target_position` | object | `{x,y}` | runtime | chase |
| `stats.intimidation` | int | 10 | DB | [1..100] |
| `stats.speed` | float | 1.1 | DB | déplacement |
| `stats.stamina` | int | 100 | runtime | 0..100 |
| `radius` | int | 5 | config | action |
| `grid` | object | `{x,y}` | runtime | position grille zoo |
| `iso_x/iso_y` | int | - | rendu | projection |
| `z_index` | int | - | rendu | profondeur |
| `hitbox` | enum | `base_sprite` | rendu | click base |

#### Caractéristiques Initiales (tableau détaillé)

| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon action | 5 | cases | règle existante |
| Vitesse | 1.1 | coef | - |
| Stamina max | 100 | points | - |
| Temps repos | 15 | min in-game | par cycle repos |
| Priorité | 4 niveaux | - | évasion > vandalisme > déchets > patrouille |

#### Scores Initiaux (tableau détaillé)

| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Incidents résolus/jour | 0 | 0..∞ | satisfaction + |
| Vandalisme évité | 0 | 0..∞ | réputation + |
| Temps réponse moyen | 0 | 0..∞ | performance |

### 2. Cycles de Vie et Apparition (tableau détaillé)

| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | embauche | coins | entité | `PATROL` |
| Chase | menace détectée | target | déplacement | sprint consomme stamina |
| Interact | contact menace | menace | neutralisée | cooldown |
| Rest | stamina bas | temps | stamina + | staff room |
| Disparition | licenciement | - | suppression | stop chase |

#### Conditions d'Apparition (tableau détaillé)

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat | coins ≥ `hire_cost` | vrai | création |

#### Conditions de Disparition (tableau détaillé)

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Licenciement | action joueur | vrai | suppression |
| Zoo supprimé | - | vrai | suppression |

#### Hérédité (tableau détaillé)

| Élément | Hérité | Règle |
|---|---|---|
| Stats | Oui | persistées |
| Stamina | Non | reset quotidien |

### 3. Impacts Environnementaux

#### Impact Température (tableau détaillé)

| Température | Effet | Condition |
|---|---|---|
| Extrême | patrouille - | fatigue + |
| Tempérée | neutre | - |

#### Impact Milieu (Biome) (tableau détaillé)

| Biome | Effet | Notes |
|---|---|---|
| Chemins | déplacement + | patrouille efficace |
| Pont étroit | congestion | éviter chase sur pont |

#### Impact Saisons (tableau détaillé)

| Saison | Effet | Modificateur |
|---|---|---|
| Été | foule + | incidents + |
| Hiver | affluence - | incidents - |

#### Impact Heure / Jour-Nuit (tableau détaillé)

| Période | Effet | Règle |
|---|---|---|
| Jour | patrouille | - |
| Nuit | sécurité renforcée | incidents peur + si pas d’éclairage |

### 4. Impacts Biologiques et Sociaux

#### Impact Reproduction (tableau détaillé)

| Facteur | Effet sur taux | Condition |
|---|---|---|
| Bruit intervention | - | près enclos |

#### Impact Mort (tableau détaillé)

| Cas | Effet | Condition |
|---|---|---|
| Évasion non gérée | risque mort + | collisions/ville |

#### Impact Nourriture (tableau détaillé)

| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | agent n’alimente pas |

#### Impact Attractivité(Visiteurs (tableau détaillé)

| État | Effet | Condition |
|---|---|---|
| Présence sécurité | confort + | rayon action |
| Interventions fréquentes | confort - | stress visiteurs |

#### Impact Attractivité Animaux) (tableau détaillé)

| Action | Effet animaux | Condition |
|---|---|---|
| Capture évasion | stress + puis - | fin incident |

#### Impact Valeur (tableau détaillé)

| Facteur | Variation | Condition |
|---|---:|---|
| Zoo sûr | + | réputation/flux visiteurs |

### 5. Impacts Logistiques et Économiques

#### Vitesse (Camion) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| Livraison équipements | + | si feature |

#### Vitesse (Nurserie) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |

#### Vitesse (Accueil) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| Gestion sortie | + | si foule panique |

#### Vitesse (Recherche) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| Tech caméras | incidents - | si débloqué |

#### Vitesse (Labo) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |

#### Vitesse (Visite) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| Déplacement visiteurs | - | si zones bloquées |

#### Dépenses (Billeterie) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

#### Dépenses (Boutiques) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Vente souvenirs “police” | revenu + | coins | option |

#### Dépenses (Visiteurs) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Remboursement peur | -coins | coins | incidents peur |

#### Dépenses (Employés) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Salaire | 40 | coins/jour | actif |

#### Dépenses (Boutiques) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |

#### Dépenses (Nurseries) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

#### Dépenses (Nourriture) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

#### Dépenses (Acceuil des animaux) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| dégâts évasion | 100 | coins | réparation |

#### Dépenses (Camion) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| capture matériel | 50 | coins | filet |

#### Trajet Visiteurs

##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | sécurité augmente confiance |

##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Incident | Enclos | évasion | zone bloquée |

##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteurs | Boutique | after incident | achats - |

##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Panique | sortie | peur | départ massif |

### 6. Événements

#### Événements du Jeu  (tableau détaillé)

| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `VANDALISM_DETECTED` | scan | pos | chase |
| `ESCAPE_DETECTED` | animal escaped | animal_id | chase |

#### Événements du Carte (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `SECURITY_CHASE` | menace | animation course |

#### Événements du Zoo (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_BLOCKED` | intervention | pathing détour |

#### Événements du Ville / Visiteur (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_CALMED` | sécurité proche | satisfaction + |

#### Événements du Visiteur (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_EXPELLED` | interaction | sortie immédiate |

#### Événements du Joueur (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_SEND_SECURITY` | clic zone | priorité chase |

### 7. Progression

#### Tableau des Upgrades (tableau détaillé)

| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | patrouille base | - |
| 2 | 1500 | intimidation +2 | dissuasion |
| 3 | 3000 | speed +0.1 | réponse |
| 4 | 6000 | équipement capture | gestion évasion |

### 8. Logique et Interfaces 

#### Pseudo-code Impacts (tableau détaillé)

| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `scan_for_threats` | position, radius | threat | existant |
| `neutralize` | threat | resolved | expulsion/capture |
| `apply_deterrence` | intimidation | proba- | clamp |

#### Messages d'Infos / Alerte (tableau détaillé)

| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SECURITY_BUSY` | Warning | "Agent occupé." | chase/interact |
| `ESCAPE_ALERT` | Alerte | "Évasion détectée !" | animal escaped |
| `VANDALISM_ALERT` | Warning | "Vandalisme !" | incident |

## Annexes UX/UI 

### 1. Expérience Utilisateur (UX)

#### Description UX (tableau détaillé)

| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Envoyer agent | résoudre incident | localisation | action contextuelle sur incident |
| Voir sécurité | confiance | info | badges sur carte |

#### Description UI (tableau détaillé)

| Composant | Contenu | États |
|---|---|---|
| Panel agent | stamina, état, target | patrol/chase/rest |
| Badge incident | type | priorité |

#### Emplacement (tableau détaillé)

| Zone UI | Position | Notes |
|---|---|---|
| Carte | sprite agent | sélection base |
| Incidents | bulles | clic direct |

#### Intégration (tableau détaillé)

| Intégration | Contrat | Notes |
|---|---|---|
| Pathfinding | zones bloquées | pas de fallback |
| Incidents visiteurs | expulsion | - |

#### Navigation (tableau détaillé)

| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir panel | clic agent | panel |
| Envoyer | clic incident | target |

#### Événements (tableau détaillé)

| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SECURITY_PANEL` | clic | panel |
| `CLICK_SEND_SECURITY` | clic zone | send |

#### Assets Skinables

##### Musiques (tableau détaillé)

| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `security_loop.mp3` | ambiance | loop | discret |

##### Sons (tableau détaillé)

| Asset | Usage | Volume |
|---|---|---|
| `whistle.mp3` | chase | moyen |
| `ui_alert.mp3` | alerte | moyen |

##### Graphiques (tableau détaillé)

| Asset | Usage | Contraintes |
|---|---|---|
| `security_sprite_[dir].png` | sprite | 4 dirs |
| `fx_alert_ring.png` | FX | overlay |

##### Images (tableau détaillé)

| Asset | Usage |
|---|---|
| `icon_security_badge.png` | icône |
| `portrait_security.png` | panel |

##### Vidéos (tableau détaillé)

| Asset | Usage | Durée |
|---|---|---:|
| `security_alert.webm` | popup | 0.9s |

##### Animations (tableau détaillé)

| Animation | Déclencheur | Notes |
|---|---|---|
| ring alerte | incident | loop |
| dash | chase | burst |

##### Couleurs (tableau détaillé)

| Token | Valeur | Usage |
|---|---|---|
| `security_primary` | #1B3B6F | UI |
| `security_accent` | #F1C40F | badge |

##### Textes (tableau détaillé)

| Clé | FR | EN |
|---|---|---|
| `security.send` | Envoyer | Send |
| `security.busy` | Occupé | Busy |

##### Formes (tableau détaillé)

| Élément | Forme | Notes |
|---|---|---|
| Badge alerte | triangle arrondi | lisible |
| Panel | bottom sheet | standard |
