2024-07-01 18:12:53 -05:00
|
|
|
import {AdjustmentFilter} from '@pixi/filter-adjustment';
|
|
|
|
import {GlowFilter} from '@pixi/filter-glow';
|
2024-06-27 13:57:18 -05:00
|
|
|
import {Container} from '@pixi/react';
|
2024-07-01 18:12:53 -05:00
|
|
|
import {useEffect, useState} from 'react';
|
|
|
|
|
|
|
|
import {useEcs} from '@/context/ecs.js';
|
|
|
|
import {useMainEntity} from '@/context/main-entity.js';
|
2024-06-27 13:57:18 -05:00
|
|
|
|
2024-06-27 02:57:28 -05:00
|
|
|
import Entity from './entity.jsx';
|
2024-06-18 07:24:20 -05:00
|
|
|
|
2024-06-24 09:19:24 -05:00
|
|
|
export default function Entities({entities}) {
|
2024-07-01 18:12:53 -05:00
|
|
|
const [ecs] = useEcs();
|
|
|
|
const [mainEntity] = useMainEntity();
|
|
|
|
const [radians, setRadians] = useState(0);
|
|
|
|
const [willInteractWith, setWillInteractWith] = useState(0);
|
|
|
|
const [filters] = useState([new AdjustmentFilter(), new GlowFilter({color: 0x0})]);
|
|
|
|
const pulse = (Math.cos(radians) + 1) * 0.5;
|
|
|
|
filters[0].brightness = (pulse * 0.75) + 1;
|
|
|
|
filters[1].outerStrength = pulse * 0.5;
|
|
|
|
useEffect(() => {
|
|
|
|
setRadians(0);
|
|
|
|
const handle = setInterval(() => {
|
|
|
|
setRadians((radians) => (radians + 0.1) % (Math.PI * 2))
|
|
|
|
}, 50);
|
|
|
|
return () => {
|
|
|
|
clearInterval(handle);
|
|
|
|
};
|
|
|
|
}, [willInteractWith]);
|
|
|
|
useEffect(() => {
|
|
|
|
if (!mainEntity) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
setWillInteractWith(ecs.get(mainEntity).Interacts.willInteractWith);
|
|
|
|
}, [entities, ecs, mainEntity]);
|
2024-06-18 07:24:20 -05:00
|
|
|
const renderables = [];
|
2024-06-11 18:42:48 -05:00
|
|
|
for (const id in entities) {
|
2024-07-02 12:00:12 -05:00
|
|
|
if ('1' === id) {
|
|
|
|
continue;
|
|
|
|
}
|
2024-07-01 18:12:53 -05:00
|
|
|
const isHighlightedInteraction = id == willInteractWith;
|
2024-06-18 07:24:20 -05:00
|
|
|
renderables.push(
|
2024-06-27 02:57:28 -05:00
|
|
|
<Entity
|
2024-07-01 18:12:53 -05:00
|
|
|
filters={isHighlightedInteraction ? filters : []}
|
2024-06-27 02:57:28 -05:00
|
|
|
entity={entities[id]}
|
2024-06-21 04:50:17 -05:00
|
|
|
key={id}
|
2024-06-27 02:57:28 -05:00
|
|
|
/>
|
2024-06-11 18:42:48 -05:00
|
|
|
);
|
|
|
|
}
|
2024-06-27 13:57:18 -05:00
|
|
|
return (
|
|
|
|
<Container
|
|
|
|
sortableChildren
|
|
|
|
>
|
|
|
|
{renderables}
|
|
|
|
</Container>
|
|
|
|
);
|
2024-06-11 18:42:48 -05:00
|
|
|
}
|