Constconst [injuries, setInjuries] = useState<Injury[]>([]);
// On hit event
const handleHit = (region: BodyRegion, position: [number, number, number], type: InjuryType) => {
const existingInjury = injuries.find(i =>
i.region === region &&
distance(i.position, position) < 0.2
);
if (existingInjury) {
// Progressive bruising - increase hit count
setInjuries(prev => prev.map(i =>
i.id === existingInjury.id
? { ...i, hitCount: i.hitCount + 1, severity: Math.min(1.0, i.severity + 0.2) }
: i
));
} else {
// New injury
setInjuries([...injuries, {
id: generateId(),
region,
type,
position,
severity: 0.5,
hitCount: 1,
timestamp: Date.now(),
}]);
}
};
<TraumaOverlay3D
playerId={playerId}
health={playerHealth}
injuries={injuries}
characterPosition={characterPosition}
isMobile={isMobile}
showFractures={true}
/>
TraumaOverlay3D Component
Visualizes progressive combat trauma including bruising, cuts, and bone damage on 3D character models. Injuries persist across rounds and darken with repeated hits to the same body region.