silphius/app/react/components/dom/damage.jsx
2024-07-27 09:54:03 -05:00

44 lines
996 B
JavaScript

import {memo, useEffect, useState} from 'react';
import styles from './damage.module.css';
function Damage({
camera,
damage,
scale,
zIndex,
}) {
const [randomness] = useState({
radians: Math.random() * (Math.PI / 16) - (Math.PI / 32),
x: 1 * (Math.random() - 0.5),
y: Math.random(),
})
useEffect(() => {
const handle = setTimeout(() => {
damage.onClose();
}, 1_500);
return () => {
clearTimeout(handle);
};
}, [damage]);
const {amount, position} = damage;
return (
<div
className={styles.damage}
style={{
'--magnitude': Math.max(1, Math.floor(Math.log10(amount))),
'--positionX': `${position.x * scale - camera.x}px`,
'--positionY': `${position.y * scale - camera.y}px`,
'--randomnessX': randomness.x,
'--randomnessY': randomness.y,
rotate: `${randomness.radians}rad`,
zIndex,
}}
>
<p>{amount}</p>
</div>
);
}
export default memo(Damage);