This commit is contained in:
2024-02-14 18:28:54 +05:00
parent 5836d8d627
commit b41c877708
40 changed files with 122 additions and 98 deletions
+20 -4
View File
@@ -8,8 +8,23 @@ import Mobile from "./pages/Mobile/Mobile";
import useStore from "./store/store";
import NotSupportModal from "./components/NotSupportModal";
// import { Villa } from "./types/appartment";
// import _villas from "./consts/villas.json";
function isWebview() {
const navigator = window.navigator;
const userAgent = navigator.userAgent;
const normalizedUserAgent = userAgent.toLowerCase();
const standalone = navigator.standalone;
const isIos =
/ip(ad|hone|od)/.test(normalizedUserAgent) ||
(navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1);
const isAndroid = /android/.test(normalizedUserAgent);
const isSafari = /safari/.test(normalizedUserAgent);
const isWebview =
(isAndroid && /; wv\)/.test(normalizedUserAgent)) ||
(isIos && !standalone && !isSafari);
return isWebview;
}
function App() {
const { villa } = useVilla();
@@ -17,8 +32,9 @@ function App() {
const [isNotSupport, setIsNotSupport] = useState(true);
useEffect(() => {
const isDeviceSupport = !(Number(osVersion) < 17 && isIOS);
setIsNotSupport(isDeviceSupport);
// const isDeviceSupport = !(Number(osVersion) < 17 && isIOS);
// console.log("isDeviceSupport", isDeviceSupport);
// setIsNotSupport(!isDeviceSupport);
setCurrentVilla(villa);
}, [setCurrentVilla, villa]);
@@ -8,7 +8,7 @@ import LayoutSection from "./LayoutSection";
import Parameters from "./Parameters";
export default function ButtomPanelModal() {
const height = window.screen.height - 178;
const height = window.screen.height - 218;
const [offset, setOffset] = useState(1);
const [isTouchable, setIsTouchable] = useState(true);
const [{ y }, api] = useSpring(() => ({ y: height }));
@@ -3,9 +3,18 @@ import PopupModal from "./PopupModal";
import HelpPanel from "./HelpPanel";
import HelpButton from "../../HelpButton";
import BackButton from "../../BackButton";
import { useNavigate } from "react-router-dom";
const ButtonPanel = () => {
const { setModal, setPanel, currentView, sendMessageToUnity } = useStore();
const {
setModal,
setPanel,
setIs3DTour,
sendMessageToUnity,
is3DTour,
currentView,
} = useStore();
const navigate = useNavigate();
const handleOnHelpClick = () => {
setModal(<PopupModal />);
@@ -14,28 +23,36 @@ const ButtonPanel = () => {
const handleOnBackClick = () => {
if (sendMessageToUnity) {
switch (currentView) {
case 1:
sendMessageToUnity("JsConnector", "SetOutdoor");
break;
case 2:
sendMessageToUnity("JsConnector", "SetOutdoor");
break;
default:
sendMessageToUnity("JsConnector", "SetOutdoor");
break;
}
sendMessageToUnity("JsConnector", "BackButtonClickEvent");
setIs3DTour(false);
}
};
const handleOnMapClick = () => {
navigate("../");
};
return (
<>
{
<div className="flex w-full absolute p-4 justify-between top-0 left-0">
<BackButton
className="w-8 h-8 flex justify-center items-center pl-[6px] pr-[6px]"
onClick={handleOnBackClick}
/>
{is3DTour || currentView !== 1 ? (
<BackButton
className="w-8 h-8 flex justify-center items-center pl-[6px] pr-[6px]"
onClick={handleOnBackClick}
/>
) : (
<BackButton
onClick={handleOnMapClick}
className="w-8 h-8 flex justify-center items-center pl-[6px] pr-[6px]"
/>
// <BackButton
// onClick={handleOnMapClick}
// title="Map"
// className="w-[90px] h-10"
// />
)}
<HelpButton handleOnHelpClick={handleOnHelpClick} />
</div>
}
+1
View File
@@ -1,5 +1,6 @@
import { useUnityContext } from "react-unity-webgl";
function useUnity() {
return useUnityContext({
loaderUrl: "builds/estate-webgl-dev.loader.js",
+5 -1
View File
@@ -1,5 +1,9 @@
import ReactDOM from "react-dom/client";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import {
RouterProvider,
createHashRouter,
createBrowserRouter,
} from "react-router-dom";
import MainPage from "./pages/MainPage";
import App from "./App";
import "./index.css";
+15 -31
View File
@@ -1,6 +1,5 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { Unity } from "react-unity-webgl";
import { useEffect } from "react";
import { useEffect, useState } from "react";
import { ReactUnityEventParameter } from "react-unity-webgl/distribution/types/react-unity-event-parameters";
import useStore from "../../store/store";
import LoaderModal from "../../components/LoaderModal";
@@ -13,27 +12,20 @@ import ParameterDescription from "../../components/desktop/Appartment/ParameterD
const Desktop = () => {
const {
setCurrentView,
setModal,
setPanel,
currentVilla,
setSendMessageToUnity,
setLoader,
setIs3DTour,
is3DTour,
isFullMode,
} = useStore();
const { villa } = useVilla();
const {
unityProvider,
// isLoaded,
sendMessage,
addEventListener,
removeEventListener,
} = useUnity();
const { unityProvider, sendMessage, addEventListener, removeEventListener } =
useUnity();
const [isContainerLoaded, setIsContainerLoaded] = useState(false);
const handleSetLoaded = (isSceneLoaded: ReactUnityEventParameter) => {
console.log(isSceneLoaded);
if (isSceneLoaded === 0) {
setLoader(<LoaderModal isSimleLoader />);
} else {
@@ -41,6 +33,10 @@ const Desktop = () => {
}
};
const handleSceneLoaded = () => {
setIsContainerLoaded(true);
};
const handleSetView = (view: ReactUnityEventParameter) => {
if (view === 1 || view === 2 || view === 3) {
setCurrentView(view);
@@ -56,34 +52,22 @@ const Desktop = () => {
addEventListener("SetLoaded", handleSetLoaded);
addEventListener("SetView", handleSetView);
addEventListener("Set3DTour", handleSet3DTour);
addEventListener("SetContainerLoaded", handleSceneLoaded);
return () => {
removeEventListener("SetLoaded", handleSetLoaded);
removeEventListener("SetView", handleSetView);
removeEventListener("Set3DTour", handleSet3DTour);
removeEventListener("SetContainerLoaded", handleSceneLoaded);
};
}, []);
useEffect(() => {
setSendMessageToUnity(sendMessage);
sendMessage("SceneContext", "SwitchLevel");
sendMessage("JsConnector", "SetCurrentVilla", villa.type);
if (is3DTour) {
setPanel(<ButtonPanel />);
} else {
setPanel(null);
if (isContainerLoaded) {
sendMessage("JsConnector", "SetCurrentVilla", villa.type);
}
}, [
sendMessage,
setLoader,
setModal,
setPanel,
setSendMessageToUnity,
currentVilla,
villa.type,
is3DTour,
]);
}, [isContainerLoaded]);
return (
<>
+43 -41
View File
@@ -1,4 +1,4 @@
import { useEffect } from "react";
import { useEffect, useState } from "react";
import { ReactUnityEventParameter } from "react-unity-webgl/distribution/types/react-unity-event-parameters";
import { Unity } from "react-unity-webgl";
import useStore from "../../store/store";
@@ -8,12 +8,14 @@ import { useUnity } from "../../hooks/useUnity";
import { useVilla } from "../../hooks/useVilla";
import ButtomPanelModal from "../../components/mobile/Appartment/ButtomPanelModal";
const Mobile = () => {
type MobileProps = {
isWebView?: boolean;
};
const Mobile = ({ isWebView }: MobileProps) => {
const {
panel,
setCurrentView,
setModal,
setPanel,
currentVilla,
setSendMessageToUnity,
setLoader,
@@ -21,12 +23,42 @@ const Mobile = () => {
is3DTour,
} = useStore();
const { villa } = useVilla();
const { unityProvider, sendMessage, addEventListener, removeEventListener } =
useUnity();
// const [isNotSupport, setIsNotSupport] = useState(true);
const [isContainerLoaded, setIsContainerLoaded] = useState(false);
// useEffect(() => {
// const isDeviceSupport = !(Number(osVersion) < 17 && isIOS);
// console.log("isDeviceSupport", isDeviceSupport);
// setIsNotSupport(!isDeviceSupport);
// }, []);
useEffect(() => {
setLoader(<LoaderModal />);
addEventListener("SetLoaded", handleSetLoaded);
addEventListener("SetView", handleSetView);
addEventListener("Set3DTour", handleSet3DTour);
addEventListener("SetContainerLoaded", handleSceneLoaded);
return () => {
removeEventListener("SetLoaded", handleSetLoaded);
removeEventListener("SetView", handleSetView);
removeEventListener("Set3DTour", handleSet3DTour);
removeEventListener("SetContainerLoaded", handleSceneLoaded);
};
}, []);
useEffect(() => {
setModal(<ButtomPanelModal />);
setSendMessageToUnity(sendMessage);
if (isContainerLoaded) {
sendMessage("JsConnector", "SetCurrentVilla", villa.type);
}
}, [isContainerLoaded]);
const handleSetLoaded = (isSceneLoaded: ReactUnityEventParameter) => {
if (!isSceneLoaded) {
if (isSceneLoaded === 0) {
setLoader(<LoaderModal isSimleLoader />);
} else {
setModal(<ButtomPanelModal />);
@@ -34,6 +66,10 @@ const Mobile = () => {
}
};
const handleSceneLoaded = () => {
setIsContainerLoaded(true);
};
const handleSetView = (view: ReactUnityEventParameter) => {
if (view === 1 || view === 2 || view === 3) {
setCurrentView(view);
@@ -44,44 +80,10 @@ const Mobile = () => {
setIs3DTour(!!is3DTour);
};
useEffect(() => {
addEventListener("SetLoaded", handleSetLoaded);
addEventListener("SetView", handleSetView);
addEventListener("Set3DTour", handleSet3DTour);
return () => {
removeEventListener("SetLoaded", handleSetLoaded);
removeEventListener("SetView", handleSetView);
removeEventListener("Set3DTour", handleSet3DTour);
};
}, []);
useEffect(() => {
setLoader(<LoaderModal />);
setModal(<ButtomPanelModal />);
setSendMessageToUnity(sendMessage);
sendMessage("JsConnector", "SetCurrentVilla", villa.type);
if (is3DTour) {
setPanel(<ButtonPanel />);
} else {
setPanel(null);
}
}, [
sendMessage,
setLoader,
setModal,
setPanel,
setSendMessageToUnity,
currentVilla,
villa.type,
is3DTour,
]);
return (
<>
<div className="h-screen overflow-hidden relative">
{panel}
<ButtonPanel />
<Unity
unityProvider={unityProvider}
style={{ width: "100vw", height: "100vh" }}