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-26 04:18:46 -05:00
|
|
|
import Emitter from './emitter.jsx';
|
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(
|
2024-06-21 04:50:17 -05:00
|
|
|
<Container
|
|
|
|
key={id}
|
|
|
|
>
|
2024-06-26 04:18:46 -05:00
|
|
|
{entity.Sprite && (
|
|
|
|
<Sprite
|
|
|
|
entity={entity}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
{entity.Emitter && (
|
|
|
|
<Emitter
|
|
|
|
entity={entity}
|
|
|
|
/>
|
|
|
|
)}
|
2024-06-25 08:54:19 -05:00
|
|
|
{debug && (
|
|
|
|
<Crosshair x={entity.Position.x} y={entity.Position.y} />
|
|
|
|
)}
|
2024-06-21 04:50:17 -05:00
|
|
|
</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
|
|
|
)
|
|
|
|
}
|