silphius/app/react-components/entities.jsx

57 lines
1.2 KiB
React
Raw Normal View History

2024-06-18 07:24:20 -05:00
import {Container, Graphics} from '@pixi/react';
import {useCallback} from 'react';
2024-06-12 14:31:12 -05:00
2024-06-25 08:54:19 -05:00
import {useDebug} from '@/context/debug.js';
2024-06-12 14:31:12 -05:00
import Sprite from './sprite.jsx';
2024-06-11 18:42:48 -05:00
2024-06-18 07:24:20 -05:00
function Crosshair({x, y}) {
const draw = useCallback((g) => {
g.clear();
2024-06-24 09:01:30 -05:00
g.lineStyle(1, 0x000000);
2024-06-18 07:24:20 -05:00
g.moveTo(-5, 0);
g.lineTo(5, 0);
g.moveTo(0, -5);
g.lineTo(0, 5);
2024-06-24 09:01:30 -05:00
g.lineStyle(0.5, 0xffffff);
g.moveTo(-5, 0);
g.lineTo(5, 0);
g.moveTo(0, -5);
g.lineTo(0, 5);
g.lineStyle(1, 0x000000);
g.drawCircle(0, 0, 3);
g.lineStyle(0.5, 0xffffff);
2024-06-18 07:24:20 -05:00
g.drawCircle(0, 0, 3);
}, []);
return (
<Graphics draw={draw} x={x} y={y} />
);
}
2024-06-24 09:19:24 -05:00
export default function Entities({entities}) {
2024-06-25 08:54:19 -05:00
const [debug] = useDebug();
2024-06-18 07:24:20 -05:00
const renderables = [];
2024-06-11 18:42:48 -05:00
for (const id in entities) {
const entity = entities[id];
2024-06-25 01:46:07 -05:00
if (!entity || !entity.Position || !entity.Sprite) {
2024-06-12 13:19:16 -05:00
continue;
}
2024-06-18 07:24:20 -05:00
renderables.push(
<Container
key={id}
>
2024-06-18 07:24:20 -05:00
<Sprite
entity={entity}
/>
2024-06-25 08:54:19 -05:00
{debug && (
<Crosshair x={entity.Position.x} y={entity.Position.y} />
)}
</Container>
2024-06-11 18:42:48 -05:00
);
}
return (
2024-06-24 09:19:24 -05:00
<>
2024-06-18 07:24:20 -05:00
{renderables}
2024-06-24 09:19:24 -05:00
</>
2024-06-11 18:42:48 -05:00
)
}