---
title: Effets Camera
type: docs
weight: 6
---

Le systeme de camera fournit des effets d'ecran comme les tremblements et le balancement de vue.

**Package:** `com.hypixel.hytale.builtin.adventure.camera`

## Architecture

```
CameraPlugin
├── Effets
│   ├── CameraShakeEffect - Effet de tremblement
│   └── CameraShake asset
├── Balancement de Vue
│   ├── ViewBobbing asset
│   └── ViewBobbingPacketGenerator
├── Interactions
│   └── CameraShakeInteraction
├── Systemes
│   └── CameraEffectSystem
└── Commandes
    └── CameraEffectCommand
```

## Tremblement de Camera

### CameraShakeEffect

Type d'effet camera enregistre:

```java
getCodecRegistry(CameraEffect.CODEC).register(
    "CameraShake",
    CameraShakeEffect.class,
    CameraShakeEffect.CODEC
);
```

### Asset CameraShake

Definitions de tremblements chargees depuis `Camera/CameraShake/`:

```java
HytaleAssetStore.builder(String.class, CameraShake.class, new IndexedAssetMap())
    .loadsBefore(CameraEffect.class)
    .setPath("Camera/CameraShake")
    .setKeyFunction(CameraShake::getId)
    .setReplaceOnRemove(CameraShake::new)
    .setPacketGenerator(new CameraShakePacketGenerator())
    .build();
```

### Configuration CameraShake

```yaml
# Camera/CameraShake/explosion.json
{
  "Id": "explosion",
  "Intensity": 1.0,
  "Duration": 0.5,
  "Frequency": 10.0,
  "FalloffDistance": 20.0
}
```

## Balancement de Vue

Mouvement de camera pendant la locomotion du joueur:

### Asset ViewBobbing

```java
HytaleAssetStore.builder(MovementType.class, ViewBobbing.class, new DefaultAssetMap())
    .setPath("Camera/ViewBobbing")
    .setKeyFunction(ViewBobbing::getId)
    .setPacketGenerator(new ViewBobbingPacketGenerator())
    .build();
```

Indexe par enum `MovementType` pour differents etats de mouvement.

### Configuration ViewBobbing

```yaml
# Camera/ViewBobbing/walking.json
{
  "Id": "WALKING",
  "HorizontalAmplitude": 0.02,
  "VerticalAmplitude": 0.01,
  "Frequency": 2.0
}
```

## Interactions

### CameraShakeInteraction

Declencher un tremblement depuis les interactions:

```java
getCodecRegistry(Interaction.CODEC).register(
    "CameraShake",
    CameraShakeInteraction.class,
    CameraShakeInteraction.CODEC
);
```

### Exemple d'Utilisation

```yaml
# Interaction d'item ou bloc
{
  "Type": "CameraShake",
  "ShakeId": "explosion",
  "Intensity": 0.5
}
```

## Systemes

### CameraEffectSystem

Systeme ECS pour traiter les effets camera:

```java
getEntityStoreRegistry().registerSystem(new CameraEffectSystem());
```

## Commandes

### CameraEffectCommand

Commande admin pour tester les effets camera:

```java
getCommandRegistry().registerCommand(new CameraEffectCommand());
```

Utilisation:
```
/cameraeffect <effect_id> [intensity] [duration]
```

## Utilisation de l'API

### Appliquer un Tremblement

```java
// Via le systeme d'interaction
// Definir dans JSON asset et declencher via interaction

// Ou programmatiquement via CameraEffectSystem
```

### Obtenir les Assets Camera

```java
// Obtenir asset de tremblement
CameraShake shake = CameraShake.getAssetMap().getAsset("explosion");

// Obtenir balancement pour type de mouvement
ViewBobbing bobbing = ViewBobbing.getAssetMap().getAsset(MovementType.WALKING);
```

## Generation de Paquets

Les tremblements et balancements utilisent des generateurs de paquets pour sync client:

```java
public class CameraShakePacketGenerator implements PacketGenerator<CameraShake> {
    // Genere paquets reseau pour tremblement
}

public class ViewBobbingPacketGenerator implements PacketGenerator<ViewBobbing> {
    // Genere paquets reseau pour balancement
}
```

## Dependances d'Assets

Les assets de tremblement chargent avant les effets camera:

```java
.loadsBefore(CameraEffect.class)
```

Cela assure que les definitions de tremblement sont disponibles quand les effets camera les referencent.
