**Motivations:** - Aligner toute la documentation technique avec la nouvelle direction artistique isométrique (Réf IMG_20260303_170253). - Faciliter l'implémentation en ajoutant les contraintes techniques liées à la 2.5D (Z-index, Sprites 4 directions). **Root causes:** - Besoin de cohérence visuelle et technique sur l'ensemble du projet. **Correctifs:** - N/A **Evolutions:** - Ajout systématique de la section "Direction Artistique & Vue" dans `Annexes UX/UI` de tous les fichiers. - Enrichissement des modèles JSON avec coordonnées isométriques (`iso_x`, `iso_y`, `z_index`). - Précision des interactions (clic, survol) adaptées à la grille losange. - Conservation stricte de la structure existante (aucun titre supprimé). **Pages affectées:** - docs/specs/*
93 lines
3.1 KiB
Markdown
93 lines
3.1 KiB
Markdown
# 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.
|
|
|
|
|
|
# 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.
|