import React, { useContext, useEffect, useRef } from "react";
import { UseGameStateContext } from "../contexts";
import { PixiReactBridge } from "../pixi/PixiReactBridge";
import { WindowState } from "../data/GameState";
export function PixiWrapperComponent(props: {
application: PixiReactBridge,
windowState: WindowState,
fireBatchedSetWindowState: () => void,
}) {
const { application, windowState } = props;
const container = useRef<HTMLDivElement>(null);
const [gameState, gameStateUpdaters, fireBatchedSetGameState] = useContext(UseGameStateContext);
const fireBatch = () => {
fireBatchedSetGameState();
props.fireBatchedSetWindowState();
}
useEffect(() => {
// this block only triggers if a new application instance is created.
// first remove old application
// const oldLength = container.current!.childNodes.length;
for (let i = container.current!.childNodes.length - 1; i >= 0; i--) {
container.current!.removeChild(container.current!.childNodes[i]);
}
// if (oldLength != 0) {
// return;
// }
// add the application
container.current!.appendChild(application.app.view);
}, [application]);
// const prevRef = useRef<Const<GameState>>();
// useEffect(() => {
// prevRef.current = gameState;
// });
// const prevGameState = prevRef.current;
// Trigger component render on first load and also when game state is updated
application.rerender({
args: {
fireBatch,
isSecondConstructorCall: false,
},
updaters: gameStateUpdaters,
windowState,
gameState,
})
return (
<>
<div ref={container} />
</>
);
}