changes
This commit is contained in:
+20
-4
@@ -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,5 +1,6 @@
|
||||
import { useUnityContext } from "react-unity-webgl";
|
||||
|
||||
|
||||
function useUnity() {
|
||||
return useUnityContext({
|
||||
loaderUrl: "builds/estate-webgl-dev.loader.js",
|
||||
|
||||
+5
-1
@@ -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";
|
||||
|
||||
@@ -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
@@ -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" }}
|
||||
|
||||
Reference in New Issue
Block a user