refactor: tidy
This commit is contained in:
parent
b243522f4b
commit
db223e6d23
|
@ -11,51 +11,55 @@ import {createLoop, destroyLoop} from '@avocado/timing';
|
|||
import {RoomView} from '@avocado/topdown';
|
||||
import {useRoom, useSelfEntity} from '@humus/core';
|
||||
|
||||
const renderer = new Renderer();
|
||||
const ticker = () => {};
|
||||
|
||||
const RoomStage = () => {
|
||||
const selfEntity = useSelfEntity();
|
||||
const [container] = useState(new Container());
|
||||
const [VIEWPORT] = useState([320, 180]);
|
||||
const halfViewport = Vector.scale(VIEWPORT, 0.5);
|
||||
const [renderer] = useState(new Renderer(VIEWPORT));
|
||||
const [viewport] = useState([320, 180]);
|
||||
const room = useRoom();
|
||||
useEffect(() => {
|
||||
container.removeAllChildren();
|
||||
if (renderer && room) {
|
||||
const roomView = new RoomView(room, renderer);
|
||||
container.addChild(roomView);
|
||||
[container.x, container.y] = halfViewport;
|
||||
}
|
||||
}, [container, halfViewport, renderer, room]);
|
||||
[container.x, container.y] = Vector.scale(viewport, 0.5);
|
||||
}, [container, viewport]);
|
||||
useEffect(() => {
|
||||
if (!room || !selfEntity) {
|
||||
if (!room) {
|
||||
return undefined;
|
||||
}
|
||||
selfEntity.camera.realPosition = selfEntity.camera.position;
|
||||
const roomView = new RoomView(room, renderer);
|
||||
container.addChild(roomView);
|
||||
return () => {
|
||||
container.removeChild(roomView);
|
||||
};
|
||||
}, [container, room]);
|
||||
useEffect(() => {
|
||||
if (!room || !selfEntity || !selfEntity.camera) {
|
||||
return undefined;
|
||||
}
|
||||
const {camera} = selfEntity;
|
||||
const halfViewport = Vector.scale(viewport, 0.5);
|
||||
camera.realPosition = camera.position;
|
||||
const onCameraRealOffsetChanged = () => {
|
||||
container.pivot = Vector.sub(halfViewport, Vector.scale(selfEntity.camera.realOffset, -1));
|
||||
container.pivot = Vector.sub(halfViewport, Vector.scale(camera.realOffset, -1));
|
||||
};
|
||||
const onCameraRotationChanged = () => {
|
||||
container.rotation = selfEntity.camera.rotation;
|
||||
container.rotation = camera.rotation;
|
||||
};
|
||||
const onCameraScaleChanged = () => {
|
||||
[container.scaleX, container.scaleY] = selfEntity.camera.scale;
|
||||
[container.scaleX, container.scaleY] = camera.scale;
|
||||
};
|
||||
onCameraRealOffsetChanged();
|
||||
onCameraRotationChanged();
|
||||
onCameraScaleChanged();
|
||||
selfEntity.camera.on('realOffsetChanged', onCameraRealOffsetChanged);
|
||||
selfEntity.camera.on('rotationChanged', onCameraRotationChanged);
|
||||
selfEntity.camera.on('scaleChanged', onCameraScaleChanged);
|
||||
camera.on('realOffsetChanged', onCameraRealOffsetChanged);
|
||||
camera.on('rotationChanged', onCameraRotationChanged);
|
||||
camera.on('scaleChanged', onCameraScaleChanged);
|
||||
return () => {
|
||||
const {camera} = selfEntity || {};
|
||||
if (camera) {
|
||||
camera.off('realOffsetChanged', onCameraRealOffsetChanged);
|
||||
camera.off('scaleChanged', onCameraScaleChanged);
|
||||
}
|
||||
camera.off('realOffsetChanged', onCameraRealOffsetChanged);
|
||||
camera.off('rotationChanged', onCameraRotationChanged);
|
||||
camera.off('scaleChanged', onCameraScaleChanged);
|
||||
};
|
||||
}, [container, halfViewport, room, selfEntity]);
|
||||
}, [container, room, selfEntity, viewport]);
|
||||
useEffect(() => {
|
||||
if (!room) {
|
||||
return undefined;
|
||||
|
@ -74,7 +78,7 @@ const RoomStage = () => {
|
|||
scalable={false}
|
||||
renderer={renderer}
|
||||
renderable={container}
|
||||
size={VIEWPORT}
|
||||
size={viewport}
|
||||
ticker={ticker}
|
||||
/>
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue
Block a user