This commit is contained in:
2024-01-30 12:24:54 +05:00
parent f79aa0ce97
commit de6fc691e7
19 changed files with 310 additions and 286 deletions
-72
View File
@@ -1,72 +0,0 @@
import { Unity, useUnityContext } from "react-unity-webgl";
import { useEffect } from "react";
import { ReactUnityEventParameter } from "react-unity-webgl/distribution/types/react-unity-event-parameters";
import useStore from "../../store/store";
import LoaderModal from "../../components/LoaderModal";
import ButtonPanel from "../../components/desktop/ButtonPanel";
import ParameterDescription from "../../components/desktop/ParameterDescription";
import { A1MViewParams } from "../../consts/viewParams";
import LayoutsButtonContainer from "../../components/desktop/LayoutsButtonContainer";
const Apartment = () => {
const { loader, setLoader, setSendMessageToUnity } = useStore();
const {
unityProvider,
isLoaded,
sendMessage,
addEventListener,
removeEventListener,
} = useUnityContext({
loaderUrl: "builds/estate-webgl.loader.js",
dataUrl: "builds/estate-webgl.data.unityweb",
frameworkUrl: "builds/estate-webgl.framework.js.unityweb",
codeUrl: "builds/estate-webgl.wasm.unityweb",
streamingAssetsUrl: "StreamingAssets",
});
const handleSetLoaded = (isSceneLoaded: ReactUnityEventParameter) => {
if (isSceneLoaded === 0) {
setLoader(<LoaderModal />);
} else {
setLoader(null);
}
};
useEffect(() => {
addEventListener("SetLoaded", handleSetLoaded);
return () => {
removeEventListener("SetLoaded", handleSetLoaded);
};
}, []);
useEffect(() => {
if (!isLoaded) {
setLoader(<LoaderModal />);
} else {
setLoader(null);
setSendMessageToUnity(sendMessage);
sendMessage("LevelSwitcher", "LoadSceneSingle", "Outdoor/A1");
}
}, [isLoaded]);
return (
<>
{loader}
<div className="pt-[101px] pb-[63px] px-[215px] relative">
<div className="relative">
<ButtonPanel />
<Unity
unityProvider={unityProvider}
style={{ width: "100%", height: "100%" }}
/>
<LayoutsButtonContainer />
</div>
<ParameterDescription params={A1MViewParams} />
</div>
</>
);
};
export default Apartment;
+66 -2
View File
@@ -1,7 +1,71 @@
import Apartment from "./Apartment";
import { Unity, useUnityContext } from "react-unity-webgl";
import { useEffect } from "react";
import { ReactUnityEventParameter } from "react-unity-webgl/distribution/types/react-unity-event-parameters";
import useStore from "../../store/store";
import LoaderModal from "../../components/LoaderModal";
import ButtonPanel from "../../components/desktop/ButtonPanel";
import ParameterDescription from "../../components/desktop/ParameterDescription";
import LayoutsButtonContainer from "../../components/desktop/LayoutsButtonContainer";
const Desktop = () => {
return <Apartment />;
const { loader, setLoader, setSendMessageToUnity } = useStore();
const {
unityProvider,
isLoaded,
sendMessage,
addEventListener,
removeEventListener,
} = useUnityContext({
loaderUrl: "builds/estate-webgl.loader.js",
dataUrl: "builds/estate-webgl.data.unityweb",
frameworkUrl: "builds/estate-webgl.framework.js.unityweb",
codeUrl: "builds/estate-webgl.wasm.unityweb",
streamingAssetsUrl: "StreamingAssets",
});
const handleSetLoaded = (isSceneLoaded: ReactUnityEventParameter) => {
if (isSceneLoaded === 0) {
setLoader(<LoaderModal />);
} else {
setLoader(null);
}
};
useEffect(() => {
addEventListener("SetLoaded", handleSetLoaded);
return () => {
removeEventListener("SetLoaded", handleSetLoaded);
};
}, []);
useEffect(() => {
if (!isLoaded) {
setLoader(<LoaderModal />);
} else {
setLoader(null);
setSendMessageToUnity(sendMessage);
sendMessage("LevelSwitcher", "LoadSceneSingle", "Outdoor/A1");
}
}, [isLoaded]);
return (
<>
{loader}
<div className="pt-[101px] pb-[63px] px-[215px] relative">
<div className="relative">
<ButtonPanel />
<Unity
unityProvider={unityProvider}
style={{ width: "100%", height: "100%" }}
/>
<LayoutsButtonContainer />
</div>
<ParameterDescription />
</div>
</>
);
};
export default Desktop;
-94
View File
@@ -1,94 +0,0 @@
import { useEffect } from "react";
import { ReactUnityEventParameter } from "react-unity-webgl/distribution/types/react-unity-event-parameters";
import { Unity, useUnityContext } from "react-unity-webgl";
import useStore from "../../store/store";
import LoaderModal from "../../components/LoaderModal";
import ButtonPanel from "../../components/mobile/Appartment/ButtonPanel";
import ViewControllerModal from "../../components/mobile/Appartment/ViewControllerModal";
import { A1MViewParams } from "../../consts/viewParams";
const Apartment = () => {
const {
modal,
loader,
panel,
setCurrentView,
setModal,
setPanel,
setSendMessageToUnity,
setLoader,
} = useStore();
const {
unityProvider,
isLoaded,
sendMessage,
addEventListener,
removeEventListener,
} = useUnityContext({
loaderUrl: "builds/estate-webgl.loader.js",
dataUrl: "builds/estate-webgl.data.unityweb",
frameworkUrl: "builds/estate-webgl.framework.js.unityweb",
codeUrl: "builds/estate-webgl.wasm.unityweb",
streamingAssetsUrl: "StreamingAssets",
});
const handleSetLoaded = (isSceneLoaded: ReactUnityEventParameter) => {
if (isSceneLoaded === 0) {
setLoader(<LoaderModal />);
} else {
setModal(<ViewControllerModal parameters={A1MViewParams} />);
setLoader(null);
}
};
const handleSetView = (view: ReactUnityEventParameter) => {
setCurrentView(view as number);
};
useEffect(() => {
addEventListener("SetLoaded", handleSetLoaded);
addEventListener("SetView", handleSetView);
return () => {
removeEventListener("SetLoaded", handleSetLoaded);
removeEventListener("SetView", handleSetView);
};
}, []);
useEffect(() => {
if (!isLoaded) {
setLoader(<LoaderModal />);
} else {
setLoader(null);
sendMessage("LevelSwitcher", "LoadSceneSingle", "Outdoor/A1");
setSendMessageToUnity(sendMessage);
setModal(<ViewControllerModal parameters={A1MViewParams} />);
setPanel(<ButtonPanel />);
}
}, [
isLoaded,
sendMessage,
setLoader,
setModal,
setPanel,
setSendMessageToUnity,
]);
return (
<>
{modal}
{loader}
<div className="h-screen overflow-hidden relative">
{panel}
<Unity
unityProvider={unityProvider}
style={{ width: "100vw", height: "100vh" }}
/>
</div>
</>
);
};
export default Apartment;
+90 -2
View File
@@ -1,7 +1,95 @@
import Apartment from "./Apartment";
import { useEffect } from "react";
import { ReactUnityEventParameter } from "react-unity-webgl/distribution/types/react-unity-event-parameters";
import { Unity, useUnityContext } from "react-unity-webgl";
import useStore from "../../store/store";
import LoaderModal from "../../components/LoaderModal";
import ButtonPanel from "../../components/mobile/Appartment/ButtonPanel";
import ViewControllerModal from "../../components/mobile/Appartment/ViewControllerModal";
const Mobile = () => {
return <Apartment />;
const {
modal,
loader,
panel,
setCurrentView,
setModal,
setPanel,
currentVilla,
setSendMessageToUnity,
setLoader,
} = useStore();
const {
unityProvider,
isLoaded,
sendMessage,
addEventListener,
removeEventListener,
} = useUnityContext({
loaderUrl: "builds/estate-webgl.loader.js",
dataUrl: "builds/estate-webgl.data.unityweb",
frameworkUrl: "builds/estate-webgl.framework.js.unityweb",
codeUrl: "builds/estate-webgl.wasm.unityweb",
streamingAssetsUrl: "StreamingAssets",
});
const handleSetLoaded = (isSceneLoaded: ReactUnityEventParameter) => {
if (isSceneLoaded === 0) {
setLoader(<LoaderModal />);
} else {
setModal(<ViewControllerModal />);
setLoader(null);
}
};
const handleSetView = (view: ReactUnityEventParameter) => {
setCurrentView(view as number);
};
useEffect(() => {
addEventListener("SetLoaded", handleSetLoaded);
addEventListener("SetView", handleSetView);
return () => {
removeEventListener("SetLoaded", handleSetLoaded);
removeEventListener("SetView", handleSetView);
};
}, []);
useEffect(() => {
if (!isLoaded) {
setLoader(<LoaderModal />);
} else {
setLoader(null);
sendMessage("LevelSwitcher", "LoadSceneSingle", "Outdoor/A1");
setSendMessageToUnity(sendMessage);
setModal(<ViewControllerModal />);
setPanel(<ButtonPanel />);
}
}, [
isLoaded,
sendMessage,
setLoader,
setModal,
setPanel,
setSendMessageToUnity,
currentVilla,
]);
return (
<>
{modal}
{loader}
<div className="h-screen overflow-hidden relative">
{panel}
<Unity
unityProvider={unityProvider}
style={{ width: "100vw", height: "100vh" }}
/>
</div>
</>
);
};
export default Mobile;