3.7 KiB
3.7 KiB
title, type, weight
| title | type | weight |
|---|---|---|
| Camera Effects | docs | 6 |
The camera system provides screen effects like camera shake and view bobbing.
Package: com.hypixel.hytale.builtin.adventure.camera
Architecture
CameraPlugin
├── Effects
│ ├── CameraShakeEffect - Screen shake effect
│ └── CameraShake asset
├── View Bobbing
│ ├── ViewBobbing asset
│ └── ViewBobbingPacketGenerator
├── Interactions
│ └── CameraShakeInteraction
├── Systems
│ └── CameraEffectSystem
└── Commands
└── CameraEffectCommand
Camera Shake
CameraShakeEffect
Registered camera effect type:
getCodecRegistry(CameraEffect.CODEC).register(
"CameraShake",
CameraShakeEffect.class,
CameraShakeEffect.CODEC
);
CameraShake Asset
Camera shake definitions loaded from Camera/CameraShake/:
HytaleAssetStore.builder(String.class, CameraShake.class, new IndexedAssetMap())
.loadsBefore(CameraEffect.class)
.setPath("Camera/CameraShake")
.setKeyFunction(CameraShake::getId)
.setReplaceOnRemove(CameraShake::new)
.setPacketGenerator(new CameraShakePacketGenerator())
.build();
CameraShake Configuration
# Camera/CameraShake/explosion.json
{
"Id": "explosion",
"Intensity": 1.0,
"Duration": 0.5,
"Frequency": 10.0,
"FalloffDistance": 20.0
}
View Bobbing
Camera movement during player locomotion:
ViewBobbing Asset
HytaleAssetStore.builder(MovementType.class, ViewBobbing.class, new DefaultAssetMap())
.setPath("Camera/ViewBobbing")
.setKeyFunction(ViewBobbing::getId)
.setPacketGenerator(new ViewBobbingPacketGenerator())
.build();
Key indexed by MovementType enum for different movement states.
ViewBobbing Configuration
# Camera/ViewBobbing/walking.json
{
"Id": "WALKING",
"HorizontalAmplitude": 0.02,
"VerticalAmplitude": 0.01,
"Frequency": 2.0
}
Interactions
CameraShakeInteraction
Trigger camera shake from interactions:
getCodecRegistry(Interaction.CODEC).register(
"CameraShake",
CameraShakeInteraction.class,
CameraShakeInteraction.CODEC
);
Usage Example
# Item or block interaction
{
"Type": "CameraShake",
"ShakeId": "explosion",
"Intensity": 0.5
}
Systems
CameraEffectSystem
ECS system for processing camera effects:
getEntityStoreRegistry().registerSystem(new CameraEffectSystem());
Commands
CameraEffectCommand
Admin command for testing camera effects:
getCommandRegistry().registerCommand(new CameraEffectCommand());
Usage:
/cameraeffect <effect_id> [intensity] [duration]
API Usage
Applying Camera Shake
// Through interaction system
// Define in asset JSON and trigger via interaction
// Or programmatically through CameraEffectSystem
Getting Camera Assets
// Get camera shake asset
CameraShake shake = CameraShake.getAssetMap().getAsset("explosion");
// Get view bobbing for movement type
ViewBobbing bobbing = ViewBobbing.getAssetMap().getAsset(MovementType.WALKING);
Packet Generation
Both camera shake and view bobbing use packet generators for client sync:
public class CameraShakePacketGenerator implements PacketGenerator<CameraShake> {
// Generates network packets for camera shake
}
public class ViewBobbingPacketGenerator implements PacketGenerator<ViewBobbing> {
// Generates network packets for view bobbing
}
Asset Dependencies
Camera shake assets load before camera effects:
.loadsBefore(CameraEffect.class)
This ensures shake definitions are available when camera effects reference them.