{"version":3,"sources":["ui/common/StyleMasterComp.js","common/Constants.js","common/data/DataLoader.js","common/data/DataManager.js","ui/common/Constants_ui.js","ui/common/Utils_ui.js","common/Communicator.js","common/event/CommunicatorEvent.js","ui/common/Utils_MediaQuery.js","ui/components/pageAuth/BottomInputSet.js","ui/components/pageAuth/MidtitleTxt.js","ui/components/pageAuth/ToptitleTxt.js","ui/common/ga.js","ui/page/PageAuth.js","ui/components/pageLoading/LoadingProgressBar.js","ui/images/SMG_logo.png","ui/page/PageLoading.js","ui/images/ico_x.png","ui/components/ModalBoothList/BoothListContents.js","ui/images/ico_blue_character.png","ui/components/ModalBoothList/TopTxt.js","ui/components/ModalBoothList/MidSelector.js","ui/components/ModalBoothList/ListContents.js","common/Utils.js","common/event/EventDispatcher.js","content/LocationIndicator.js","content/CameraManager.js","content/Marker.js","content/NavimeshManager.js","ui/components/ModalBoothList/BoothListCard.js","ui/modals/ModalBoothList.js","ui/images/ico_close.png","ui/images/ico_arrowRight.png","ui/images/ico_arrowLeft.png","ui/common/MediaQuery.js","ui/modals/ModalCatalog.js","ui/modals/ModalMovie.js","ui/components/pageMain/AudioBgm.js","ui/images/ico_worldMap_SMG.png","ui/components/pageMain/Topmenu.js","ui/images/ico_target_list.png","ui/components/pageMain/ChatTab.js","ui/components/pageMain/ChatingBox.js","ui/images/ico_chatOff.png","ui/images/ico_chatOn.png","ui/modals/ModalLoading.js","ui/images/img_guide_PC.png","ui/images/img_guide_Mobile.png","ui/modals/ModalTutorial.js","ui/page/PageMain.js","ui/App.js","content/LoadingProgressManager.js","content/Avatar.js","content/ShadowManager.js","content/Booth.js","content/SelectableObject.js","content/BoothManager.js","content/MultiPlayManager.js","content/UOSManager.js","content/GalaxyParticle.js","content/BotManager.js","content/BasicWorld.js","ui/SMGDeepLink.js","index.js"],"names":["ContainerBox","styled","div","Block","props","Display","Position","ContainerWidth","ContainerHeight","BackColor","Border","Left","Top","Right","Bottom","TextBox","FontColor","FontSize","FontWeight","FontFamily","WordSpacing","LetterSpacing","TextAlign","MarginTop","MarginLeft","MarginRight","MarginBottom","PointerEvents","Padding","LineHeight","Width","Height","ImgBox","BackImg","ImgButton","BtnWidth","BtnHeight","ModalContainerBox","ModalBlackBox","Constants","DEBUG_MODE","CANVAS","ENGINE","SCENE","AVATAR","GALAXY_PARTICLE","MULTI_SERVER_URL","url","port","MULTI_MAX_NUM","TOTAL_DATA","ASSETS_URL","BOOTH_FILE_NAME","WORLD_FILE_NAME","LOCATOR_FILE_NAME","COMPANY_DATA_URL","UOS_DATA_URL","MAP_CENTER","x","y","z","CONTAINER_MAP","OS_ECT","OS_IOS","OS_ANDROID","OS_PLATFORM","AVATAR_FILE_NAME","AVATAR_SWEAT_FILE_NAME","AVATAR_SHADOW_IMAGE_URL","MARKER_IMG_URL","STARTING_POINT","AVATAR_THRESHOLD_SPEED","BOT_MOVE_INTERVAL","BOT_NAVI_LOCATIONS","Vector3","BOT_NAMES","BOOTH_MOUSE_OVER_COLOR","r","g","b","PORTAL_MOUSE_OVER_COLOR","DEEP_LINK_LIST","allowedMeshNames","downloadURLs","appStoreUrl","playStoreUrl","pcDownURL","SMG_BOOTH_LIST","DataLoader","_strFileURL","_funcCallBack","_strRequestType","_data","xmlhttp","XMLHttpRequest","isAsync","open","returnData","onreadystatechange","readyState","DONE","objData","success","message","errors","status","data","JSON","parse","responseText","setRequestHeader","withCredentials","send","stringify","DataManager","_objInit","m_objInit","Error","m_dataManager","m_arrCompanyDatas","_funcCallBackError","GetInstance","m_funcCallBack","LoadData","companyData","UOSData","m_objUOSData","_objUserData","m_objUserData","_strID","objDataReturn","i","length","String","id","DATA_LOAD_COMPLETE","Constants_ui","TESTMODE","TESTMODE_CHAT","PAGE_START","PAGE_LOADING","PAGE_AUTH","PAGE_MAIN","FIRSTLOADING_TIME","Utils_ui","key","type","undefined","sort","a","nFullSize","nPercent","isAddPx","objOri","objClone","ObjDeepCopy","Communicator","m_communicator","m_objEvents","event","_strEvent","console","log","_anyData","CommunicatorEvent","WORLD_LOAD_COMPLETE","WORLD_LOADING","RECEIVE_CHAT_MESSAGE","OPEN_CATALOG","OPEN_URL_LINK","OPEN_VIDEO","OPEN_PDF","OPEN_BOARDVIDEO","ENTER_BOOTH","ANIMEND_BOOTH","START_CONTENT","CHANGE_CAMERA_MODE","SEND_CHAT_MESSAGE","GO_TO_TENANT","Utils_MediaQuery","width","height","returnType","P_M_DEFAULT_S","P_M_FOLD_S","P_M_IPHONE_S","P_M_ANDROID_S","P_M_DEFAULT_L","P_T_DEFAULT_S","P_T_IPAD_S","P_T_GALAXY_S","P_T_DEFAULT_L","P_D_DEFAULT_S","P_D_DESKTOP_S","P_D_DEFAULT_L","L_M_DEFAULT_S","L_M_FOLD_S","L_M_IPHONE_S","L_M_ANDROID_S","L_M_DEFAULT_L","L_T_DEFAULT_S","L_T_GALAXY_S","L_T_IPAD_S","L_T_DEFAULT_L","L_D_DEFAULT_S","L_D_DESKTOP_S","L_D_DEFAULT_L","InputIdBox","input","OkBtn","button","BottomInputSet","useState","inputBoxInfo","setInputBoxInfo","okBtnInfo","setOkBtnInfo","useEffect","CurrMediaType","GetMediaDetailType","objWindowSize","style","fontSize","maxLength","placeholder","onFocus","e","target","onBlur","onChange","setInputData","value","onKeyPress","inputData","color","onClick","onPushOkButton","window","alert","MidtitleTxt","setTxtInfo1","AuthTextBox","ToptitleTxt","txtInfo1","txtInfo2","setTxtInfo2","WebkitTextStrokeColor","WebkitTextStrokeWidth","ReactGA","initialize","process","pageView","path","hitType","page","customEvent","category","action","label","TopTxtBoxContainer","MidTxtBoxContainer","BottomInputSetBoxContainer","PageAuth","onNextPageMove","sendEvent","name","setSelectPageName","topBoxInfo","setTopBoxInfo","midBoxInfo","setMidBoxInfo","bottomBoxInfo","setBottomBoxInfo","connectionCount","_url","axios","defaults","get","then","response","catch","error","finally","backgroundColor","PercentToPx","Progress","percent","LoadingProgressBar","Height_Box1","Height_Box2","positionInfo","setPositionInfo","compHeight","BgBox","LogoImg","URL","PageLoading","NumPercent","setNumPercent","isLoadReady","setIsLoadReady","isTimeReady","setIsTimeReady","onChangeLoadCount","_nVars","nVars","parseInt","onWorldLoadComp","pageMoveTimer","setTimeout","clearTimeout","reciveEvent","imgSize","setImgSize","txt1Size","setTxt1Size","txt2Size","setTxt2Size","ImgLogo","ContantBgBox","TopTxtContainer","BottomLogoBlock","BoothListContents","listContentAreaSize","setListContentAreaSize","topTxtContainerSize","setTopTxtContainerSize","Height_Block1","Height_Block2","Height_Block3","Height_Block4","blockAreaSize","setBlockAreaSize","bottomLogoInfo","setBottomLogoInfo","ImgCloseList","tabIndex","funcSetBoothListView","onKeyDown","keyCode","arrBoothData","Selected","funcSendTenant","ListHeight","ListWidth","TopTxt","BigMarginTop","BigFont","SmallFont","txtSize","setTxtSize","form","select","option","MidSelector","ListContentArea","MdListDiv","ListContents","map","branch","push","Utils","_obj1","_obj2","Math","sqrt","pow","Number","_nDegree","PI","_nRadian","_iMin","_iMax","random","toFixed","floor","_strHex","result","exec","arr","deeplink","document","createElement","body","appendChild","innerHTML","OS","storeVisited","userAgent","navigator","toLowerCase","storeURL","test","appVersion","indexOf","onblur","changed","hidden","onfocus","moveToStore","location","href","confirm","screen","EventDispatcher","Object","assign","prototype","addEventListener","listener","this","_listeners","listeners","hasEventListener","removeEventListener","listenerArray","index","splice","dispatchEvent","array","slice","l","call","LocationIndicator","nScale","meshArrow","init","loadMesh","BABYLON","ImportMesh","_newMeshes","material","_roughness","emissiveColor","FromHexString","emissiveIntensity","scaling","isVisible","getChildMeshes","position","flowAnimation","onFlowAnimation","aniRotate","onBeforeAnimationsObservable","add","mesh","digree","rotation","show","remove","_isShow","dispose","LOAD_COMPLETE","CameraManager","meshLookAt","CreateBox","size","scene","setCamera","setLocator","camera","Zero","attachControl","inputs","attached","mousewheel","detachControl","setPostProcessing","locator","lowerBetaLimit","ToRadians","upperBetaLimit","lowerRadiusLimit","upperRadiusLimit","gsap","killTweensOf","SNOW_PARTICLE","start","setTarget","aniFlow","zoomToMouseLocation","onFloatingMap","setLimit","StartFlow","to","duration","ease","onComplete","currentMode","MINI_MAP_MODE","minZ","radius","beta","alpha","meshTarget","nDuration","oldMode","BOOTH_MODE","m_iSwingCountFrame","stopFloatingMap","PLAY_MODE","StopFlow","flowAvatar","sin","m_iSwingCycle","m_iSwingSpeed","m_iFloatingAmplitude","digree2","avatar","m_cameraManager","setLooAtMesh","cameraMode","_mode","playMode","miniMapMode","boothMode","_avatar","meshNevi","pipeline","bloomEnabled","fxaaEnabled","bloomWeight","imageProcessingEnabled","floating","removeCallback","_iId","objCompanyData","GetCompoanyDataByID","vecTargetPoint","positionNew","NavimeshManager","ForceMove","Marker","planeMarker","makeMarker","CreatePlane","met","opacityTexture","hasAlpha","level","diffuseColor","navigationPlugin","recast","marker","agents","arrAvata","arrMeshes","navmeshParameters","cs","ch","walkableSlopeAngle","walkableHeight","walkableClimb","walkableRadius","maxEdgeLen","maxSimplificationError","minRegionArea","mergeRegionArea","maxVertsPerPoly","detailSampleDist","detailSampleMaxError","max_num_agent","crowd","createCrowd","agentParams","maxAcceleration","maxSpeed","collisionQueryRange","pathOptimizationRange","separationWeight","startingPoint","getGroundPosition","naviClosestPoint","getClosestPoint","onPointing","agentGoto","isMoveAble","pickinfo","pick","pointerX","pointerY","pickedMesh","hit","_two","n","point","pickedPoint","me","forEach","agent","speed","getAgentPosition","idx","vel","getAgentVelocity","getAgentNextTargetPathToRef","pos","nSpeed","desiredRotation","atan2","trf","onMoveStart","onMoveStop","m_navimeshManager","setNavimesh","_mesh","_isVisible","_isDebugMode","meshNavi","meshRoad","MergeMeshes","parent","createNavMesh","navmeshdebug","createDebugNavMesh","matdebug","setCrowd","onPointerObservable","pointerInfo","POINTERUP","pickInfo","pointerDown","onBeforeRenderObservable","onNavigating","bind","_targetMesh","transform","meshAvatar","agentIndex","addAgent","strName","_vecPosition","agentTeleport","_isAble","CardBox","TextContentsBlock","MoveBtnBlock","OpenBtnBlock","BtnMove","BtnOpen","BoothListCard","mainContext","useContext","MainContext","clickMove","setBoothListView","clickOpen","btoa","link","split","goDeepLink","keyEnter","func","desc","alt","BoothListContentsBoxContainer","ModalBoothList","contentLocation","setContentLocation","PortraitScreen","children","useMediaQuery","orientation","LandscapeScreen","BlackBgBox","BtnClose","top","ImgURL","IMG","img","Container","ButtonRight","ButtonLeft","SliderContainer","ModalCatalog","currentSlide","setCurrentSlide","slideRef","useRef","TOTAL_SLIDES","arrCatalogData","images","ImgSize","closeImgSize","setCloseImgSize","arrowLocation","setArrowLocation","nextSlide","prevSlide","current","transition","ImgArrowLeft","ImgArrowRight","IcoClose","funcSetOpenCatalog","ref","src","MovieContentsBoxContainer","ModalMovie","movieSize","setMovieSize","strVideoUrl","funcSetOpenVideo","funcSetPlaying","playing","controls","AudioBgm","Audio","audio","setPlaying","handleVisibilityChange","play","pause","loop","volume","isBgmPlay","Topmenu","btnSize","setBtnSize","btnPosition1","setBtnPosition1","btnPosition2","setBtnPosition2","setBtnPosition3","worldMapClickControlTrue","funcWorldMapMode","worldMapClickControlFalse","clickBoothListModal","funcBoothListModal","isControlMode","IcoWorldMap","IcoWorldBack","Tabs","ul","InactiveTab","li","ActiveTab","ChatTab","iSelectMenuIndex","marginRight","funcSelectMenuIndex","MenuBar","ChatContentArea","UlHeight","InputTxtSet","InputBox","ChatingBox","setSelectMenuIndex","useChatData","messagesEndRef","arrChatdata","roomType","scrollIntoView","behavior","BlackBoxHeight","chatContentInfo","setChatContentInfo","chatFontSize","setChatFontSize","isUseChatRoom","ChatTxtConvert","funcSendChatData","menuIndex","msg","funcUseChatRoom","messageType","React","forwardRef","AlphaBgBox","ModalLoading","TutorialImg","checkMobileByWidth","ImgTutorialMobile","ImgTutorialPC","cw","_w","ModalTutorial","display","justifyContent","alignItems","setFlagOpenTutorial","min","squareSize","ChatingBoxContainer","ChatdataDefault","createContext","PageMain","setControlMode","isBoothListView","isEnterBooth","setIsEnterBooth","flagOpenTutorial","setUseChatRoom","chatData","setChatData","isOpenCatalog","setOpenCatalog","setCatalogData","sampleRef","contextValue","updateChatData","_objVar","setBgmPlay","isOpenVideo","setOpenVideo","setVideoUrl","onOpenVideo","_strVars","onOpenBoardVideo","boardType","onOpenCatalog","onOpenUrl","_strUrl","onOpenPDFUrl","onEnterBooth","Provider","_isWorldMapView","funcSatisfactionUrl","AppContainerBox","m_arrData","SelectSubPage","strPageName","funcSetSelectPageName","App","strSelectPageName","innerWidth","innerHeight","windowSize","setWindowSize","handleResize","debounce","GetCompanyDatas","tempData","SortJSON","LoadingProgressManager","_scene","m_loadingProgressManager","LOADED_DATA","_nData","NaN","Avatar","_strMeshURL","_isHost","MAKE_COUNT","strUniqueID","strMeshURL","meshShadow","meshBody","meshHead","planeText","isGo","isHost","nNamePosition","iSwingCountFrame","iSwingCycle","Random","nSwingSpeed","nFloatingAmplitude","sweatParticle1","sweatParticle2","sweat","walkAnimation","isIdleAnim","statusData","isBoothMode","onMoveAvatar","onFlowNameteg","textblock","loadData","onMeshLoadProgress","dataUnit","loaded","AddData","avatarLoad","AVATAR_MESH","clone","setShadow","ImportMeshAsync","meshes","animations","speedRatio","animationGroups","from","loadData2","onMeshLoadProgress2","avatarSweatLoad","setEnabled","visibility","getChildren","find","isPickable","scaleInPlace","billboardMode","BILLBOARDMODE_ALL","advancedTexture","GUI","CreateForMesh","panel","addControl","fontFamily","fontStyle","disabledColor","text","drawOutline","outlineColor","outlineWidth","_strName","makeNameText","_vecRotation","degree","physicsImpostor","BoxImpostor","mass","restitution","friction","moveForward","moveBackward","moveRight","moveLeft","registerBeforeRender","forward","right","f_speed","s_speed","move","scale","subtract","physicsBody","velocity","ShadowManager","m_shadowGenerator","m_directionalLight","useCloseBlurExponentialShadowMap","forceBackFacesOnly","usePoissonSampling","useBlurExponentialShadowMap","setDarkness","enableSoftTransparentShadow","transparencyShadow","m_shadowManager","_directionalLight","setShadowGenerator","addShadowCaster","receiveShadows","removeShadowCaster","_light","_funcCallback","getShadowMap","refreshRate","REFRESHRATE_RENDER_ONCE","Booth","_objData","_meshBooth","meshBooth","isIntersects","videoVidTex","strBaseURL","highlightLayer","glowLayer","timeOut","linesBooth","linesBooth2","linesBooth3","tweenIn","tweenOut","addChild","intensity","isEnabled","setIntersectsBox","setBooth","setInterective","onCheckIntersects","IntersectsBox","myPoints","CreateLines","points","AddShadowMap","meshReceive","getNodeByName","RemoveCast","AddReceive","getMeshByName","setAction","homepage","sns","video_url","ir_doc","actionManager","registerAction","OnPointerOverTrigger","_meshEvent","addMesh","OnPointerOutTrigger","removeMesh","OnPickUpTrigger","onClickInfo","catalog_images","intersectsMesh","companyName","filter","element","replace","addIncludedOnlyMesh","customEmissiveColorSelector","subMesh","newPoint","rotateCoordinate","setLogo","setVideo","setKiosk","_position","_objCenter","objReturn","cos","mat","diffuseTexture","logo_image","wAng","vAng","meshVideo","texture","video_thumbnail","uAng","meshKiosk","SETTING_COMPLETE","SelectableObject","_node","_cbClick","_cbOver","_cbOut","_hlColor","node","childrenMeshes","cbClick","cbOver","cbOut","hlColor","cb","setInteraction","allChildren","setHighlight","c","unsetHighlight","BoothManager","arrBooth","setPortalsSMG","setBoothsSMG","loadBoothMesh","setBooths","arrDatas","booth","company","j","initial","getNodes","dl","portal","MultiPlayManager","_strURL","objPlayers","strRoomType","room","sendPosition","_err","_strRoomName","_isLobby","ROOM_TYPE_LOBBY","ROOM_TYPE_NORMAL","joinOrCreate","state","players","onAdd","player","sessionId","onLogin","onAvatarLoded","grade","image","load","meshURL","connection","transport","ws","onclose","_e","onMessage","onMessageChatting","onRemove","onLogout","onLeave","onError","LOGIN","GetUserData","NOTICE","LOGOUT","code","_message","close","Client","CHATTING","EVENT","UOSManager","GetUOSData","video_side_thumbnail","kiosk_img","video_big_thumbnail","webinar","instagram","youtube_live","obj_boardA","obj_boardB","Snow","theta","solidParticleSystem","meshSnow","particleSystem","onAfterRenderObservable","_intValue","minEmitBox","maxEmitBox","emitRate","minSize","maxSize","minLifeTime","maxLifeTime","updateSpeed","preWarmCycles","preWarmStepOffset","particleTexture","direction1","direction2","color1","color2","colorDead","blendMode","BLENDMODE_STANDARD","minInitialRotation","maxInitialRotation","container","setParticles","moveSnow","BotManager","bots","botMoveInterval","makeABot","setInterval","moveBot","positions","botPosIdx","RandomInt","botPos","AddAvatar","keys","arrIdx","arrayShuffle","nextBotPos","clearInterval","BasicWorld","_canvas","canvas","engine","isInput","meshWorld","skyboxMaterial","nightTexture","dayTexture","starParticle","botManager","Init","light","light2","setEnvironment","setWorld","setInspector","runRenderLoop","render","resize","clearColor","setLight","direction","diffuse","specular","groundColor","skybox","backFaceCulling","reflectionTexture","coordinatesMode","SKYBOX_MODE","specularColor","mapLoad","afterLoad","vec","rootMesh","afterLoad1","afterLoad2","onWorldloaded","boothManager","onBoothSettingComplete","setAvatar","onAvataLoded","setDeco","StartContent","AddMeshForNavimesh","MakeNavimesh","GalaxyParticle","FreezingShadow","SetUserData","strURL","multiPlayManager","connect","multiPlayManagerLobby","SendMessage","goToBooth","onKeyboardObservable","kbInfo","KEYDOWN","toString","debugLayer","enablePopup","overlay","getElementById","zIndex","bloomKernel","SMGDeepLink","seqnum","useParams","links","WebFont","custom","families","fontactive","fvd","active","startApp","inactive","world","onDataLoadComplete","onDataLoadFail","reactStart","World","worldSettingComplete","worldLoading","_ev","router","createBrowserRouter","ReactDOM","StrictMode","fallbackElement"],"mappings":"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","file":"static/js/main.332c705c.chunk.js","sourcesContent":["import styled from \"styled-components\";\n\nexport const ContainerBox = styled.div`\n position: relative;\n pointer-events:none;\n margin: 0px;\n padding: 0px;\n`;\n\nexport const Block = styled(ContainerBox)`\n display: ${props => props.Display || null};\n position: ${props => props.Position || null};\n width: ${props => props.ContainerWidth || '100vw'};\n height:${props => props.ContainerHeight || '1px'};\n background-color: ${props => props.BackColor || null};\n border: ${props => props.Border + \" solid #000\" || null};\n left: ${props => props.Left || null};\n top: ${props => props.Top || null};\n right: ${props => props.Right || null};\n bottom: ${props => props.Bottom || null};\n`;\n\nexport const TextBox = styled.div `\n color: ${props => props.FontColor || \"#000\"}; \n font-size: ${props => props.FontSize || \"16px\"}; \n font-weight: ${props => props.FontWeight || null};\n font-family: ${props => props.FontFamily || 'Spoqa HanSansNeo'};\n word-spacing: ${props => props.WordSpacing || null};\n letter-spacing: ${props => props.LetterSpacing || null};\n text-align: ${props => props.TextAlign || null};\n margin-top: ${props => props.MarginTop || \"0px\"};\n margin-left: ${props => props.MarginLeft || \"0px\"};\n margin-right: ${props => props.MarginRight || \"0px\"};\n margin-bottom: ${props => props.MarginBottom || \"0px\"};\n pointer-events: ${props => props.PointerEvents || \"none\"};\n border: ${props => props.Border + \" solid #000\" || null};\n padding: ${props => props.Padding || null};\n line-height: ${props => props.LineHeight || null};\n width: ${props => props.Width || null};\n height: ${props => props.Height || null};\n`;\n\nexport const ImgBox = styled.div`\n width: ${props => props.Width || '100vw'};\n height: ${props => props.Height || '1px'};\n position: ${props => props.Position || null};\n display: ${props => props.Display || null};\n left: ${props => props.Left || null};\n top: ${props => props.Top || null};\n right: ${props => props.Right || null};\n bottom: ${props => props.Bottom || null};\n pointer-events:none;\n background-image: url(${props => props.BackImg});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n`;\n\nexport const ImgButton = styled.div`\n width: ${props => props.BtnWidth || '100vw'};\n height: ${props => props.BtnHeight || '1px'};\n position: ${props => props.Position || null};\n display: ${props => props.Display || null};\n left: ${props => props.Left || null};\n top: ${props => props.Top || null};\n right: ${props => props.Right || null};\n bottom: ${props => props.Bottom || null};\n pointer-events:all;\n cursor: pointer;\n background-image: url(${props => props.BackImg});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n`;\n\nexport const ModalContainerBox = styled(ContainerBox)`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all;\n z-index: 100;\n`;\n\nexport const ModalBlackBox = styled.div`\n position: relative;\n left: 0;\n top:0;\n height:100vh;\n width:100vw;\n pointer-events:all; \n background-color: black;\n opacity: 0.8;\n`;","import { Vector3 } from \"babylonjs\";\n\nexport default class Constants\n{\n 'use strict';\n\n static DEBUG_MODE = false; // 빌드시 false로 바꿀 것 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n static CANVAS = null;\n static ENGINE = null;\n static SCENE = null;\n static AVATAR = null;\n static GALAXY_PARTICLE = null;\n //static MULTIPLAY_MANAGER = null;\n \n static MULTI_SERVER_URL = {\n url: 'ws://localhost',\n port: '4000'\n };\n static MULTI_MAX_NUM = 15;\n \n static TOTAL_DATA = 14514880;\n static ASSETS_URL = \"./assets/\";\n \n static BOOTH_FILE_NAME = \"booth.glb\";\n // static WORLD_FILE_NAME = \"uni_seoul.glb\";\n static WORLD_FILE_NAME = \"SMG_map.glb\";\n // static LOCATOR_FILE_NAME = \"Yirumae_ani.glb\";\n static LOCATOR_FILE_NAME = \"Direction.glb\";\n\n // static CONFIG_DATA_URL = \"./json/config.json\";\n static COMPANY_DATA_URL = \"/json/company_datas.json\";\n static UOS_DATA_URL = \"/json/UOS_datas.json\";\n static MAP_CENTER = {x:0 , y:0, z:0};\n static CONTAINER_MAP = null;\n\n static OS_ECT = \"Os_Ect\";\n static OS_IOS = \"Os_Ios\";\n static OS_ANDROID = \"Os_Android\";\n static OS_PLATFORM = null;\n\n // ################################################################################\n // 아바타 관련\n // static AVATAR_FILE_NAME = \"Yirumae_ani.glb\";\n static AVATAR_FILE_NAME = \"SMG_avatar.glb\";\n static AVATAR_SWEAT_FILE_NAME = \"sweat.glb\";\n static AVATAR_SHADOW_IMAGE_URL = \"./images/shadow.png\";\n static MARKER_IMG_URL = \"./images/waypoint2.png\";\n static STARTING_POINT = {x:0.07 , y:0.0, z:7};\n\n static AVATAR_THRESHOLD_SPEED = .4;\n\n // 봇 설정\n static BOT_MOVE_INTERVAL = 20; // 봇 이동 인터벌. 초 단위\n static BOT_NAVI_LOCATIONS = [\n new Vector3(2.44, 0, 6.94), // 메인 무대 옆\n new Vector3(0.2, 0, 34.64), // 하얀삼거리중심\n new Vector3(0.8, 0, 55.86), // 하단 하얀 사거리 북단\n new Vector3(0.06, 0, 64.48), // 하단 하얀 사거리 남단\n new Vector3(0.21, 0, 89.62), // 최남단 독립 영역\n new Vector3(29.53, 0, 53.16), // 좌측 부스영역 중간\n new Vector3(-34.8, 0, 48.71), // 우측 부스영역 중간\n new Vector3(-48.59, 0, 16.09), // 컨벤션 앞\n new Vector3(-53.02, 0, 4.06), // 귀신의 집 앞\n new Vector3(-47.27, 0, -2.22), // hub3\n new Vector3(-20.28, 0, -48.15), // 핵심보전지구\n new Vector3(0.56, 0, -53.19), // 저스트다운\n new Vector3(14.95, 0, -50.02), // 저스트 고\n new Vector3(52.8, 0, -7.57), // 맵 좌측 분수대\n new Vector3(54.74, 0, 18.46), // hub2\n ]\n static BOT_NAMES = [\n // 'David',\n '양념용량',\n // '디캐릭',\n '만금이',\n 'NEW10kGold',\n 'Burning',\n 'Spark',\n 'ONCE',\n ]\n// NAME을 설정한 만큼 봇이 나옴\n // 부스 및 포털 설정\n static BOOTH_MOUSE_OVER_COLOR = {r:1.0, g:0.0, b:0.0};\n static PORTAL_MOUSE_OVER_COLOR = {r:1.0, g:0.8, b:0.0};\n\n static DEEP_LINK_LIST = \n [\n // {\"id\":\"rrr8x3\", \"name\":\"미래의 새만금\", \"desc\":\"허브1\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoicnJyOHgzL3Jvb20tdmlldyMifQ==\", \"portal\":\"portal_hub1\", \"position\":new Vector3(0.15, 1.25, 3.88)},\n // {\"id\":\"k88ey7\", \"name\":\"새만금청장실\", \"desc\":\"허브1\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiazg4ZXk3L3Jvb20tdmlldyMifQ==\", \"portal\":\"portal_governmentoffice\", \"position\":new Vector3(53.87, 1.08, 18.95)},\n // {\"id\":\"wooj8j\", \"name\":\"새만금 저스트다운\", \"desc\":\"허브1\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoid29vajhqL3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_justdown\", \"position\":new Vector3(0.56, 0, -53.19)},\n // {\"id\":\"7jjz3y\", \"name\":\"관광레저의 새만금\", \"desc\":\"허브2\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiN2pqejN5L3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_hub2\", \"position\":new Vector3(54.74, 0, 18.46)},\n // {\"id\":\"zq4x5e\", \"name\":\"새만금 저스트고\", \"desc\":\"허브2\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoienE0eDVlL3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_justgo\", \"position\":new Vector3(14.95, 0, -50.02)},\n // {\"id\":\"b33j26\", \"name\":\"현재의 새만금\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiYjMzajI2L3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_hub3\", \"position\":new Vector3(-46.94, 1.08, -3.75)},\n // {\"id\":\"8qqj4k\", \"name\":\"새만금 핵심보전지구\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiOHFxajRrL3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_park\", \"position\":new Vector3(-17.84, 1.08, -47.89)},\n // {\"id\":\"qww2mj\", \"name\":\"국립새만금간척박물관\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoicXd3Mm1qL3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_museum\", \"position\":new Vector3(-55.23, 1.08, -34.61)},\n // {\"id\":\"3ergge\", \"name\":\"VR 호러 방탈출\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiM2VyZ2dlL3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_ghost\", \"position\":new Vector3(-53.02, 0, 4.06)},\n // {\"id\":\"b3mwwo\", \"name\":\"새만금 컨벤션\", \"desc\":\"컨벤션\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiYjNtd3dvL3Jvb20tdmlldyMifQ==\", \"portal\":\"Portal_convention\", \"position\":new Vector3(-48.59, 0, 16.09)},\n \n {\"id\":\"rrr8x3\", \"name\":\"미래의 새만금\", \"desc\":\"허브1\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoicnJyOHgzIn0=\", \"portal\":\"portal_hub1\", \"position\":new Vector3(0.15, 1.25, 3.88)},\n {\"id\":\"k88ey7\", \"name\":\"새만금청장실\", \"desc\":\"허브1\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiazg4ZXk3In0=\", \"portal\":\"portal_governmentoffice\", \"position\":new Vector3(53.87, 1.08, 18.95)},\n {\"id\":\"wooj8j\", \"name\":\"새만금 저스트다운\", \"desc\":\"허브1\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoid29vajhqIn0=\", \"portal\":\"Portal_justdown\", \"position\":new Vector3(0.56, 0, -53.19)},\n {\"id\":\"7jjz3y\", \"name\":\"관광레저의 새만금\", \"desc\":\"허브2\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiN2pqejN5In0=\", \"portal\":\"Portal_hub2\", \"position\":new Vector3(54.74, 0, 18.46)},\n {\"id\":\"zq4x5e\", \"name\":\"새만금 저스트고\", \"desc\":\"허브2\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoienE0eDVlIn0=\", \"portal\":\"Portal_justgo\", \"position\":new Vector3(14.95, 0, -50.02)},\n {\"id\":\"b33j26\", \"name\":\"현재의 새만금\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiYjMzajI2In0=\", \"portal\":\"Portal_hub3\", \"position\":new Vector3(-46.94, 1.08, -3.75)},\n {\"id\":\"8qqj4k\", \"name\":\"새만금 핵심보전지구\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiOHFxajRrIn0=\", \"portal\":\"Portal_park\", \"position\":new Vector3(-17.84, 1.08, -47.89)},\n {\"id\":\"qww2mj\", \"name\":\"국립새만금간척박물관\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoicXd3Mm1qIn0=\", \"portal\":\"Portal_museum\", \"position\":new Vector3(-55.23, 1.08, -34.61)},\n {\"id\":\"3ergge\", \"name\":\"VR 호러 방탈출\", \"desc\":\"허브3\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiM2VyZ2dlIn0=\", \"portal\":\"Portal_ghost\", \"position\":new Vector3(-53.02, 0, 4.06)},\n {\"id\":\"b3mwwo\", \"name\":\"새만금 컨벤션\", \"desc\":\"컨벤션\", \"link\":\"engage:eyJjb21tYW5kIjoiT3BlblNlc3Npb24iLCJzbHVnIjoiYjNtd3dvIn0=\", \"portal\":\"Portal_convention\", \"position\":new Vector3(-48.59, 0, 16.09)},\n ];\n\n static allowedMeshNames = \n [\n \"floor\",\n \"스타팅포인트-Mat\",\n ]\n\n static downloadURLs =\n {\n appStoreUrl : 'https://apps.apple.com/us/app/engage-professional-metaverse/id1532036164',\n playStoreUrl : 'https://play.google.com/store/apps/details?id=com.ivre.engage&pli=1',\n pcDownURL : 'https://metadcarrick.co.kr/33',\n // winDownURL : 'https://engagevr.io/installer/ENGAGE_Installer.exe';\n // macDownURL : 'https://engagevr.io/installer/ENGAGE.dmg';\n // pcDownURL : 'https://engagevr.io/desktop-computer-downloads/';\n }\n\n static SMG_BOOTH_LIST = \n [\n { \"name\": \"한국건설생활환경시험연구원\", \"initial\": \"KCL\", \"link\": \"https://kcl.re.kr\" },\n { \"name\": \"OCISE\", \"initial\": \"OCISE\", \"link\": \"https://www.ocise.co.kr\" },\n { \"name\": \"건설기계부품연구원\", \"initial\": \"koceti\", \"link\": \"https://koceti.re.kr\" },\n { \"name\": \"에스씨\", \"initial\": \"SC\", \"link\": \"http://www.s-cable.co.kr\" },\n { \"name\": \"자동차융합기술원\", \"initial\": \"jiat\", \"link\": \"https://www.jiat.re.kr\" },\n { \"name\": \"전북테크노파크\", \"initial\": \"jbtp\", \"link\": \"https://www.jbtp.or.kr\" },\n { \"name\": \"제이아이테크\", \"initial\": \"ji\", \"link\": \"https://www.ji-tech.co.kr\" },\n { \"name\": \"한국산업기술시험원\", \"initial\": \"kti\", \"link\": \"https://customer.ktl.re.kr\" },\n { \"name\": \"한국에너지공단\", \"initial\": \"e\", \"link\": \"https://www.energy.or.kr\" },\n { \"name\": \"한국에너지기술평가원\", \"initial\": \"ketep\", \"link\": \"https://www.ketep.re.kr\" },\n { \"name\": \"다스코\", \"initial\": \"dasco\", \"link\": \"https://dascohex.com\" },\n { \"name\": \"현대플라스포\", \"initial\": \"hd\", \"link\": \"http://www.hd-hyundaiplaspo.com\" },\n ]\n\n\n}","\texport default class DataLoader\n\t{\n\t/* constructor(){}; */\n\tconstructor(){}\n\tstatic LoadData(_strFileURL, _funcCallBack = null, _strRequestType = \"GET\", _data = null, _token = null)\n\t{\n\t\t// console.log(\"::: LoadJSON ::: \", _strRequestType, _strFileURL);\n\t\tlet xmlhttp = new XMLHttpRequest();\n\t\tlet isAsync = (_funcCallBack !== null);\n\t\t\n\t\txmlhttp.open(_strRequestType, _strFileURL, isAsync);\n\t\tlet returnData = null;\n\n\t\txmlhttp.onreadystatechange = function() {\n\t\t\t// console.log(\"LoadJSON ::: \", xmlhttp.readyState);\n\t\t\tif (xmlhttp.readyState === XMLHttpRequest.DONE)\n\t\t\t{\n\t\t\t\tlet objData = {\n\t\t\t\t\tsuccess:false,\n\t\t\t\t\tmessage:null,\n\t\t\t\t\terrors:xmlhttp.status,\n\t\t\t\t\tdata:null\n\t\t\t\t\t}\n\t\t\t\tif(xmlhttp.status === 200 || xmlhttp.status === 400) {\n\t\t\t\t\tobjData = JSON.parse(xmlhttp.responseText);\t\n\t\t\t\t}\n\t\t\t\treturnData = objData;\n\t\t\t\tif(_funcCallBack)_funcCallBack(objData);\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\txmlhttp.setRequestHeader(\"Content-Type\", \"application/json\",\"charset=UTF-8\");\n\t\txmlhttp.withCredentials = true;\n\t\txmlhttp.send(JSON.stringify(_data));\n\n\t\treturn returnData;\n }\n}","/**\n @Class : DataManager\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 데이터 관리 클래스\n 데이터 로드및 관리, 싱글톤\n */\n\nimport Constants from \"../Constants.js\";\nimport DataLoader from \"./DataLoader\";\n\nexport default class DataManager\n{\n static DATA_LOAD_COMPLETE = \"Data_Load_Complete\" // 데이터 로드 완료 이벤트\n\n static m_objInit; // 객체 생성 확인용\n static m_dataManager; // 인스턴스 객체\n static m_objUserData = null; // 사용자 데이터\n static m_arrCompanyDatas = null; // 업체 데이터 배열\n static m_objUOSData = null; // 시립대 데이터\n \n\n /**\n *===============================================================================\n * constructor() : \n * @param _objInit : 싱글톤 생성 확인용 객체\n *===============================================================================*/\n constructor(_objInit)\n {\n //super();\n\n if (_objInit !== DataManager.m_objInit) \n {\n throw new Error( \"DataManager 생성은 다음과 같이 해주세요 - DataManager.GetInstance()\" ); \n // return;\n }\n }\n \n /**\n *===============================================================================\n * GetInstance() : \n * @return : 커뮤니케이터 인스턴스 리턴\n *===============================================================================*/\n static GetInstance()\n {\n if(DataManager.m_dataManager == null) \n {\n DataManager.m_dataManager = new DataManager(DataManager.m_objInit);\n DataManager.m_objInit = {};\n DataManager.m_arrCompanyDatas = [];\n }\n return DataManager.m_dataManager;\n }\n\n /**\n *===============================================================================\n * dispose() : \n *===============================================================================*/\n static dispose(){\n DataManager.m_arrCompanyDatas = null;\n DataManager.m_objInit = null;\n DataManager.m_dataManager = null;\n }\n\n /**\n *===============================================================================\n * reciveEvent() : 이벤트 수신\n * @param _funcCallBack : 데이터 로드 성공 콜벡함수\n * @param _funcCallBackError : 데이터 로드 실패 콜벡함수\n *===============================================================================*/\n static async LoadData(_funcCallBack, _funcCallBackError)\n {\n if(DataManager.m_dataManager == null) DataManager.GetInstance();\n DataManager.m_funcCallBack = _funcCallBack;\n \n //서버 URL 정보 로드\n // let objServerData = await DataLoader.LoadData(Constants.CONFIG_DATA_URL);\n // Constants.MULTI_SERVER_URL.url = String(objServerData.MULTI_SERVER_URL); \n // Constants.MULTI_SERVER_URL.port = String(objServerData.MULTI_SERVER_PORT); \n \n //업체 리스트 데이터 로드\n let companyData = await DataLoader.LoadData(Constants.COMPANY_DATA_URL);\n DataManager.m_arrCompanyDatas = companyData.data;\n\n\n //시립대 데이터 로드\n let UOSData = await DataLoader.LoadData(Constants.UOS_DATA_URL);\n DataManager.m_objUOSData = UOSData.data;\n DataManager.m_funcCallBack();\n\n }\n\n /**\n *===============================================================================\n * SetUserData() : 사용자 데이터 설정\n * @param _objUserData : 사용자 데이터\n *===============================================================================*/\n static SetUserData(_objUserData){\n DataManager.m_objUserData = _objUserData;\n }\n\n /**\n *===============================================================================\n * GetUserData() : 사용자 데이터 게터\n * @return : 사용자 데이터 리턴\n *===============================================================================*/\n static GetUserData(){\n return DataManager.m_objUserData;\n }\n \n /**\n *===============================================================================\n * GetCompoanyDatas() : 전체 업체 데이터 게터\n * @return : 전체 업체 데이터 리턴\n *===============================================================================*/\n static GetCompanyDatas(){\n return DataManager.m_arrCompanyDatas;\n }\n\n /**\n *===============================================================================\n * GetCompoanyDataByID() : 업체 데이터 게터\n * @param _strID : 업체 아이디\n * @return : 업체 데이터 리턴\n *===============================================================================*/\n static GetCompoanyDataByID(_strID){\n let objData = null;\n let objDataReturn = null;\n for(let i = 0; i < DataManager.m_arrCompanyDatas.length; i++){\n objData = DataManager.m_arrCompanyDatas[i];\n if(String(objData.id) === String(_strID)) \n {\n objDataReturn = objData;\n break;\n }\n }\n return objDataReturn;\n }\n\n /**\n *===============================================================================\n * GetUOSData() : 시립대 데이터 게터\n * @return : 시립대 데이터 리턴\n *===============================================================================*/\n static GetUOSData(){\n return DataManager.m_objUOSData;\n }\n};\n\n","export default class Constants_ui {\n static TESTMODE = false;\n static TESTMODE_CHAT = false;\n static PAGE_START =\"PageLoading\"; //시작 페이지 설정\n static PAGE_LOADING =\"PageLoading\";\n static PAGE_AUTH =\"PageAuth\";\n static PAGE_MAIN =\"PageMain\";\n\n static FIRSTLOADING_TIME = 4000;\n}","export default class Utils_ui\n{\n 'use strict';\n \n /**===============================================================================\n * SortJSON() : JSON 데이터 소팅\n * @param data : JSON 데이터\n * @param key : attribute명(소팅기준 값)\n * @param type : \"asc\",\"desc\"\n *===============================================================================*/\n static SortJSON (data, key, type) \n {\n if (type === undefined) type = \"asc\";\n\n return (data.sort(function (a, b) {\n let x = a[key];\n let y = b[key];\n let returnData=null;\n if (type === \"desc\") {\n returnData = x > y ? -1 : x < y ? 1 : 0;\n } else if (type === \"asc\") {\n returnData = x < y ? -1 : x > y ? 1 : 0;\n }\n\n return returnData;\n }));\n };\n\n /**===============================================================================\n * PercentToPx() : full size기준으로 입력%만큼 리턴\n * @param nFullSize : 대상 full 사이즈\n * @param nPercent : 리턴받기 원하는 %\n * @param isAddPx : 뒤에 \"px\" 붙여서 리턴 여부 결정\n *===============================================================================*/\n static PercentToPx (nFullSize, nPercent, isAddPx=true) \n {\n let returnData = \"\"\n \n if(isAddPx) returnData = (nFullSize / 100)*nPercent+\"px\";\n else returnData = (nFullSize / 100)*nPercent;\n\n return returnData;\n };\n\n /**===============================================================================\n * ObjDeepCopy() : 문자,obj만 들어있는 원본 Object를 복사해야 할 때 사용(함수, 정규표현식,.. 데이터 유실위험있음)\n * @param objOri : 복사할 원본 Object\n *===============================================================================*/\n static ObjDeepCopy(objOri) {\n let objClone = {};\n for (let key in objOri) {\n if (typeof objOri[key] == \"object\" && objOri[key] != null) {\n objClone[key] = Utils_ui.ObjDeepCopy(objOri[key]);\n } else {\n objClone[key] = objOri[key];\n }\n }\n \n return objClone;\n };\n};\n\n","/**\n @Class : Communicator\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : content(BabylonJS)와 UI(ReactJS)간 데이터 연동을 위한 클래스\n 싱글톤 페턴을 사용하므로 한가지 아벤트는 한군데서만 사용가능함\n */\nexport default class Communicator\n{\n static m_communicator;\n static m_objInit;\n static m_objEvents;\n \n /**\n *===============================================================================\n * constructor() : \n * @param _objInit : 싱글톤 생성 확인용 객체\n *===============================================================================*/\n constructor(_objInit)\n {\n if (_objInit !== Communicator.m_objInit) \n {\n throw new Error( \"Communicator 생성은 다음과 같이 해주세요 - Communicator.GetInstance()\" ); \n // return;\n }\n }\n\n /**\n *===============================================================================\n * GetInstance() : \n * @return : 커뮤니케이터 인스턴스 리턴\n *===============================================================================*/\n static GetInstance()\n {\n if(Communicator.m_communicator == null) \n {\n Communicator.m_communicator = new Communicator(Communicator.m_objInit);\n Communicator.m_objInit = {};\n Communicator.m_objEvents = {};\n }\n return Communicator.m_communicator;\n }\n\n /**\n *===============================================================================\n * dispose() : \n *===============================================================================*/\n static dispose(){\n for(const event in Communicator.m_objEvents){\n Communicator.m_objEvents[event] = null;\n }\n\n Communicator.m_objEvents = null;\n Communicator.m_objInit = null;\n Communicator.m_communicator = null;\n }\n\n /**\n *===============================================================================\n * reciveEvent() : 이벤트 수신\n * @param _strEvent : 수신 이벤트\n * @param _funcCallBack : 콜벡펑션\n *===============================================================================*/\n static reciveEvent(_strEvent, _funcCallBack){\n if (!Communicator.m_objInit) \n {\n console.log( \"Communicator 인스턴스가 생성되지 않아 이벤트를 \" + _strEvent + \" 등록할 수 없습니다.\" ); \n return;\n } \n if(!Communicator.m_objEvents[_strEvent]) Communicator.m_objEvents[_strEvent] = _funcCallBack;\n console.log(_strEvent, _funcCallBack);\n }\n\n /**\n *===============================================================================\n * sendEvent() : 이벤트 발신\n * @param _strEvent : 전송할 이벤트\n * @param _anyData : 전송할 데이터 -- \n *===============================================================================*/\n static sendEvent(_strEvent, _anyData = null){\n if (!Communicator.m_objInit) \n {\n console.log( \"Communicator 인스턴스가 생성되지 않아 이벤트를 전달할 수 없습니다.)\" ); \n return;\n }\n //console.log(\"Communicator sendEvent :: \", _strEvent, _anyData);\n if(Communicator.m_objEvents[_strEvent]) Communicator.m_objEvents[_strEvent](_anyData)\n }\n};","/**\n @Class : CommunicatorEvent\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : content(BabylonJS)와 UI(ReactJS)간 데이터 연동을 위한 이벤트 관리 클래스\n */\n\nexport default class CommunicatorEvent\n{\n /*===============================================================================\n * Babylon to React\n *===============================================================================*/\n static WORLD_LOAD_COMPLETE = \"World_Load_Complete\"; // 월드 맵 로드 완료 이벤트\n static WORLD_LOADING = \"World_Loading\"; // WebGL 컨텐츠 로드및 설정 진행율 표시\n static RECEIVE_CHAT_MESSAGE= \"Receive_Chat_Message\"; // 채팅메시지 수신\n static OPEN_CATALOG = \"Open_Catalog\"; // 카탈로그 오픈\n static OPEN_URL_LINK = \"Open_Url_Link\"; // URL Link - Homepage, Sns, \n static OPEN_VIDEO = \"Open_Video\"; // 비디오 오픈\n static OPEN_PDF = \"Open_PDF\"; // PDF 오픈 \n static OPEN_BOARDVIDEO = \"Open_BoardVideo\" // 보드A-총장말씀, 보드B-산학관,url: 유튜브링크\n static ENTER_BOOTH = \"Enter_Booth\" // 부스 입장 시 해당 부스 정보 넘기기\n static ANIMEND_BOOTH = \"AnimEnd_Booth\" // 애니메이션 끝\n\n /*===============================================================================\n * React to Babylon\n *===============================================================================*/\n static START_CONTENT = \"Start_Content\"; // WebGL 컨텐츠 스타트\n static CHANGE_CAMERA_MODE = \"Change_Camera_Mode\"; // 맵 Change 이벤트\n static SEND_CHAT_MESSAGE = \"SEND_CHAT_MESSAGE\"; // 채팅메시지 송신\n static GO_TO_TENANT = \"Go_Yo_Tenant\"; // 업체 부스로 이동\n};","export default class Utils_MediaQuery\n{\n 'use strict';\n\n static L_M_DEFAULT_S = \"L_M_Default_S\"; \n static L_M_DEFAULT_L = \"L_M_Default_L\"; \n static L_M_FOLD_S = \"L_M_Fold_S\"; \n static L_M_IPHONE_S = \"L_M_IPhone_S\"; \n static L_M_ANDROID_S = \"L_M_Android_S\"; \n\n static L_T_DEFAULT_S = \"L_T_Default_S\"; \n static L_T_DEFAULT_L = \"L_T_Default_L\"; \n static L_T_IPAD_S = \"L_T_IPad_S\"; \n static L_T_GALAXY_S = \"L_T_Galaxy_S\"; \n \n static L_D_DEFAULT_S = \"L_D_Default_S\"; \n static L_D_DEFAULT_L = \"L_D_Default_L\"; \n static L_D_DESKTOP_S = \"L_D_Desktop_S\"; \n\n static P_M_DEFAULT_S = \"P_M_Default_S\"; \n static P_M_DEFAULT_L = \"P_M_Default_L\"; \n static P_M_FOLD_S = \"P_M_Fold_S\"; \n static P_M_IPHONE_S = \"P_M_IPhone_S\"; \n static P_M_ANDROID_S = \"P_M_Android_S\"; \n\n static P_T_DEFAULT_S = \"P_T_Default_S\"; \n static P_T_DEFAULT_L = \"P_T_Default_L\"; \n static P_T_IPAD_S = \"P_T_IPad_S\"; \n static P_T_GALAXY_S = \"P_T_Galaxy_S\"; \n \n static P_D_DEFAULT_S = \"P_D_Default_S\"; \n static P_D_DEFAULT_L = \"P_D_Default_L\"; \n static P_D_DESKTOP_S = \"P_D_Desktop_S\"; \n \n /**===============================================================================\n * GetMediaDetailType() : 받은 화면 크기를 지정 된 세부 미디어 타입으로 반환\n * @param width : 화면 넓이 값(px제외한 숫자만)\n * @param height : 화면 높이 값(px제외한 숫자만)\n * @returns string : sample : P_D_Default_L (화면방향 P,L)_(기기타입 M,T,D)_(기기명)_(사이즈 S,M,L)\n *===============================================================================*/\n static GetMediaDetailType (width, height) \n {\n let returnType=\"\";\n\n if (width <= height) {//PortraitScreen\n if (width <= 500){\n returnType = Utils_MediaQuery.P_M_DEFAULT_S;\n if (width <= 320 && height <= 752){//fold\n returnType = Utils_MediaQuery.P_M_FOLD_S;\n }else if(width <= 375 && height <= 640){//iphone\n returnType = Utils_MediaQuery.P_M_IPHONE_S;\n }else if(width <= 412 && height <= 725){//android\n returnType = Utils_MediaQuery.P_M_ANDROID_S;\n }else if(width >= 412 ){\n returnType = Utils_MediaQuery.P_M_DEFAULT_L;\n }\n return returnType;\n }else if (width <= 936){\n returnType = Utils_MediaQuery.P_T_DEFAULT_S;\n if(width <= 744 && height >= 1014){//ipad M\n returnType = Utils_MediaQuery.P_T_IPAD_S;\n }else if(width <= 753 && height >= 1037){//Tablet\n returnType = Utils_MediaQuery.P_T_GALAXY_S;\n }else if(width > 753){\n returnType = Utils_MediaQuery.P_T_DEFAULT_L;\n }\n return returnType;\n }else if(width >= 937){\n returnType = Utils_MediaQuery.P_D_DEFAULT_S;\n if (width <= 1080 && height >= 1777) {//Desktop\n returnType = Utils_MediaQuery.P_D_DESKTOP_S;\n }else if(width > 1080){\n returnType = Utils_MediaQuery.P_D_DEFAULT_L;\n }\n return returnType;\n }\n } else {//LandscapeScreen\n if (height <= 450) {\n returnType = Utils_MediaQuery.L_M_DEFAULT_S;\n if (height <= 240 && width <= 808) {//fold-land\n returnType = Utils_MediaQuery.L_M_FOLD_S;\n }else if (height <= 325 && width <= 724) {//iphone-land\n returnType = Utils_MediaQuery.L_M_IPHONE_S;\n }else if (height <= 360 && width <= 781) {//android-land\n returnType = Utils_MediaQuery.L_M_ANDROID_S;\n }else if (height > 360){\n returnType = Utils_MediaQuery.L_M_DEFAULT_L;\n }\n return returnType;\n }else if (height <= 936) {\n returnType = Utils_MediaQuery.L_T_DEFAULT_S;\n if (height <= 586 && width >= 1206) {//Tablet-land\n returnType = Utils_MediaQuery.L_T_GALAXY_S;\n }else if (height <= 625 && width >= 1133) {//ipad M-land\n returnType = Utils_MediaQuery.L_T_IPAD_S;\n }else if (height > 625) {\n returnType = Utils_MediaQuery.L_T_DEFAULT_L;\n }\n return returnType;\n }else if (height >= 937) {\n returnType = Utils_MediaQuery.L_D_DEFAULT_S;\n if (height <= 1080 && width >= 1920) {//Desktop-land\n returnType = Utils_MediaQuery.L_D_DESKTOP_S;\n }else if(height > 1080){\n returnType = Utils_MediaQuery.L_D_DEFAULT_L;\n }\n return returnType;\n }\n }\n };\n};\n\n/*\nlet CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\nconsole.log(\"페이지명 : \",CurrMediaType);\nif(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){}\n\nelse if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_T_IPAD_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){}\n\nelse if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S){}\nelse if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){}\n\nelse if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){}\n\nelse if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){}\n\nelse if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S){}\nelse if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){}\n*/\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport {ContainerBox} from \"../../common/StyleMasterComp\"\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\n\n\nlet InputIdBox = styled.input`\n display: block;\n\n width: ${props => props.Width || '298px'};\n height: ${props => props.Height || '57px'};\n font-size: ${props => props.FontSize || \"20px\"};\n margin-bottom: ${props => props.MarginBottom || '20px'};\n\n font-family: 'SEBANG_Gothic_Regular';\n \n color: #FFFFFF; text-align: center; \n letter-spacing: 1px;\n\n background: #013A7D;\n box-shadow: 0px 1px 15px #FFFFFF;\n border-radius: 30px;\n outline: none;\n border: none;\n\n pointer-events:all;\n ::placeholder {\n color: #FFFFFF; text-align: center; \n }\n`;\n\nlet OkBtn = styled.button`\n width: ${props => props.Width || '298px'};\n height: ${props => props.Height || '57px'};\n font-size: ${props => props.FontSize || \"20px\"};\n\n display: block;\n\n font-family: 'SEBANG_Gothic_Regular'; \n color: #003C8F; font-weight: 600; letter-spacing: 2px; text-align: center; \n \n background: #FFFFFF;\n box-shadow: 0px 1px 15px rgba(255, 255, 255, 0.47);\n border-radius: 30px;\n border: none;\n\n cursor: pointer;\n pointer-events:all;\n`;\n\nfunction BottomInputSet(props){\n\n let [inputBoxInfo, setInputBoxInfo] = useState({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\", MarginBottom:\"20px\" });\n let [okBtnInfo, setOkBtnInfo] = useState({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"BottomInputSet : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"13px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"13px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\" })\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S){\n setInputBoxInfo({ Width:\"250px\", Height:\"45px\", FontSize:\"16px\", MarginBottom:\"15px\" })\n setOkBtnInfo({ Width:\"250px\", Height:\"45px\", FontSize:\"16px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S){\n setInputBoxInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_T_IPAD_S){\n setInputBoxInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setInputBoxInfo({ Width:\"270px\", Height:\"57px\", FontSize:\"19px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"270px\", Height:\"57px\", FontSize:\"19px\" })\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S){\n setInputBoxInfo({ Width:\"350px\", Height:\"67px\", FontSize:\"26px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"350px\", Height:\"67px\", FontSize:\"26px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S){\n setInputBoxInfo({ Width:\"350px\", Height:\"67px\", FontSize:\"26px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"350px\", Height:\"67px\", FontSize:\"26px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setInputBoxInfo({ Width:\"350px\", Height:\"67px\", FontSize:\"26px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"350px\", Height:\"67px\", FontSize:\"26px\" })\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S){\n setInputBoxInfo({ Width:\"141px\", Height:\"25px\", FontSize:\"9px\", MarginBottom:\"6px\" })\n setOkBtnInfo({ Width:\"141px\", Height:\"25px\", FontSize:\"9px\" }) \n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setInputBoxInfo({ Width:\"139px\", Height:\"25px\", FontSize:\"9px\", MarginBottom:\"6px\" })\n setOkBtnInfo({ Width:\"139px\", Height:\"25px\", FontSize:\"9px\" }) \n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S){\n setInputBoxInfo({ Width:\"150px\", Height:\"27px\", FontSize:\"10px\", MarginBottom:\"8px\" })\n setOkBtnInfo({ Width:\"150px\", Height:\"27px\", FontSize:\"10px\" }) \n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S){\n setInputBoxInfo({ Width:\"150px\", Height:\"29px\", FontSize:\"10px\", MarginBottom:\"8px\" })\n setOkBtnInfo({ Width:\"150px\", Height:\"29px\", FontSize:\"10px\" }) \n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setInputBoxInfo({ Width:\"148px\", Height:\"28px\", FontSize:\"9px\", MarginBottom:\"8px\" })\n setOkBtnInfo({ Width:\"148px\", Height:\"28px\", FontSize:\"9px\" }) \n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){\n setInputBoxInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"200px\", Height:\"39px\", FontSize:\"14px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setInputBoxInfo({ Width:\"220px\", Height:\"44px\", FontSize:\"15px\", MarginBottom:\"10px\" })\n setOkBtnInfo({ Width:\"220px\", Height:\"44px\", FontSize:\"15px\" })\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S){\n setInputBoxInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S){\n setInputBoxInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\" })\n }\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setInputBoxInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\", MarginBottom:\"20px\" })\n setOkBtnInfo({ Width:\"298px\", Height:\"57px\", FontSize:\"20px\" })\n }\n },[props.objWindowSize])\n\n return(\n \n \n { e.target.placeholder = \"\" }}\n onBlur={(e) => { e.target.placeholder = \"닉네임을 입력해주세요.\" }}\n onChange={(e) => { props.setInputData(e.target.value) }}\n onKeyPress={props.onKeyPress}\n value={props.inputData}\n style={{color:'darkgray'}}\n />\n {\n if (props.inputData === \"\") {\n window.alert(\"닉네임을 입력해주세요.\");\n return;\n }\n props.onPushOkButton();\n }}>입장하기\n \n );\n}\n\nexport default BottomInputSet;","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport {ContainerBox,TextBox} from \"../../common/StyleMasterComp\"\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\n\nlet AuthTextBox = styled(TextBox)`\n font-family: 'SEBANG_Gothic_Regular';\n`;\n\nfunction MidtitleTxt(props){\n\n let [txtInfo1, setTxtInfo1] = useState({ FontSize:\"40px\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){\n setTxtInfo1({ FontSize:\"15px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setTxtInfo1({ FontSize:\"18px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S){\n setTxtInfo1({ FontSize:\"22px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setTxtInfo1({ FontSize:\"28px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setTxtInfo1({ FontSize:\"40px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setTxtInfo1({ FontSize:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S){\n setTxtInfo1({ FontSize:\"12px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setTxtInfo1({ FontSize:\"15px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){\n setTxtInfo1({ FontSize:\"19px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setTxtInfo1({ FontSize:\"25px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setTxtInfo1({ FontSize:\"40px\" });\n }\n },[props.objWindowSize])\n\n return(\n \n {/* U, Our Star!\n 서울시립대학교 성과공유회 메타버스,\n Our Star에 오신 것을 환영합니다. */}\n \n \n );\n}\n\nexport default MidtitleTxt;","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport {ContainerBox,TextBox} from \"../../common/StyleMasterComp\"\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\n\nlet AuthTextBox = styled(TextBox)`\n font-family: 'NIXGONFONTS V2.0';\n /* border: 1px solid #fff; */\n`;\n\nfunction ToptitleTxt(props){\n\n let [txtInfo1, setTxtInfo1] = useState({ FontSize:\"70px\" });\n let [txtInfo2, setTxtInfo2] = useState({ FontSize:\"25px\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){ \n setTxtInfo1({ FontSize: \"36px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"15px\", MarginTop: \"0px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setTxtInfo1({ FontSize: \"36px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"15px\", MarginTop: \"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S){\n setTxtInfo1({ FontSize: \"40px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"20px\", MarginTop: \"0px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setTxtInfo1({ FontSize: \"55px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"25px\", MarginTop: \"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setTxtInfo1({ FontSize: \"70px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"25px\", MarginTop: \"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setTxtInfo1({ FontSize: \"14px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"6px\", MarginTop: \"0px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S){\n setTxtInfo1({ FontSize: \"18px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"6px\", MarginTop: \"0px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setTxtInfo1({ FontSize: \"20px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"7px\", MarginTop: \"0px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){\n setTxtInfo1({ FontSize: \"26px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"9px\", MarginTop: \"0px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setTxtInfo1({ FontSize: \"35px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"12px\", MarginTop: \"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setTxtInfo1({ FontSize: \"60px\", MarginTop: \"0px\" });\n setTxtInfo2({ FontSize: \"20px\", MarginTop: \"0px\" });\n }\n },[props.objWindowSize])\n\n return(\n \n 버추얼 새만금 \n {/* 웹 포털 */}\n \n Welcome to Virtual Saemangeum\n {/* 웹 포털 */}\n \n );\n}\n\nexport default ToptitleTxt;","import ReactGA from 'react-ga4'\n\n// initialize google analytics\n// ReactGA.initialize('G-XSB4M5CRDM')\nReactGA.initialize(process.env.REACT_APP_ANALYTICSNUMBER)\n\n\n// custom pageview with the location from react router\nexport const pageView = path => {\n return ReactGA.send({hitType: 'pageview', page: path})\n}\n\n// custom event with label being an optional parameter\nexport const customEvent = (category, action, label = '') => {\n return ReactGA.event({\n category: category,\n action: action,\n label: label,\n })\n}","import React, { useState, useEffect } from \"react\";\nimport styled from 'styled-components';\nimport { Block, ContainerBox } from \"../common/StyleMasterComp\";\n\nimport Communicator from \"../../common/Communicator\";\nimport CommunicatorEvent from \"../../common/event/CommunicatorEvent\";\nimport Constants_ui from \"../common/Constants_ui\";\nimport Utils_ui from \"../common/Utils_ui\";\n\nimport {ToptitleTxt, MidtitleTxt, BottomInputSet} from '../components/pageAuth';\nimport Utils_MediaQuery from \"../common/Utils_MediaQuery\";\nimport { pageView } from \"../common/ga\";\nimport axios from \"axios\";\n\nlet TopTxtBoxContainer = styled.div`\n position: absolute;\n left: ${props=>props.Left||\"calc(1.27vw + 20.48px)\"};\n top: ${props=>props.Top||\"calc(1.27vw + 20.48px)\"};\n`;\n\nlet MidTxtBoxContainer = styled.div`\n position: absolute;\n left: ${props=>props.Left||\"calc(1.27vw + 20.48px)\"};\n bottom : ${props=>props.Bottom||\"1vw\"};\n`;\n\nlet BottomInputSetBoxContainer = styled.div`\n position: absolute;\n left: ${props=>props.Left||\"calc(1.27vw + 20.48px)\"};\n top: ${props=>props.Top||\"1vw\"};\n`;\n\nfunction PageAuth(props) {\n //console.log(\"어스페이지\", props);\n let [inputData, setInputData] = useState('');\n\n const onKeyPress = (e) => {\n if (inputData === \"\") return;\n if (e.key === 'Enter') onNextPageMove();\n }\n\n let onPushOkButton = () =>{\n onNextPageMove();\n }\n\n let onNextPageMove = () => {\n Communicator.sendEvent(CommunicatorEvent.START_CONTENT, { name: inputData });\n props.setSelectPageName(Constants_ui.PAGE_MAIN);\n }\n\n let [topBoxInfo, setTopBoxInfo] = useState({ Left:\"59px\", Top:\"59px\" });\n let [midBoxInfo, setMidBoxInfo] = useState({ Left:\"59px\", Bottom:\"1vw\" });\n let [bottomBoxInfo, setBottomBoxInfo] = useState({ Left:\"59px\", Top:\"1vw\" });\n\n async function connectionCount()\n {\n const _url = process.env.REACT_APP_COUNT_CALL_URL + process.env.REACT_APP_COUNT_CALL_PATH;\n console.log(\":: Visit count : \", _url);\n axios.defaults.withCredentials = true;\n axios.get(_url, {}, { withCredentials: true })\n .then(function (response) {\n // 성공 핸들링\n console.log(\"Visit Count call 성공 : \", response);\n })\n .catch(function (error) {\n // 에러 핸들링\n console.error(\"Visit Count 문제 발생\", error);\n })\n .finally(function () {\n // 항상 실행되는 영역\n });\n }\n useEffect(() => {\n\n (async () => {\n await connectionCount();\n })();\n \n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"pageAuth : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setTopBoxInfo({ Left:\"15px\", Top:\"25px\" });\n setMidBoxInfo({ Left:\"15px\", Bottom:\"0px\" });\n setBottomBoxInfo({ Left:\"calc(\"+ props.objWindowSize.Width/2+\"px - (200px / 2))\" , Top:\"20px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){\n setTopBoxInfo({ Left:\"20px\", Top:\"25px\" });\n setMidBoxInfo({ Left:\"20px\", Bottom:\"-10px\" });\n setBottomBoxInfo({ Left:\"calc(\"+ props.objWindowSize.Width/2+\"px - (200px / 2))\" , Top:\"40px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setTopBoxInfo({ Left:\"20px\", Top:\"25px\" });\n setMidBoxInfo({ Left:\"20px\", Bottom:\"0px\" });\n setBottomBoxInfo({ Left:\"calc(\"+ props.objWindowSize.Width/2+\"px - (200px / 2))\" , Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S){\n setTopBoxInfo({ Left:\"30px\", Top:\"35px\" });\n setMidBoxInfo({ Left:\"30px\", Bottom:\"0px\" });\n setBottomBoxInfo({ Left:\"30px\", Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S || \n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setTopBoxInfo({ Left:\"50px\", Top:\"50px\" });\n setMidBoxInfo({ Left:\"50px\", Bottom:\"0px\" });\n setBottomBoxInfo({ Left:\"50px\", Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S || \n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setTopBoxInfo({ Left:\"59px\", Top:\"89px\" });\n setMidBoxInfo({ Left:\"59px\", Bottom:\"-60px\" });\n setBottomBoxInfo({ Left:\"59px\", Top:\"100px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S || \n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setTopBoxInfo({ Left:\"20px\", Top:\"15px\" });\n setMidBoxInfo({ Left:\"20px\", Bottom:\"20px\" });\n setBottomBoxInfo({ Left:\"20px\", Top:\"-10px\" });\n }\n\n else if( \n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setTopBoxInfo({ Left:\"20px\", Top:\"20px\" });\n setMidBoxInfo({ Left:\"20px\", Bottom:\"-5px\" });\n setBottomBoxInfo({ Left:\"20px\", Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S){\n setTopBoxInfo({ Left:\"20px\", Top:\"20px\" });\n setMidBoxInfo({ Left:\"20px\", Bottom:\"10px\" });\n setBottomBoxInfo({ Left:\"20px\", Top:\"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S || \n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){\n setTopBoxInfo({ Left:\"25px\", Top:\"20px\" });\n setMidBoxInfo({ Left:\"25px\", Bottom:\"10px\" });\n setBottomBoxInfo({ Left:\"25px\", Top:\"5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setTopBoxInfo({ Left:\"35px\", Top:\"35px\" });\n setMidBoxInfo({ Left:\"35px\", Bottom:\"-15px\" });\n setBottomBoxInfo({ Left:\"35px\", Top:\"40px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){\n setTopBoxInfo({ Left:\"39px\", Top:\"35px\" });\n setMidBoxInfo({ Left:\"39px\", Bottom:\"0px\" });\n setBottomBoxInfo({ Left:\"39px\", Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S || \n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S || \n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setTopBoxInfo({ Left:\"59px\", Top:\"59px\" });\n setMidBoxInfo({ Left:\"59px\", Bottom:\"0px\" });\n setBottomBoxInfo({ Left:\"59px\", Top:\"20px\" });\n }\n },[props.objWindowSize])\n\n useEffect(()=>{\n pageView(\"/\"); //통계\n },[])\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default PageAuth;","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport Utils_ui from \"../../common/Utils_ui\";\nimport {ContainerBox, Block, TextBox} from \"../../common/StyleMasterComp\";\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\n\nlet Progress = styled.div`\n position: absolute;\n bottom: 0px;\n background-color: white;\n width: ${props => props.percent}%;\n transition: width 400ms ease-in-out;\n height: 1vh;\n`;\n\nfunction LoadingProgressBar(props) {\n\n let [positionInfo, setPositionInfo] = useState({ FontSize:\"30px\", Height_Box1:\"60\", Height_Box2:\"40\" });\n \n useEffect(() => {\n\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"LoadingProgressBar : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S){\n setPositionInfo({ FontSize:\"25px\", Height_Box1:\"60\", Height_Box2:\"40\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){\n setPositionInfo({ FontSize:\"20px\", Height_Box1:\"60\", Height_Box2:\"40\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setPositionInfo({ FontSize:\"30px\", Height_Box1:\"70\", Height_Box2:\"30\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setPositionInfo({ FontSize:\"35px\", Height_Box1:\"60\", Height_Box2:\"40\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S){\n setPositionInfo({ FontSize:\"20px\", Height_Box1:\"95\", Height_Box2:\"5\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setPositionInfo({ FontSize:\"15px\", Height_Box1:\"90\", Height_Box2:\"10\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S){\n setPositionInfo({ FontSize:\"20px\", Height_Box1:\"100\", Height_Box2:\"0\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setPositionInfo({ FontSize:\"25px\", Height_Box1:\"95\", Height_Box2:\"5\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S){\n setPositionInfo({ FontSize:\"25px\", Height_Box1:\"90\", Height_Box2:\"10\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){\n setPositionInfo({ FontSize:\"35px\", Height_Box1:\"90\", Height_Box2:\"10\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){\n setPositionInfo({ FontSize:\"35px\", Height_Box1:\"95\", Height_Box2:\"5\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setPositionInfo({ FontSize:\"35px\", Height_Box1:\"80\", Height_Box2:\"20\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S){\n setPositionInfo({ FontSize:\"40px\", Height_Box1:\"70\", Height_Box2:\"30\" });\n }\n\n },[props.objWindowSize])\n\n return (\n \n\n \n \n {props.percent}%\n \n \n \n \n \n );\n};\n\nexport default LoadingProgressBar;","export default __webpack_public_path__ + \"static/media/SMG_logo.b7209bdb.png\";","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\n\nimport Communicator from \"../../common/Communicator\";\nimport CommunicatorEvent from \"../../common/event/CommunicatorEvent\";\nimport Constants_ui from \"../common/Constants_ui\";\nimport { Block, ContainerBox, TextBox, ImgBox } from \"../common/StyleMasterComp\";\nimport Utils_MediaQuery from \"../common/Utils_MediaQuery\";\nimport Utils_ui from \"../common/Utils_ui\";\n\nimport LoadingProgressBar from \"../components/pageLoading/LoadingProgressBar\";\n\n// KDG\n// import ImgLogo from \"../images/loading_img_logo.png\";\nimport ImgLogo from \"../images/SMG_logo.png\";\n\nlet BgBox = styled.div`\n width:100vw;\n height:${props => props.Height};\n background: linear-gradient(#000000 0%, #00245C 53.12%, #005BAD 100%);\n position: absolute;\n pointer-events:all;\n`;\n\nlet LogoImg = styled(ImgBox)`\n position: absolute;\n background-image:url(${props => props.URL});\n left: calc(50% - ((${props => props.Width} / 2)));\n bottom:3vh;\n width: ${props => props.Width || \"115px\"};\n height: ${props => props.Height ||\"113px\"};\n`;\n\nfunction PageLoading(props) {\n //console.log(\"로딩페이지\", props);\n let [NumPercent, setNumPercent] = useState(0);\n\n let [isLoadReady, setIsLoadReady] = useState(false);\n let [isTimeReady, setIsTimeReady] = useState(false);\n\n let onChangeLoadCount = (_nVars) => {\n let nVars = parseInt(_nVars);\n\n (nVars > 100)\n ? nVars = 100\n : nVars = parseInt(_nVars);\n setNumPercent(nVars);\n }\n\n let onWorldLoadComp = () => {\n // console.log('onWorldLoadComp');\n setIsLoadReady(true);\n }\n\n useEffect(() => {\n let pageMoveTimer = setTimeout(() => {\n // console.log('setTimeout');\n setIsTimeReady(true);\n }, Constants_ui.FIRSTLOADING_TIME);\n return() => {\n clearTimeout(pageMoveTimer)\n }\n }, []);\n\n useEffect(() => {\n Communicator.reciveEvent(CommunicatorEvent.WORLD_LOADING, onChangeLoadCount);\n Communicator.reciveEvent(\n CommunicatorEvent.WORLD_LOAD_COMPLETE,\n onWorldLoadComp\n );\n }, []);\n\n useEffect(() => {\n if (isLoadReady && isTimeReady) props.setSelectPageName(Constants_ui.PAGE_AUTH);\n }, [isLoadReady,isTimeReady,props]);\n\n let [imgSize, setImgSize] = useState({ Width:\"115px\", Height:\"113px\" });\n let [txt1Size, setTxt1Size] = useState({ FontSize:\"25px\", MarginTop:\"0px\" });\n let [txt2Size, setTxt2Size] = useState({ FontSize:\"25px\", MarginTop:\"0px\" });\n\n useEffect(() => {\n\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"PageLoading : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"11px\", MarginTop:\"-10px\" });\n setTxt2Size({ FontSize:\"25px\", MarginTop:\"-5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"14px\", MarginTop:\"0px\" });\n setTxt2Size({ FontSize:\"35px\", MarginTop:\"-5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"14px\", MarginTop:\"-10px\" });\n setTxt2Size({ FontSize:\"35px\", MarginTop:\"-5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S){\n setImgSize({ Width:\"130px\", Height:\"128px\" });\n setTxt1Size({ FontSize:\"15px\", MarginTop:\"-15px\" });\n setTxt2Size({ FontSize:\"40px\", MarginTop:\"-5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S){\n setImgSize({ Width:\"130px\", Height:\"128px\" });\n setTxt1Size({ FontSize:\"25px\", MarginTop:\"0px\" });\n setTxt2Size({ FontSize:\"50px\", MarginTop:\"-5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S){\n setImgSize({ Width:\"130px\", Height:\"128px\" });\n setTxt1Size({ FontSize:\"25px\", MarginTop:\"-10px\" });\n setTxt2Size({ FontSize:\"50px\", MarginTop:\"-5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S){\n setImgSize({ Width:\"150px\", Height:\"147px\" });\n setTxt1Size({ FontSize:\"30px\", MarginTop:\"0px\" });\n setTxt2Size({ FontSize:\"60px\", MarginTop:\"0px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setImgSize({ Width:\"130px\", Height:\"128px\" });\n setTxt1Size({ FontSize:\"28px\", MarginTop:\"-20px\" });\n setTxt2Size({ FontSize:\"50px\", MarginTop:\"0px\" }); \n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S){\n setImgSize({ Width:\"70px\", Height:\"69px\" });\n setTxt1Size({ FontSize:\"10px\", MarginTop:\"10px\" });\n setTxt2Size({ FontSize:\"18px\", MarginTop:\"-2px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setImgSize({ Width:\"80px\", Height:\"78px\" });\n setTxt1Size({ FontSize:\"15px\", MarginTop:\"5px\" });\n setTxt2Size({ FontSize:\"20px\", MarginTop:\"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"20px\", MarginTop:\"10px\" });\n setTxt2Size({ FontSize:\"40px\", MarginTop:\"-5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"20px\", MarginTop:\"5px\" });\n setTxt2Size({ FontSize:\"35px\", MarginTop:\"-5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"20px\", MarginTop:\"5px\" });\n setTxt2Size({ FontSize:\"40px\", MarginTop:\"-5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"25px\", MarginTop:\"0px\" });\n setTxt2Size({ FontSize:\"50px\", MarginTop:\"-5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"20px\", MarginTop:\"5px\" });\n setTxt2Size({ FontSize:\"50px\", MarginTop:\"-5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setImgSize({ Width:\"115px\", Height:\"113px\" });\n setTxt1Size({ FontSize:\"25px\", MarginTop:\"5px\" });\n setTxt2Size({ FontSize:\"50px\", MarginTop:\"-5px\" });\n }\n\n },[props.objWindowSize])\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n Welcome to \n \n 버추얼 새만금\n {\n Constants_ui.TESTMODE\n ? \n isTimeReady : {String(isTimeReady)}, isLoadReady: {String(isLoadReady)}\n : null\n }\n \n \n \n \n );\n}\n\nexport default PageLoading;\n\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACCSURBVHgBpdLdDYAgDATgi07gCE6mm9ERXMGRnAD7AIlBftqjyRFCwpdACwCHJoCvkAyIJoLDQror+YDBfgiDNREPNkQsmBnpYW6khtFIiQ2RBf2Kjb2rvs8RkENb+xM31vtYM2bpzhDztLiJMXMiJTYzbJKxVZdN82hO+OvS7Jr7BbARSPqiDZemAAAAAElFTkSuQmCC\"","import React, {useState, useEffect} from \"react\";\nimport styled from \"styled-components\";\nimport {ContainerBox, Block, ImgBox, ImgButton} from \"../../common/StyleMasterComp\"\n\nimport {TopTxt, ListContents} from './';\n\n// import ImgBottomLogo from \"../../images/img_ListBottomLogo.png\";\nimport ImgBottomLogo from \"../../images/ico_blue_character.png\";\nimport ImgCloseList from \"../../images/ico_x.png\";\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\n\n\nlet ContantBgBox = styled.div`\n position:relative;\n box-sizing:border-box;\n width: ${props => props.Width || \"768px\"}; \n height: ${props => props.Height || \"762px\"};\n background-color: white;\n box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.25);\n border-radius: 2px;\n z-index: 120;\n`;\n\nlet TopTxtContainer = styled.div`\n position: absolute;\n left: ${props=>props.Left || \"20px\"};\n top: ${props=>props.Top ||\"27px\"};\n`;\n\nlet BottomLogoBlock = styled(Block)`\n border-top:1px solid #ddd;\n`;\n\nfunction BoothListContents(props){\n\n //let [Selected, setSelected] = useState(\"전체 부스\");\n let Selected = \"전체 부스\";\n let [listContentAreaSize, setListContentAreaSize] = useState({ Width:\"768px\", Height:\"762px\" });\n let [topTxtContainerSize, setTopTxtContainerSize] = useState({ Left:\"20px\", Top:\"27px\" });\n let [blockAreaSize, setBlockAreaSize] = useState({ Height_Block1:\"132px\", Height_Block2:\"38px\", Height_Block3:\"470px\", Height_Block4:\"121px\" });\n let [bottomLogoInfo, setBottomLogoInfo] = useState({ Top:\"20px\", Left:\"20px\" })\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"BoothListContents : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width+\"px\", Height:props.objWindowSize.Height+\"px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"100px\", Height_Block2:\"38px\", Height_Block3:(props.objWindowSize.Height-100-38-92)+\"px\", Height_Block4:\"92px\" });\n setBottomLogoInfo({ Top:\"20px\", Left:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width+\"px\" , Height:props.objWindowSize.Height+\"px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"90px\", Height_Block2:\"38px\", Height_Block3:\"480px\", Height_Block4:\"70px\" });\n setBottomLogoInfo({ Top:\"5px\", Left:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width+\"px\" , Height:props.objWindowSize.Height+\"px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"90px\", Height_Block2:\"38px\", Height_Block3:(props.objWindowSize.Height-90-38-90)+\"px\", Height_Block4:\"90px\" });\n setBottomLogoInfo({ Top:\"10px\", Left:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setListContentAreaSize({ Width:props.objWindowSize.Width+\"px\" , Height:props.objWindowSize.Height+\"px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"90px\", Height_Block2:\"38px\", Height_Block3:(props.objWindowSize.Height-90-38-90)+\"px\", Height_Block4:\"90px\" });\n setBottomLogoInfo({ Top:\"10px\", Left:\"10px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width+\"px\" , Height:props.objWindowSize.Height+\"px\" });\n setTopTxtContainerSize({ Left:\"20px\", Top:\"40px\" });\n setBlockAreaSize({ Height_Block1:\"150px\", Height_Block2:\"38px\", Height_Block3:(props.objWindowSize.Height-150-38-167)+\"px\", Height_Block4:\"167px\" });\n setBottomLogoInfo({ Top:\"50px\", Left:\"20px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setListContentAreaSize({ Width:props.objWindowSize.Width+\"px\" , Height:props.objWindowSize.Height+\"px\" });\n setTopTxtContainerSize({ Left:\"20px\", Top:\"40px\" });\n setBlockAreaSize({ Height_Block1:\"150px\", Height_Block2:\"38px\", Height_Block3:(props.objWindowSize.Height-150-38-144)+\"px\", Height_Block4:\"144px\" });\n setBottomLogoInfo({ Top:\"40px\", Left:\"20px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setListContentAreaSize({ Width:\"768px\", Height:\"762px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"100px\", Height_Block2:\"38px\", Height_Block3:\"560px\", Height_Block4:\"102px\" });\n setBottomLogoInfo({ Top:\"20px\", Left:\"20px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width, Height:\"440px\"});\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"160px\", Height_Block4:\"141px\" });\n setBottomLogoInfo({ Top:\"17px\", Left:\"10px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width, Height:\"440px\"});\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"160px\", Height_Block4:\"141px\" });\n setBottomLogoInfo({ Top:\"17px\", Left:\"10px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width, Height:\"440px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"160px\", Height_Block4:\"141px\" });\n setBottomLogoInfo({ Top:\"10px\", Left:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S){\n setListContentAreaSize({ Width:props.objWindowSize.Width, Height:\"440px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"160px\", Height_Block4:\"141px\" });\n setBottomLogoInfo({ Top:\"17px\", Left:\"10px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setListContentAreaSize({ Width:props.objWindowSize.Width, Height:\"440px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"160px\", Height_Block4:\"141px\" });\n setBottomLogoInfo({ Top:\"17px\", Left:\"10px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S) {\n setListContentAreaSize({ Width:\"557px\", Height:\"506px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"320px\", Height_Block4:\"70px\" });\n setBottomLogoInfo({ Top:\"20px\", Left:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){\n setListContentAreaSize({ Width:\"605px\", Height:\"550px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"400px\", Height_Block4:\"70px\" });\n setBottomLogoInfo({ Top:\"5px\", Left:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setListContentAreaSize({ Width:\"605px\", Height:\"600px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"80px\", Height_Block2:\"38px\", Height_Block3:\"400px\", Height_Block4:\"120px\" });\n setBottomLogoInfo({ Top:\"30px\", Left:\"20px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setListContentAreaSize({ Width:\"768px\", Height:\"762px\" });\n setTopTxtContainerSize({ Left:\"14px\", Top:\"14px\" });\n setBlockAreaSize({ Height_Block1:\"100px\", Height_Block2:\"38px\", Height_Block3:\"560px\", Height_Block4:\"102px\" });\n setBottomLogoInfo({ Top:\"20px\", Left:\"20px\" });\n }\n },[props.objWindowSize])\n\n return(\n \n \n {/* 닫기 버튼 */}\n {\n props.funcSetBoothListView(false);\n }}\n onKeyDown={(e)=>{ if ( e.keyCode === 13 ) props.funcSetBoothListView(false);}}\n />\n \n \n \n \n \n {/* \n \n */}\n {/* 리스트 */}\n \n \n \n {/* 하단 로고 */}\n \n \n \n \n \n );\n}\n\nexport default BoothListContents;","export default \"data:image/png;base64,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\"","import React, {useState, useEffect} from \"react\";\nimport {ContainerBox,TextBox} from \"../../common/StyleMasterComp\"\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\n\n\nfunction TopTxt(props){\n\n\n let [txtSize, setTxtSize] = useState({ BigMarginTop:\"0px\", BigFont:\"30px\", SmallFont:\"16px\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n\n // console.log(\"TopTxt : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setTxtSize({ BigMarginTop:\"20px\", BigFont:\"17px\", SmallFont:\"12px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setTxtSize({ BigMarginTop:\"10px\", BigFont:\"18px\", SmallFont:\"12px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S){\n setTxtSize({ BigMarginTop:\"10px\", BigFont:\"19px\", SmallFont:\"12px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setTxtSize({ BigMarginTop:\"10px\", BigFont:\"20px\", SmallFont:\"12px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setTxtSize({ BigMarginTop:\"0px\", BigFont:\"30px\", SmallFont:\"16px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setTxtSize({ BigMarginTop:\"0px\", BigFont:\"30px\", SmallFont:\"18px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setTxtSize({ BigFont:\"20px\", SmallFont:\"12px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.L_T_IPAD_S){\n setTxtSize({ BigFont:\"20px\", SmallFont:\"12px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setTxtSize({ BigFont:\"20px\", SmallFont:\"16px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setTxtSize({ BigFont:\"26px\", SmallFont:\"16px\" });\n }\n },[props.objWindowSize])\n\n\n return(\n \n 새만금 메타버스 바로가기\n ‘이동’ 버튼을 클릭해 Engage 새만금 메타버스로 이동하세요.\n \n );\n}\n\nexport default TopTxt;","import React from \"react\";\nimport styled from \"styled-components\";\nimport {ContainerBox} from \"../../common/StyleMasterComp\"\n\nlet MdBox = styled.div`\n position:absolute;\n border-top:1px solid #ddd;\n border-bottom:1px solid #ddd;\n width: 768px;\n height:39px;\n`;\n\nlet MdForm = styled.form` \n margin:0;\n padding:0;\n position:absolute;\n pointer-events: all;\n`;\n\nlet ListSelect = styled.select`\n font-family: 'Spoqa HanSansNeo';\n padding: 0 5px; \n width: 219px; \n height: 39px; \n border: 1px solid #ddd; \n font-size: 15px;\n cursor: pointer;\n outline:none;\n`;\n\nlet ListSelectOption = styled.option`\n outline:none;\n`;\n\nfunction MidSelector(props){\n let selectList = [\"전체 부스\",\"구로\", \"마포\"];\n\n let handleSelect = (e) => {\n props.setSelected(e.target.value);\n };\n\n return(\n \n \n \n \n {selectList.map((data,i) => (\n \n {data}\n \n ))}\n \n \n \n );\n}\n\nexport default MidSelector;","import React from \"react\";\nimport styled from \"styled-components\";\nimport {ContainerBox} from \"../../common/StyleMasterComp\"\n\nimport {BoothListCard} from './'\nimport Constants from \"../../../common/Constants\";\n\nlet ListContentArea = styled.div`\n pointer-events:all;\n margin:0; padding:0; margin-top:0;\n\n width: ${props=>props.Width ||\"768px\"}; \n height: ${props=>props.Height ||\"470px\"};\n\n list-style-type: none;\n margin: 0; padding: 0;\n overflow-y:scroll;\n ::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: rgba(136,136,136,1);\n }\n ::-webkit-scrollbar { \n border-radius: 10px;\n width:5px;\n background-color: rgba(0,0,0,0.3);\n }\n text-align: left;\n box-sizing:border-box;\n color:#000;\n`;\n\nlet MdListDiv = styled.div`\n height:80px;\n`;\n\nfunction ListContents(props){\n // KDG\n // let returnData=[];\n let returnData=Constants.DEEP_LINK_LIST;\n\n let arrUseBoothData = () =>{\n props.arrBoothData.map((data) => {\n if (props.Selected ===\"전체 부스\"){\n returnData.push(data);\n } else if (props.Selected === \"구로\" && data.branch === 1) {\n returnData.push(data);\n } else if (props.Selected === \"마포\" && data.branch === 2) {\n returnData.push(data);\n }\n return null;\n })\n }\n\n arrUseBoothData();\n\n return(\n \n \n \n {\n returnData.map((data, i) => {\n return (\n \n )\n })\n }\n \n \n \n );\n}\n\nexport default ListContents;","import Constants from \"./Constants\";\n\nexport default class Utils\n{\n 'use strict';\n\t//constructor(){};\n\t\n /**\n *===============================================================================\n * Distance() : 두 객체간 거리 계산\n * @param _obj1 : 2D 좌표계를 가진 객체\n * @param _obj2 : 2D 좌표계를 가진 객체\n *===============================================================================\n */\n static Distance(_obj1, _obj2)\n {\n let nDistance = Math.sqrt(Math.pow((Number(_obj1.x) - Number(_obj2.x)),2) + Math.pow((Number(_obj1.y) - Number(_obj2.y)),2));\n return nDistance;\n }\n \n\n\n /**\n *===============================================================================\n * DegreeToRadian() : Degree 값을 Radian 값으로 변환\n * @param _nDegree : Degree 값\n * @return Number : Radian 값 \n *===============================================================================\n */\n static DegreeToRadian(_nDegree)\n {\n return _nDegree / 180.0 * Math.PI; \n }\n\n\n /**\n *===============================================================================\n * RadianToDegree() : Radian 값을 Degree 값으로 변환\n * @param _nRadian : Radian 값\n * @return Number : Degree 값\n *===============================================================================\n */\n static RadianToDegree(_nRadian)\n {\n return _nRadian / Math.PI * 180.0; \n }\n\n\n /**\n *===============================================================================\n * Random() : 두 숫자 사이 랜덤값 리턴 함수\n * @param _iMin : 최소 범위 숫자 int\n * @param _iMax : 최대 범위 숫자 int\n * @return int : 추출된 int 값 리턴\n *===============================================================================\n */\n static Random( _iMin , _iMax)\n {\n return ((Math.random() * (_iMax + 1 - _iMin)) + _iMin).toFixed(); \n }\n\n /**\n * \n * @param {*} _iMin 최소값. 정수\n * @param {*} _iMax 최대값. 정수\n * @returns \n */\n static RandomInt( _iMin , _iMax)\n {\n return Math.floor((Math.random() * (_iMax+1 - _iMin)) + _iMin);\n }\n\n /**\n *===============================================================================\n * HexToRgb() : Hex Color RGB 변환\n * @param _strHex : Hex Color\n *===============================================================================\n */\n static HexToRgb(_strHex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(_strHex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n }\n\n /**\n * 간단 버전의 배열 셔플. 셔플 결과는 고르지 않을 수 있다.\n */\n static arrayShuffle(arr) { return arr.sort( ()=>(Math.random()-.5) ); }\n\n // deep link 를 입력했을 때 앱의 install 여부에 따라 \n // 설치 되지 않았을 경우 스토어나 다운로드 페이지로,\n // 설치 되었을 경우 deep link를 실행시켜주도록 해주는 함수\n static goDeepLink(deeplink) \n {\n const downloadURLs = Constants.downloadURLs;\n var div = document.createElement('div');\n if ( Constants.DEBUG_MODE )\n document.body.appendChild(div);\n div.innerHTML = `( Deep Link ) (${process.env.REACT_APP_VERSION})
`;\n div.style = \"position: absolute;top:0;\"\n const appStoreUrl = downloadURLs.appStoreUrl;\n const playStoreUrl = downloadURLs.playStoreUrl;\n const pcDownURL = downloadURLs.pcDownURL;\n\n let OS = \"\";\n let storeVisited = false;\n\n // const deeplink = 'yourapp://';\n\n const userAgent = window.navigator.userAgent.toLowerCase();\n let storeURL = \"\";\n if (/iphone|ipad|ipod/.test(userAgent)) // iOS\n {\n storeURL = appStoreUrl;\n OS = \"iOS\";\n }\n else if (/android/.test(userAgent)) // Android\n {\n storeURL = playStoreUrl;\n OS = \"And\";\n }\n else if ( navigator.appVersion.indexOf('Win') != -1 ) // Windows\n storeURL = pcDownURL;\n else if (navigator.appVersion.indexOf('Mac') != -1) // Mac\n storeURL = pcDownURL;\n \n window.onblur = function () \n { \n changed = true; \n div.innerHTML += \"on blur changed?: \" + changed + \", hidden : \" + document.hidden + \"
\";\n console.log(\"onblur!!!!!\", changed)\n };\n window.onfocus = function() \n { \n changed = false; \n div.innerHTML += \"on focus changed?: \" + changed + \", hidden : \" + document.hidden + \"
\";\n console.log(\"onfocus!!!!!\", changed)\n if ( OS===\"iOS\" && !storeVisited ) moveToStore();\n }\n\n // 일단 deeplink 로 이동 시도\n try\n {\n window.location.href = deeplink;\n }\n catch(e)\n {\n div.innerHTML += \"catch 들어옴\";\n }\n var changed = false;\n function moveToStore()\n {\n div.innerHTML += '[MTS] changed? ' + changed + \", hidden : \" + document.hidden + \"
\";\n // alert('changed? ' + changed);\n if ( (OS===\"iOS\" && !changed) || (OS===\"And\" && !document.hidden) || ( OS!==\"iOS\" && OS!==\"And\" && !changed) )\n {\n if ( window.confirm('다운로드 링크로 이동하시겠습니까? (이동되지 않을 경우 상단 주소창에서 팝업 차단을 해제하고 다시 객체를 선택해 주세요. 인게이지를 새로 설치 했을 경우 앱을 실행해 로그인 하고 다시 시도해 주세요.)') )\n {\n storeVisited = true;\n // window.location.href = storeURL;\n window.open(storeURL, '_blank');\n }\n }\n }\n setTimeout(moveToStore, 2000);\n }\n\n static checkMobileByWidth()\n {\n console.log(\"[I] checkMobileByWidth \", window.screen.width, window.screen.width<1024);\n if ( window.screen.width<1024 )\n return true;\n else\n return false;\n }\n};\n\n","export default class EventDispatcher\n{\n\t//constructor(){};\n}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\t\tvar listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\t\t\tlisteners[ type ] = [];\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\t\t\tlisteners[ type ].push( listener );\n\t\t}\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tvar listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\t\t\t\tlistenerArray.splice( index, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\t\t\t\tarray[ i ].call( this, event );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n","import * as BABYLON from 'babylonjs';\nimport EventDispatcher from '../common/event/EventDispatcher';\nimport Constants from '../common/Constants';\n\nexport default class LocationIndicator extends EventDispatcher {\n 'use strict';\n\n static LOAD_COMPLETE = \"Load_Complete\";\n\n\n /**\n *===============================================================================\n * constructor() :\n * @param _objItemData : \n *===============================================================================\n */\n constructor() {\n super();\n\n this.nScale = 0.15;\n this.meshArrow = null;\n\n this.init();\n\n }\n\n /**\n *===============================================================================\n * Init() :\n *===============================================================================\n */\n init() {\n\n this.loadMesh();\n }\n\n\n loadMesh() {\n let onLoadComplete = (_newMeshes) => {\n\n this.meshArrow = _newMeshes[0];\n this.meshArrow.name = \"Locator\";\n\n _newMeshes[1].name = \"Locator_Mesh\";\n _newMeshes[1].material._roughness = 1;\n _newMeshes[1].material.emissiveColor = new BABYLON.Color3.FromHexString(\"#CF9677\");\n _newMeshes[1].material.emissiveIntensity = 0.08;\n\n // KDG 잘못된 색이 칠해지는것 방지\n // _newMeshes[1].material.albedoTexture = new BABYLON.Texture(\"images/Yirumae_Walk.png\", Constants.SCENE);\n // _newMeshes[1].material.albedoTexture.uAng = Math.PI;\n this.meshArrow.scaling = new BABYLON.Vector3(this.nScale, this.nScale, this.nScale);\n this.meshArrow.isVisible = false;\n\n // this.meshArrow.scaling = new BABYLON.Vector3(this.nScale, this.nScale, this.nScale);\n\n for (var i = 0; i < this.meshArrow.getChildMeshes(false).length; i++) {\n this.meshArrow.getChildMeshes(false)[i].isVisible = false;\n }\n\n this.meshArrow.position.x = 0;\n this.meshArrow.position.y = 2;\n this.meshArrow.position.z = 0;\n \n this.flowAnimation = () => {\n this.onFlowAnimation();\n }\n\n this.aniRotate = Constants.SCENE.onBeforeAnimationsObservable.add(this.flowAnimation);\n }\n\n BABYLON.SceneLoader.ImportMesh(\"\", Constants.ASSETS_URL, Constants.LOCATOR_FILE_NAME, Constants.SCENE, onLoadComplete);\n }\n\n onFlowAnimation() {\n if (Constants.AVATAR === null || Constants.AVATAR === undefined) return;\n if (Constants.AVATAR.mesh === null || Constants.AVATAR.mesh === undefined) return;\n if (this.meshArrow === null || this.meshArrow === undefined) return;\n\n let digree = this.meshArrow.rotation.y + .01;\n this.meshArrow.rotation = new BABYLON.Vector3(0, digree, 0);\n\n\n this.meshArrow.position.x = Constants.AVATAR.mesh.position.x;\n this.meshArrow.position.z = Constants.AVATAR.mesh.position.z;\n this.meshArrow.position.y = Constants.AVATAR.mesh.position.y + 5;\n\n }\n\n StartFlow() {\n this.show(true);\n if (this.aniRotate !== null) return;\n this.aniRotate = Constants.SCENE.onBeforeAnimationsObservable.add(this.flowAnimation);\n }\n\n StopFlow() {\n Constants.SCENE.onBeforeAnimationsObservable.remove(this.aniRotate);\n this.aniRotate = null;\n this.show(false);\n }\n\n\n show(_isShow) {\n if (this.meshArrow === null) return;\n this.meshArrow.isVisible = _isShow;\n\n for (var i = 0; i < this.meshArrow.getChildMeshes(false).length; i++) {\n this.meshArrow.getChildMeshes(false)[i].isVisible = _isShow;\n }\n }\n\n dispose() {\n this.meshArrow.dispose();\n }\n}"," /*a\n @Class : CameraManager\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 카메라 뷰 컨트롤을 위한 클래스\n */\n\n import * as BABYLON from 'babylonjs';\n import gsap from \"gsap\";\n import Communicator from '../common/Communicator';\n import Constants from '../common/Constants';\n import DataManager from '../common/data/DataManager';\n import CommunicatorEvent from '../common/event/CommunicatorEvent';\n import LocationIndicator from './LocationIndicator';\n import NavimeshManager from './NavimeshManager';\n\n export default class CameraManager {\n static PLAY_MODE = \"Play_Mode\";\n static MINI_MAP_MODE = \"Mini_Map_Mode\";\n static BOOTH_MODE = \"Booth_Mode\";\n\n static meshLookAt;\n static meshTarget;\n static avatar;\n static currentMode;\n static oldMode;\n static locator;\n static aniFlow;\n\n static m_iSwingCountFrame = 0;\n static m_iSwingCycle = 20;\n static m_iSwingSpeed = .05;\n static m_iFloatingAmplitude = .07;\n\n static pipeline = null;\n\n /**\n *===============================================================================\n * constructor() : \n * @param _objInit : 싱글톤 생성 확인용 객체\n *===============================================================================*/\n constructor(_objInit) {\n //super();\n\n if (_objInit !== CameraManager.m_objInit) {\n throw new Error(\"CameraManager 생성은 다음과 같이 해주세요 - CameraManager.GetInstance()\");\n // return;\n }\n }\n\n /**\n *===============================================================================\n * dispose() : \n *===============================================================================*/\n static dispose() {\n\n gsap.killTweensOf(CameraManager.meshLookAt);\n gsap.killTweensOf(CameraManager.camera);\n\n CameraManager.m_iSwingCountFrame = 0;\n\n CameraManager.avatar = null;\n CameraManager.meshTarget = null;\n CameraManager.camera.dispose();\n CameraManager.m_cameraManager = null;\n CameraManager.m_objInit = null;\n }\n\n /**\n *===============================================================================\n * GetInstance() : \n * @return : 인스턴스 리턴\n *===============================================================================*/\n static GetInstance() {\n if (CameraManager.m_cameraManager == null) {\n CameraManager.m_cameraManager = new CameraManager(CameraManager.m_objInit);\n CameraManager.m_objInit = {};\n CameraManager.GetInstance().setLooAtMesh();\n\n Communicator.reciveEvent(CommunicatorEvent.CHANGE_CAMERA_MODE, (_data) => {\n CameraManager.cameraMode = _data;\n CameraManager.aniFlow = null;\n })\n\n }\n return CameraManager.m_cameraManager;\n }\n\n /**\n *===============================================================================\n * set cameraMode() : 카메라 모드 변경 setter\n * @param _mode : 카메라 모드 /미니맵모드/플래이모드/부스모드\n *===============================================================================*/\n static set cameraMode(_mode) {\n CameraManager.oldMode = CameraManager.currentMode;\n CameraManager.currentMode = _mode;\n \n //console.log(\"cameraMode ::: \",_mode);\n switch (_mode) {\n case CameraManager.PLAY_MODE:\n CameraManager.camera.inputs.attached.mousewheel.detachControl(Constants.CANVAS); // 휠 이벤트 해제\n CameraManager.GetInstance().playMode();\n break;\n case CameraManager.MINI_MAP_MODE:\n CameraManager.GetInstance().miniMapMode();\n break;\n case CameraManager.BOOTH_MODE:\n CameraManager.camera.inputs.attached.mousewheel.detachControl(Constants.CANVAS); // 휠 이벤트 해제\n CameraManager.GetInstance().boothMode();\n break;\n default:\n break;\n }\n }\n\n /**\n *===============================================================================\n * get cameraMode() : 현재 카메라 모드 getter\n * @return : 현재 카메라 모드 /미니맵모드/플래이모드/부스모드\n *===============================================================================*/\n static get cameraMode() {\n return CameraManager.currentMode;\n }\n /**\n *===============================================================================\n * set target() : 아바타 설정 setter \n * @param _avatar : 아바타 인스턴스\n *===============================================================================*/\n static set target(_avatar) {\n CameraManager.avatar = _avatar;\n CameraManager.meshTarget = CameraManager.avatar.meshNevi;\n }\n\n /**\n *===============================================================================\n * get lookAt() : 카메라 룩엣 객체 getter\n * @return : 카메라 룩엣 객체\n *===============================================================================*/\n static get lookAt() {\n return CameraManager.meshLookAt;\n }\n\n /**\n *===============================================================================\n * setPostProcessing() : 포스트 프로세싱 \n *===============================================================================*/\n static setPostProcessing() {\n // 포스트 프로세싱\n CameraManager.pipeline = new BABYLON.DefaultRenderingPipeline(\"postprocess\", true, CameraManager.scene, [CameraManager.camera]);\n CameraManager.pipeline.bloomEnabled = true;\n CameraManager.pipeline.fxaaEnabled = true;\n CameraManager.pipeline.bloomWeight = .4;\n CameraManager.pipeline.imageProcessingEnabled = true;\n\n // BlurPostProcess 생성\n // var horizontalBlur = new BABYLON.BlurPostProcess(\"horizontalBlur\", new BABYLON.Vector2(1, 0), 2, 1.0, CameraManager.camera);\n // var verticalBlur = new BABYLON.BlurPostProcess(\"verticalBlur\", new BABYLON.Vector2(0, 1), 2, 1.0, CameraManager.camera);\n\n // var bloomEffect = BABYLON.BloomEffect(Constants.SCENE, 0.5, 1, 3);\n\n // // PostProcessManager에 BlurPostProcess 추가\n // var postProcessManager = new BABYLON.PostProcessManager(Constants.SCENE);\n // postProcessManager.addEffect(bloomEffect)\n // console.log(\"post process manager : \", Constants.SCENE.postProcess);\n // postProcessManager.addEffect(horizontalBlur);\n // postProcessManager.addEffect(verticalBlur);\n }\n\n /**\n *===============================================================================\n * setLooAtMesh() : 룩엣 객체 생성 \n *===============================================================================*/\n setLooAtMesh() {\n CameraManager.meshLookAt = BABYLON.MeshBuilder.CreateBox(\"cube\", {\n size: 1.1,\n height: 1.1\n }, CameraManager.scene);\n CameraManager.meshLookAt.isVisible = false;\n CameraManager.meshLookAt.position = new BABYLON.Vector3(Constants.MAP_CENTER.x, Constants.MAP_CENTER.y, Constants.MAP_CENTER.z);\n CameraManager.GetInstance().setCamera();\n CameraManager.GetInstance().setLocator();\n }\n\n /**\n *===============================================================================\n * setCamera() : 카메라 생성\n *===============================================================================*/\n setCamera() {\n CameraManager.camera = new BABYLON.ArcRotateCamera(\"Camera\", -Math.PI / 90, //회전 최초방위값은 이값을 바꾸면 됨\n 0.8, //기울기\n 50, // 스케일\n new BABYLON.Vector3.Zero(), Constants.SCENE);\n CameraManager.camera.attachControl(Constants.CANVAS, true);\n CameraManager.camera.inputs.attached.mousewheel.detachControl(Constants.CANVAS);\n\n CameraManager.setPostProcessing();\n\n /* var lensEffect = new BABYLON.LensRenderingPipeline('lens', {\n edge_blur: 1.0,\n chromatic_aberration: 1.0,\n distortion: 1.0,\n dof_focus_distance: 150,\n dof_aperture: 6.0,\t\t\t// set this very high for tilt-shift effect\n grain_amount: 1.0,\n dof_pentagon: true,\n dof_gain: 1.0,\n dof_threshold: 1.0,\n dof_darken: 0.25\n }, Constants.SCENE, 1.0, CameraManager.camera); */\n\n }\n\n /**\n *===============================================================================\n * setLocator() : 로케이터 설정\n *===============================================================================*/\n setLocator() {\n CameraManager.locator = new LocationIndicator();\n }\n\n\n /**\n *===============================================================================\n * setCamera() : 카메라 컨트롤 리미트 설정\n *===============================================================================*/\n setLimit() {\n //트위닝을 위한 범위 설정\n // CameraManager.camera.lowerAlphaLimit = BABYLON.Tools.ToRadians(15); //회전 각도 제한\n // CameraManager.camera.upperAlphaLimit = BABYLON.Tools.ToRadians(165); //회전 각도 제한\n CameraManager.camera.lowerBetaLimit = BABYLON.Tools.ToRadians(5); //탑뷰 각도 제한\n CameraManager.camera.upperBetaLimit = BABYLON.Tools.ToRadians(85); // 버텀뷰 각도 제한\n CameraManager.camera.lowerRadiusLimit = 2; //최대 사이즈 제한\n CameraManager.camera.upperRadiusLimit = 300; //최소 사이즈 제한\n }\n\n /**\n *===============================================================================\n * miniMapMode() : 미니맵모드 카메라 설정\n *===============================================================================*/\n miniMapMode() {\n gsap.killTweensOf(CameraManager.meshLookAt);\n gsap.killTweensOf(CameraManager.camera);\n\n if (Constants.SNOW_PARTICLE) Constants.SNOW_PARTICLE.start();\n\n CameraManager.camera.setTarget(CameraManager.meshLookAt);\n\n Constants.SCENE.onBeforeAnimationsObservable.remove(CameraManager.aniFlow);\n CameraManager.camera.zoomToMouseLocation = false;\n\n CameraManager.onFloatingMap()\n CameraManager.GetInstance().setLimit();\n\n CameraManager.locator.StartFlow();\n\n const endTween = () => {\n if (CameraManager.currentMode !== CameraManager.MINI_MAP_MODE) return;\n CameraManager.meshLookAt.position = new BABYLON.Vector3(Constants.MAP_CENTER.x, Constants.MAP_CENTER.y, Constants.MAP_CENTER.z);\n CameraManager.camera.inputs.attached.mousewheel.attachControl(Constants.CANVAS); // 휠 이벤트 연결\n //모드 제한 설정\n CameraManager.camera.lowerBetaLimit = BABYLON.Tools.ToRadians(45); //탑뷰 각도 제한\n CameraManager.camera.lowerRadiusLimit = 100; //최대 사이즈 제한\n CameraManager.camera.upperRadiusLimit = 150; //최소 사이즈 제한\n CameraManager.camera.minZ = 1;\n\n }\n\n gsap.to(CameraManager.meshLookAt.position, {\n duration: 1,\n x: Constants.MAP_CENTER.x,\n y: Constants.MAP_CENTER.y,\n z: Constants.MAP_CENTER.z,\n ease: \"power1.outout\",\n onComplete: endTween\n });\n\n gsap.to(CameraManager.camera, {\n duration: 1,\n radius: 150,\n beta: BABYLON.Tools.ToRadians(75),\n alpha: BABYLON.Tools.ToRadians(45),\n ease: \"power1.outout\"\n });\n\n\n }\n\n\n /**\n *===============================================================================\n * playMode() : 플레이모드 카메라 설정\n *===============================================================================*/\n playMode() {\n gsap.killTweensOf(CameraManager.meshLookAt);\n gsap.killTweensOf(CameraManager.camera);\n\n //if(Constants.SNOW_PARTICLE)Constants.SNOW_PARTICLE.stop();\n\n if (CameraManager.meshTarget === null || CameraManager.meshTarget === undefined) return;\n let nDuration = CameraManager.oldMode === CameraManager.BOOTH_MODE ? .7 : 1;\n\n CameraManager.m_iSwingCountFrame = 0;\n CameraManager.stopFloatingMap();\n CameraManager.camera.zoomToMouseLocation = false;\n\n // KDG\n // if (CameraManager.oldMode === CameraManager.MINI_MAP_MODE)\n // NavimeshManager.ForceMove(new BABYLON.Vector3(CameraManager.meshTarget.position.x, CameraManager.meshTarget.position.y, CameraManager.meshTarget.position.z));\n\n CameraManager.GetInstance().setLimit();\n\n const endTween = () => {\n if (CameraManager.currentMode !== CameraManager.PLAY_MODE) return;\n CameraManager.locator.StopFlow();\n // CameraManager.camera.zoomToMouseLocation = true;\n // CameraManager.camera.lowerAlphaLimit = BABYLON.Tools.ToRadians(15); //회전 각도 제한\n // CameraManager.camera.upperAlphaLimit = BABYLON.Tools.ToRadians(165); //회전 각도 제한\n CameraManager.camera.lowerBetaLimit = BABYLON.Tools.ToRadians(5); //탑뷰 각도 제한\n CameraManager.camera.upperBetaLimit = BABYLON.Tools.ToRadians(85); // 버텀뷰 각도 제한\n CameraManager.camera.lowerRadiusLimit = 16; //최대 사이즈 제한\n CameraManager.camera.upperRadiusLimit = 16; //최소 사이즈 제한\n CameraManager.camera.minZ = 0.01;\n\n CameraManager.camera.setTarget(CameraManager.meshTarget);\n if (CameraManager.aniFlow === null) CameraManager.aniFlow = Constants.SCENE.onBeforeAnimationsObservable.add(CameraManager.GetInstance().flowAvatar);\n }\n\n gsap.to(CameraManager.meshLookAt.position, {\n duration: nDuration,\n x: CameraManager.meshTarget.position.x,\n y: CameraManager.meshTarget.position.y,\n z: CameraManager.meshTarget.position.z,\n ease: \"power1.outout\",\n onComplete: endTween\n });\n\n gsap.to(CameraManager.camera, {\n duration: nDuration,\n radius: 16,\n beta: BABYLON.Tools.ToRadians(45),\n alpha: BABYLON.Tools.ToRadians(90),\n ease: \"power1.outout\",\n });\n\n //맵 기울기 원상 복귀\n gsap.to(Constants.CONTAINER_MAP.rotation, {\n duration: nDuration,\n x: 0,\n y: 0,\n z: 0,\n ease: \"power1.outout\"\n });\n }\n\n /**\n *===============================================================================\n * boothMode() : 부스모드 카메라 설정\n *===============================================================================*/\n boothMode() {\n\n gsap.killTweensOf(CameraManager.meshLookAt);\n gsap.killTweensOf(CameraManager.camera);\n\n //if(Constants.SNOW_PARTICLE)Constants.SNOW_PARTICLE.stop();\n\n if (CameraManager.meshTarget === null || CameraManager.meshTarget === undefined) return;\n let nDuration = CameraManager.oldMode === CameraManager.PLAY_MODE ? .7 : 1;\n CameraManager.m_iSwingCountFrame = 0;\n // Constants.SCENE.onBeforeAnimationsObservable.removeCallback(this.floating)\n CameraManager.stopFloatingMap();\n CameraManager.locator.StopFlow();\n CameraManager.GetInstance().setLimit();\n CameraManager.camera.zoomToMouseLocation = false;\n\n\n const endTween = () => {\n if (CameraManager.currentMode !== CameraManager.BOOTH_MODE) return;\n // CameraManager.camera.lowerAlphaLimit = BABYLON.Tools.ToRadians(30); //회전 각도 제한\n // CameraManager.camera.upperAlphaLimit = BABYLON.Tools.ToRadians(90); //회전 각도 제한\n CameraManager.camera.lowerBetaLimit = BABYLON.Tools.ToRadians(5); //탑뷰 각도 제한\n CameraManager.camera.upperBetaLimit = BABYLON.Tools.ToRadians(85); // 버텀뷰 각도 제한\n CameraManager.camera.lowerRadiusLimit = 8; //최대 사이즈 제한\n CameraManager.camera.upperRadiusLimit = 8; //최소 사이즈 제한\n // CameraManager.camera.zoomToMouseLocation = true;\n\n Communicator.sendEvent(CommunicatorEvent.ANIMEND_BOOTH);\n\n CameraManager.camera.setTarget(CameraManager.meshTarget);\n }\n\n gsap.to(CameraManager.meshLookAt.position, {\n duration: nDuration,\n x: CameraManager.meshTarget.position.x,\n y: CameraManager.meshTarget.position.y,\n z: CameraManager.meshTarget.position.z,\n ease: \"power1.outout\",\n });\n\n gsap.to(CameraManager.camera, {\n duration: nDuration,\n radius: 8,\n beta: BABYLON.Tools.ToRadians(45),\n alpha: BABYLON.Tools.ToRadians(45),\n ease: \"power1.outout\",\n onComplete: endTween\n });\n\n\n //맵 기울기 원상 복귀\n gsap.to(Constants.CONTAINER_MAP.rotation, {\n duration: nDuration,\n x: 0,\n y: 0,\n z: 0,\n ease: \"power1.outout\"\n });\n }\n\n /**\n *===============================================================================\n * flowAvatar() : 카메라 아바타 따라다니기\n *===============================================================================*/\n flowAvatar() {\n CameraManager.meshLookAt.position.x = CameraManager.meshTarget.position.x;\n CameraManager.meshLookAt.position.z = CameraManager.meshTarget.position.z;\n CameraManager.meshLookAt.position.y = CameraManager.meshTarget.position.y;\n CameraManager.meshLookAt.rotation = CameraManager.meshTarget.rotation;\n }\n\n\n /**\n *===============================================================================\n * floating() : 미니맵 모드 비행기 플로팅 애니메이션\n *===============================================================================*/\n floating() {\n if (Constants.CONTAINER_MAP === null) return;\n CameraManager.m_iSwingCountFrame++;\n let digree = Math.sin(CameraManager.m_iSwingCountFrame / (CameraManager.m_iSwingCycle) * CameraManager.m_iSwingSpeed) * CameraManager.m_iFloatingAmplitude;\n let digree2 = Math.sin(CameraManager.m_iSwingCountFrame / (CameraManager.m_iSwingCycle) * CameraManager.m_iSwingSpeed) * (CameraManager.m_iFloatingAmplitude - .05);\n\n Constants.CONTAINER_MAP.rotation = new BABYLON.Vector3(digree2, 0, digree);\n }\n\n /**\n *===============================================================================\n * onFloatingMap() : 맵 플로팅 시작\n *===============================================================================*/\n static onFloatingMap() {\n Constants.SCENE.onBeforeAnimationsObservable.add(CameraManager.GetInstance().floating);\n }\n\n /**\n *===============================================================================\n * stopFloatingMap() : 맵 플로팅 멈춤\n *===============================================================================*/\n static stopFloatingMap() {\n Constants.SCENE.onBeforeAnimationsObservable.removeCallback(CameraManager.GetInstance().floating)\n }\n\n /**\n *===============================================================================\n * goToBooth() : 부스로 이동\n * @param _iId : 부스 아이디 int\n *===============================================================================*/\n static goToBooth(_iId) {\n let objCompanyData = DataManager.GetCompoanyDataByID(_iId);\n let vecTargetPoint = new BABYLON.Vector3(objCompanyData.positionNew.x, objCompanyData.positionNew.y, objCompanyData.positionNew.z);\n CameraManager.meshTarget.position = vecTargetPoint;\n NavimeshManager.ForceMove(vecTargetPoint);\n CameraManager.cameraMode = CameraManager.BOOTH_MODE;\n }\n };","import * as BABYLON from 'babylonjs';\nimport EventDispatcher from '../common/event/EventDispatcher';\nimport gsap from \"gsap\";\nimport Constants from '../common/Constants';\n\nexport default class Marker extends EventDispatcher{\n 'use strict';\n\n static LOAD_COMPLETE = \"Load_Complete\";\n\n\n /** \n *===============================================================================\n * constructor() :\n * @param _objItemData : \n *===============================================================================\n */\n constructor( ) {\n super();\n\n this.planeMarker = null;\n this.init();\n }\n\n /**\n *===============================================================================\n * Init() :\n *===============================================================================\n */\n init() {\n \n this.makeMarker();\n }\n\n\n makeMarker(){\n\n this.planeMarker = BABYLON.Mesh.CreatePlane(\"outputplane\", 1, Constants.SCENE, false);\n this.planeMarker.rotation.x = BABYLON.Tools.ToRadians(90);\n\n let met = new BABYLON.StandardMaterial(\"met_shadow\", Constants.SCENE);\n \n met.opacityTexture = new BABYLON.Texture(Constants.MARKER_IMG_URL ,Constants.SCENE);\n met.opacityTexture.hasAlpha = true;\n met.opacityTexture.level = 2;\n //met.alpha = .3;\n met.diffuseColor = new BABYLON.Color3(0.18,0.62,0.54);\n\n this.planeMarker.material = met;\n this.planeMarker.isVisible = 0;\n\n \n\n }\n\n get mesh(){\n //console.log(this.planeMarker);\n return this.planeMarker;\n }\n\n onPointing(){\n\n this.planeMarker.isVisible = 1;\n this.planeMarker.scaling = new BABYLON.Vector3(1,1,1);\n //this.planeMarker.visibility = .5\n\n const endTweenA = () =>{ \n \n this.planeMarker.isVisible = 0;\n }\n\n gsap.to(this.planeMarker.scaling, {\n duration: 3, \n x: .01,\n y: .01,\n z: .01,\n ease: \"elastic.out(1,0.4)\",\n onComplete: endTweenA\n });\n\n }\n\n}","//import * as BABYLON from '@babylonjs/core';\nimport * as BABYLON from 'babylonjs';\nimport * as recast from \"recast-detour\";\nimport Constants from '../common/Constants.js';\nimport CameraManager from './CameraManager.js';\nimport Marker from './Marker.js';\n\n\nexport default class NavimeshManager {\n\n static m_objInit;\n static m_navimeshManager;\n static agents;\n static arrAvata;\n static marker;\n static isMoveAble = true;\n static arrMeshes;\n static crowd;\n static navmeshParameters;\n static agentParams;\n\n constructor(_objInit) {\n\n if (_objInit !== NavimeshManager.m_objInit) {\n throw new Error(\"NavimeshManager 생성은 다음과 같이 해주세요 - NavimeshManager.GetInstance()\");\n // return;\n }\n\n }\n\n /**\n *===============================================================================\n * GetInstance() :\n *===============================================================================\n */\n static GetInstance() {\n if (NavimeshManager.m_navimeshManager == null) {\n NavimeshManager.m_navimeshManager = new NavimeshManager(NavimeshManager.m_objInit);\n NavimeshManager.m_objInit = {};\n NavimeshManager.GetInstance().setNavimesh();\n }\n return NavimeshManager.m_navimeshManager;\n }\n\n static dispose() {\n NavimeshManager.navigationPlugin.dispose();\n NavimeshManager.navigationPlugin = null;\n\n NavimeshManager.marker.dispose();\n NavimeshManager.marker = null;\n NavimeshManager.agents = null;\n NavimeshManager.arrAvata = null;\n NavimeshManager.arrMeshes = null;\n }\n\n setNavimesh() {\n NavimeshManager.navigationPlugin = new BABYLON.RecastJSPlugin(recast);\n NavimeshManager.marker = new Marker();\n\n NavimeshManager.agents = [];\n NavimeshManager.arrAvata = [];\n NavimeshManager.arrMeshes = [];\n\n NavimeshManager.navmeshParameters = {\n cs: 0.3,\n ch: 0.2,\n walkableSlopeAngle: 35,\n walkableHeight: 1,\n walkableClimb: 1,\n walkableRadius: 1,\n maxEdgeLen: 12.,\n maxSimplificationError: 1.3,\n minRegionArea: 8,\n mergeRegionArea: 20,\n maxVertsPerPoly: 6,\n detailSampleDist: 6,\n detailSampleMaxError: 1,\n };\n\n }\n\n static AddMeshForNavimesh(_mesh) {\n NavimeshManager.arrMeshes.push(_mesh);\n }\n\n static MakeNavimesh(_isVisible = true, _isDebugMode = false) {\n\n for (let i = 0; i < NavimeshManager.arrMeshes.length; i++) {\n let meshNavi = NavimeshManager.arrMeshes[i];\n meshNavi.isVisible = _isVisible;\n // meshNavi.position.y -= 0.1;\n }\n\n let meshRoad = BABYLON.Mesh.MergeMeshes(NavimeshManager.arrMeshes, false);\n // meshRoad.parent = Constants.SCENE.getMeshByName('__root__');\n meshRoad.parent = Constants.CONTAINER_MAP;\n if (meshRoad === undefined) {\n setTimeout(() => { // 아이폰에서 연산속도 부족할 때가 있어서 임시 예외처리\n meshRoad.isVisible = _isVisible;\n }, 500);\n } else { \n meshRoad.isVisible = _isVisible;\n }\n\n NavimeshManager.navigationPlugin.createNavMesh([meshRoad], NavimeshManager.navmeshParameters);\n\n if (_isDebugMode) {\n var navmeshdebug = NavimeshManager.navigationPlugin.createDebugNavMesh(Constants.SCENE);\n navmeshdebug.position = new BABYLON.Vector3(0, 0, 0);\n\n var matdebug = new BABYLON.StandardMaterial('matdebug', Constants.SCENE);\n matdebug.diffuseColor = new BABYLON.Color3(0.1, 0.2, 1);\n matdebug.alpha = .5;\n navmeshdebug.material = matdebug;\n }\n\n NavimeshManager.GetInstance().setCrowd();\n\n Constants.SCENE.onPointerObservable.add((pointerInfo) => {\n\n if (pointerInfo.type === BABYLON.PointerEventTypes.POINTERUP) {\n if (pointerInfo.pickInfo.hit) {\n NavimeshManager.GetInstance().pointerDown(pointerInfo.pickInfo.pickedMesh)\n }\n }\n });\n\n Constants.SCENE.onBeforeRenderObservable.add(NavimeshManager.GetInstance().onNavigating.bind(this));\n }\n\n\n setCrowd() {\n\n const max_num_agent = Constants.MULTI_MAX_NUM + Constants.BOT_NAMES.length;\n NavimeshManager.crowd = NavimeshManager.navigationPlugin.createCrowd(max_num_agent, 1, Constants.SCENE);\n NavimeshManager.agentParams = {\n radius: .8,\n height: 0.2,\n maxAcceleration: 8.0,\n maxSpeed: 5.0,\n collisionQueryRange: 0.5,\n pathOptimizationRange: 0.0,\n separationWeight: 1.0\n };\n }\n\n pointerDown() {\n\n if (CameraManager.cameraMode === CameraManager.MINI_MAP_MODE) return;\n\n /* for(var i = 1; i < _arrPickMeshes.length; i++)\n {\n let pickMesh = _arrPickMeshes[i];\n pickMesh.isPickable = false;\n }\n */\n let startingPoint = NavimeshManager.GetInstance().getGroundPosition();\n\n if (startingPoint) { // we need to disconnect camera from canvas\n //let agentss = crowd.getAgents();\n //console.log(\"PICK POINT :: \", \"Y : \", NavimeshManager.navigationPlugin.getClosestPoint(startingPoint).y);\n\n const naviClosestPoint = NavimeshManager.navigationPlugin.getClosestPoint(startingPoint);\n if (naviClosestPoint.x === 0 && naviClosestPoint.z === 0) return;\n //if(NavimeshManager.navigationPlugin.getClosestPoint(startingPoint).y > 1.1) return;\n NavimeshManager.marker.onPointing();\n NavimeshManager.crowd.agentGoto(NavimeshManager.agents[0], naviClosestPoint);\n\n }\n }\n\n getGroundPosition() {\n if (!NavimeshManager.isMoveAble) return;\n var pickinfo = Constants.SCENE.pick(Constants.SCENE.pointerX, Constants.SCENE.pointerY);\n\n console.log(\"찍힌 PickInfo : \", pickinfo, pickinfo.pickedMesh.name);\n\n // 찍힌 위치가 이동이 가능한 영역으로 등록되어 있다면\n if (pickinfo.hit && Constants.allowedMeshNames.indexOf(pickinfo.pickedMesh.name)>=0) {\n //let point = new BABYLON.Vector3(pickinfo.pickedPoint.x, 0, pickinfo.pickedPoint.z) // y값을 0으로 주면 계단등 높은곳으로 이동을 못함 \n let point = pickinfo.pickedPoint;\n pickinfo.pickedPoint.y += 1;\n // if (pickinfo.pickedPoint.y > 1.20) point = null; //건물등 클릭시 이동 금지\n console.log(\"PICK POINT :: \", \"X : \" + pickinfo.pickedPoint.x + \" / \", \"Y : \" + pickinfo.pickedPoint.y + \" / \", \"Z : \" + pickinfo.pickedPoint.z);\n function _two(n) { return Math.floor(n*100.)/100. }\n console.log(_two(pickinfo.pickedPoint.x) + \", \" + _two(pickinfo.pickedPoint.y) + \", \" + _two(pickinfo.pickedPoint.z));\n return point;\n }\n\n return null;\n }\n\n\n // 매 프레임 렌더링 시에 아바타 특성 조정\n onNavigating() {\n\n let me = NavimeshManager.agents[0];\n NavimeshManager.agents.forEach(agent => {\n \n\n if ( agent === me )\n {\n if (agent === null || agent === undefined) return;\n if (CameraManager.cameraMode === CameraManager.MINI_MAP_MODE) {\n NavimeshManager.crowd.agentGoto(agent, NavimeshManager.navigationPlugin.getClosestPoint(agent.mesh.position));\n NavimeshManager.arrAvata[0].speed = 0;\n agent.mesh.position = NavimeshManager.crowd.getAgentPosition(agent.idx);\n return;\n }\n\n agent.mesh.position = NavimeshManager.crowd.getAgentPosition(agent.idx);\n\n }\n let vel = NavimeshManager.crowd.getAgentVelocity(agent.idx);\n if ( agent.target )\n NavimeshManager.crowd.getAgentNextTargetPathToRef(agent.idx, agent.target.position);\n\n //let dT = _engine.getDeltaTime();\n let nSpeed = vel.length().toFixed(2);\n let pos;\n\n // 속도가 특정 이상이면 작동.\n if (nSpeed >= Constants.AVATAR_THRESHOLD_SPEED) {\n //_avatar.StartAnimation(nSpeed);\n NavimeshManager.arrAvata[agent.idx].speed = nSpeed;\n // vel.normalize();\n // 아바타 방향 전환 - 이동하는 방향으로 회전\n var desiredRotation = Math.atan2(vel.x, vel.z);\n if ( agent==me )\n agent.mesh.rotation = new BABYLON.Vector3(0, desiredRotation, 0);\n else\n agent.trf.rotation = new BABYLON.Vector3(0, desiredRotation, 0);\n pos = agent.mesh.position;\n NavimeshManager.arrAvata[agent.idx].onMoveStart();\n } else {\n if (pos) NavimeshManager.ForceMove(pos);\n NavimeshManager.arrAvata[agent.idx].speed = 0;\n NavimeshManager.arrAvata[agent.idx].onMoveStop();\n }\n });\n }\n\n\n static AddAvatar(_avatar, _targetMesh) {\n NavimeshManager.arrAvata.push(_avatar);\n let pos = _avatar.position || new BABYLON.Vector3(Constants.STARTING_POINT.x, Constants.STARTING_POINT.y, Constants.STARTING_POINT.z);\n let transform = new BABYLON.TransformNode();\n if ( !_targetMesh ) // avatar의 indicator가 없는 경우. 즉 bot일 경우 transform 객체를 \n {\n _avatar.meshAvatar.position = new BABYLON.Vector3(0, 0, 0);\n _avatar.meshAvatar.parent = transform;\n }\n let agentIndex = NavimeshManager.crowd.addAgent(pos, NavimeshManager.agentParams, transform);\n _avatar.agentIndex = agentIndex;\n NavimeshManager.agents.push({\n name: _avatar.strName,\n idx: agentIndex,\n trf: transform,\n mesh: _avatar.meshNavi,\n target: _targetMesh\n });\n\n }\n\n static ForceMove(_vecPosition) {\n NavimeshManager.crowd.agentTeleport(NavimeshManager.agents[0].mesh, NavimeshManager.navigationPlugin.getClosestPoint(_vecPosition));\n //console.log(\"forceMove :::: \", NavimeshManager.agents[0].mesh.position )\n }\n\n static set moveAble(_isAble) {\n NavimeshManager.isMoveAble = _isAble;\n }\n};","import React, { useContext, useEffect, useState } from \"react\";\nimport styled from 'styled-components';\nimport { customEvent } from \"../../common/ga\";\nimport { Block, ContainerBox, TextBox } from \"../../common/StyleMasterComp\"\n\n// import ReactGA from 'react-ga';\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\nimport Utils from \"../../../common/Utils\";\nimport NavimeshManager from \"../../../content/NavimeshManager\";\nimport { MainContext } from \"../../page/PageMain\";\n\nlet CardBox = styled(Block)`\n :first-child { border-top: 1px solid #ddd; }\n :last-child { border-bottom: 1px solid #ddd; }\n width: 100%; height:80px;\n border-bottom:1px solid #ddd;\n display: flex;\n overflow: hidden;\n`;\n\nlet TextContentsBlock = styled(Block)`\n width: calc(100% - 100px);\n`;\n\nlet MoveBtnBlock = styled(Block)`\n width: 100px; margin-top:24px;\n`;\n\nlet OpenBtnBlock = styled(Block)`\n width: 150px; margin-top:24px;\n`;\n\nlet BtnMove = styled.div`\n pointer-events:all;\n position: absolute;\n left:10px;\n cursor: pointer;\n background-color: #00a0e0; \n width:66px; \n height: 36px; \n text-align: center; \n line-height: 35px; \n border-radius: 100px; \n color: #fff;\n`;\n\nlet BtnOpen = styled(BtnMove)`\n width:91px; \n background-color: #003d90; \n`;\n\nfunction BoothListCard(props) {\n let [txtInfo1, setTxtInfo1] = useState({ FontSize:\"20px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n let [txtInfo2, setTxtInfo2] = useState({ FontSize:\"15px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n const mainContext = useContext(MainContext);\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n // console.log(\"BoothListCard : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setTxtInfo1({ FontSize:\"10px\", MarginLeft:\"10px\", MarginTop:\"20px\" });\n setTxtInfo2({ FontSize:\"8px\", MarginLeft:\"10px\", MarginTop:\"5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setTxtInfo1({ FontSize:\"11px\", MarginLeft:\"10px\", MarginTop:\"20px\" });\n setTxtInfo2({ FontSize:\"11px\", MarginLeft:\"10px\", MarginTop:\"5px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setTxtInfo1({ FontSize:\"12px\", MarginLeft:\"10px\", MarginTop:\"15px\" });\n setTxtInfo2({ FontSize:\"12px\", MarginLeft:\"10px\", MarginTop:\"5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setTxtInfo1({ FontSize:\"22px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n setTxtInfo2({ FontSize:\"16px\", MarginLeft:\"10px\", MarginTop:\"5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setTxtInfo1({ FontSize:\"22px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n setTxtInfo2({ FontSize:\"16px\", MarginLeft:\"10px\", MarginTop:\"5px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setTxtInfo1({ FontSize:\"20px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n setTxtInfo2({ FontSize:\"14px\", MarginLeft:\"10px\", MarginTop:\"8px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){\n setTxtInfo1({ FontSize:\"18px\", MarginLeft:\"10px\", MarginTop:\"14px\" });\n setTxtInfo2({ FontSize:\"13px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setTxtInfo1({ FontSize:\"18px\", MarginLeft:\"10px\", MarginTop:\"13px\" });\n setTxtInfo2({ FontSize:\"13px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setTxtInfo1({ FontSize:\"20px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n setTxtInfo2({ FontSize:\"14px\", MarginLeft:\"10px\", MarginTop:\"10px\" });\n }\n },[props.objWindowSize])\n\n function clickMove()\n {\n console.log(\"move to : \", props.data.name, props.data.position);\n NavimeshManager.crowd.agentGoto(0, props.data.position);\n mainContext.setBoothListView(false); // 바로가기 창 닫기\n }\n\n function clickOpen()\n {\n console.log(\"BoothListCard move click\",props.data);\n console.log(\"Link to : \", btoa(props.data.link.split(':')[1]));\n\n Utils.goDeepLink(props.data.link);\n\n }\n\n function keyEnter(e, func)\n {\n if ( e.keyCode === 13 )\n func();\n }\n\n return (\n \n \n \n \n {/* {props.data.id}. */}\n {props.data.name} \n {props.data.desc} \n \n {/* 이동버튼 */}\n \n keyEnter(e, clickMove)}\n\n // ()=>\n // {\n // // console.log(\"BoothListCard move click\",props.data);\n // console.log(\"move to : \", props.data.name, props.data.position);\n // NavimeshManager.crowd.agentGoto(0, props.data.position);\n // mainContext.setBoothListView(false); // 바로가기 창 닫기\n // // Utils.goDeepLink(props.data.link);\n // }}\n >이동\n \n {/* 바로열기 버튼 */}\n \n keyEnter(e, clickOpen)}\n // ()=>{\n // console.log(\"BoothListCard move click\",props.data);\n // // KDG 아래 전부 주석 처리함.\n // // props.funcSendTenant(props.data);\n // // ReactGA.event({\n // // category: '부스 리스트_이동 버튼',\n // // action: '부스 이동',\n // // label:props.data.name+\" 입장\"\n // // });\n\n // // customEvent('부스 리스트_이동 버튼','부스 이동',props.data.name+\" 입장\")\n // // window.location.href = props.data.link;\n // console.log(\"Link to : \", btoa(props.data.link.split(':')[1]));\n\n // Utils.goDeepLink(props.data.link);\n // }}\n >바로 열기\n \n \n \n \n \n )\n}\n\nexport default BoothListCard;","import React, { useState, useEffect} from \"react\";\nimport styled from 'styled-components';\n\nimport { ModalBlackBox, ModalContainerBox } from \"../common/StyleMasterComp\";\nimport Utils_MediaQuery from \"../common/Utils_MediaQuery\";\nimport { BoothListContents } from \"../components/ModalBoothList\";\n\nlet BoothListContentsBoxContainer = styled.div`\n position: absolute;\n left:${props=> props.Left || \"calc(50vw - (768px / 2))\"};\n top:${props=> props.Top ||\"calc(50vh - (762px / 2))\"};\n`;\n\nfunction ModalBoothList(props){\n\n let [contentLocation, setContentLocation] = useState({ Left:\"calc(50vw - (768px / 2))\", Top:\"calc(50vh - (762px / 2))\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n // console.log(\"ModalBoothList : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setContentLocation({ Left:\"0px\", Top:\"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setContentLocation({ Left:\"0px\", Top:\"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setContentLocation({ Left:\"calc(50vw - (768px / 2))\", \n Top:\"calc(\"+ props.objWindowSize.Height/2+\"px - ( 762px / 2))\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S ||\n CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setContentLocation({ Left:\"0px\", Top:\"0px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S){\n setContentLocation({ Left:\"calc(50vw - (557px / 2))\", \n Top:\"calc(\"+ props.objWindowSize.Height/2+\"px - ( 506px / 2))\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){\n setContentLocation({ Left:\"calc(50vw - (605px / 2))\", \n Top:\"calc(\"+ props.objWindowSize.Height/2+\"px - ( 550px / 2))\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setContentLocation({ Left:\"calc(50vw - (605px / 2))\",\n Top:\"calc(\"+ props.objWindowSize.Height/2+\"px - ( 600px / 2))\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setContentLocation({ Left:\"calc(50vw - (768px / 2))\", \n Top:\"calc(\"+ props.objWindowSize.Height/2+\"px - ( 762px / 2))\" });\n }\n },[props.objWindowSize])\n\n return(\n \n \n \n \n \n \n );\n}\n\nexport default ModalBoothList;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAcCAYAAACdz7SqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACrSURBVHgBtdVRCoAgEATQpYvmzfKmU0JCSemuzgwIouD70F3N7gA4rrGbKOXsYlgD1tDhG6w56mLCOzS4AUvSc5MOd0EF7AKZcAhkwFPgCrwEzsAUMAJTQQ8sAXuwFOzAWnAAp8gZm8UD5xonH3f4+biUYILwd+qWhQSGoyyoMAJ1SIExUfhLMBY6zRQMQmsLwSD2UhfMBF2wAhzC1yQrwB84PzeyAmzgXOYnj0mYyii51R8AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAABLCAYAAAD+i+5TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGlSURBVHgB7ZpRbcNAEERHRVAIByEQAiEMagYNA5tBDKEMXAaFYAiG4DKY3qmWEqnxbn92cpH9pPvJfewkmT2N9wxkSLZ5zcu6QE0pyr9ohSzf/h4nqDBElM8TFORCHdf5goJc6DWvyRDSQkEudKDNEQpyobMhYiq/GBQUDxhCBijIhRJtf5yhoPz/hojStgcoyIV6VuKP0RCiOdYXf8w1+KOh7Y8EBY4/Rok/6B/r1fjjDQpoH+tSf3wYQkYoqMkfB9r+0MTCmvwxcPfHVYgXC3d/7P7Y/XErxPQHt5Y/PH/s+eOWaZP+sPKH7GnO8kfzAg2feX2v7El84Y0bjoiG9gk6IRr+TootYmcducC7IyD2qZ7+sd0hEvpGjB3Q0j8hy15CJLQ7YVYIaGkTG+/od0KHSOgPUHpEQr8T4p85aM86JwqMeDEEVNEJDSLJBU6OgA6R8Ak6oezFpiTat0JFQEIk3MPJE4ST2NtB/i+chHfC4AhIiIR+JxwRCSsJJxbbCCeWgLKXEAkfHU4WEVXc4qyJ6KCC91/sie2EFSE9r2+cdRDzA2gClXAwcSKbAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAABLCAYAAAD+i+5TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAG/SURBVHgB7ZpdccNADIQ3RRAIhmAIgRAGDYOGQVwEMQOXQcsgEArhysBloOpmrtOf2FJetL6Z+Ju5l/hBO/FKt2cbICMiJ11jWWewyUXlmg4stNhBphnBQAs1utLSIt5lnh7RFCPOkXRtEYkWaMWmQSSODzIdotEigyHggmhu8EGDSMptsNgjEi2wlcp9kBCNFnkyBIwsH4yGiAOicXxAGctnywdCGMuH2n1wRDRi+2BANFLB9mz5QORetudUuw8aRLL6oIhIqw9k9UEFPvDyQYNIavHBuJgPxD8vUHwwiO2D8HxgHdvic6LyoKs1rj9vNpsPEEQ0M9c+db2Bgf7du0X98EtIMoTEP9AoIqx/I8N58qqFjo6Q+MNMEdI7QlowyB4wRCQhzI1bRnh+OhvfMeJvZvF7SRHidcwJDMTvmEcwELtj8i2jdYz1qiAJqWO89E3rmFbsjqGNdi8I0zqmc4TswEALvRgiKJHwe7R7HUMb7ckQQgtD3ou2NQz9ZwcGYochasckQ0i+VkUYegUDWcPQtZBqwtDFEJJkPT78pQMDLbQ3RHC+qSlCusVFFCFTYSj+DfKEkF5+vjjr8m9fFN94xgHsFKEAAAAASUVORK5CYII=\"","import { useMediaQuery } from 'react-responsive'\n\nexport const PortraitScreen = ({children}) => {\n const isPortrait = useMediaQuery({orientation:'portrait'})\n return isPortrait\n ? children\n : null\n}\n\nexport const LandscapeScreen = ({children}) => {\n const isLandscape = useMediaQuery({orientation:'landscape'})\n return isLandscape\n ? children\n : null\n}\n\nexport const MobileIphone = ({children}) => {\n // const isMobile = useMediaQuery({orientation:'portrait', maxWidth: 376})\n const isMobile = useMediaQuery({maxWidth: 376})\n return isMobile\n ? children\n : null\n}\n\nexport const Mobile = ({children}) => {\n // const isMobile = useMediaQuery({orientation:'portrait', minWidth: 377, maxWidth: 413})\n const isMobile = useMediaQuery({minWidth: 377, maxWidth: 413})\n return isMobile\n ? children\n : null\n}\n\nexport const Tablet = ({children}) => {\n // const isTablet = useMediaQuery({orientation:'portrait', minWidth: 414, maxWidth: 754})\n const isTablet = useMediaQuery({minWidth: 414, maxWidth: 754})\n return isTablet\n ? children\n : null\n}\n\nexport const HeightMin = ({children}) => {\n // const isTablet = useMediaQuery({orientation:'portrait', minWidth: 414, maxWidth: 754})\n const isTabletH = useMediaQuery({maxHeight: 375})\n return isTabletH\n ? children\n : null\n}\n\nexport const HeightMax = ({children}) => {\n // const isTablet = useMediaQuery({orientation:'portrait', minWidth: 414, maxWidth: 754})\n const isTabletH = useMediaQuery({minHeight: 376})\n return isTabletH\n ? children\n : null\n}\n\nexport const TabletBig = ({children}) => {\n // const isDesktop = useMediaQuery({orientation:'portrait', minWidth: 755})\n const isDesktop = useMediaQuery({minWidth: 755, maxWidth: 1024})\n return isDesktop\n ? children\n : null\n}\n\nexport const Desktop = ({children}) => {\n // const isDesktop = useMediaQuery({orientation:'portrait', minWidth: 755})\n const isDesktop = useMediaQuery({minWidth: 1025})\n return isDesktop\n ? children\n : null\n}\n\n\n\n// export { Desktop, Tablet, Mobile, MobileIphone };","import React, { useEffect, useState, useRef } from \"react\";\nimport styled from \"styled-components\";\n\nimport IcoClose from '../images/ico_close.png';\nimport ImgArrowRight from \"../images/ico_arrowRight.png\";\nimport ImgArrowLeft from \"../images/ico_arrowLeft.png\";\nimport { LandscapeScreen, PortraitScreen } from \"../common/MediaQuery\";\nimport Utils_MediaQuery from \"../common/Utils_MediaQuery\";\n\n\nlet ContainerBox = styled.div`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all; \n height:100vh;\n width:100vw;\n z-index: 1000;\n`;\n\nlet BlackBgBox = styled.div`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all; \n height:100vh;\n width:100vw;\n background-color: black;\n opacity: 0.9;\n z-index: 1000;\n`;\n\nlet BtnClose = styled.div`\n pointer-events:all;\n cursor: pointer;\n position: fixed;\n z-index: 1300;\n right: ${props => props.Right};\n top: ${props => props.top};\n width:${props => props.width};\n height:${props => props.height};\n background-image: url(${props => props.ImgURL});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n`;\n\nconst IMG = styled.img`\n width: ${props=>props.Width ||\"610px\"}; \n height: ${props=>props.Height ||\"900px\"};\n`;\n\nconst Container = styled.div`\n position: absolute;\n left :${props=>props.Left || \"calc(50vw - 305px)\"};\n top: ${props=>props.Top || \"calc(50vh - 450px)\"};\n width: ${props=>props.Width ||\"610px\"}; \n height: ${props=>props.Height ||\"900px\"};\n overflow: hidden;\n z-index: 1300;\n`;\n\nlet ButtonRight = styled.div`\n pointer-events:all; cursor: pointer;\n position:absolute; \n float: right;\n right: ${props=>props.Right||\"400px\"}; \n top: ${props=>props.Top || \"calc(50vh - 35px)\"};\n width:${props=>props.Width ||\"35px\"}; \n height:${props=>props.Height||\"69px\"}; \n z-index:1310;\n background-image: url(${props => props.ImgURL});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n filter: drop-shadow(3px 3px 3px #000);\n`;\n\nlet ButtonLeft = styled.div`\n pointer-events:all; cursor: pointer;\n position:absolute; \n /* float: right; */\n left: ${props=>props.Left||\"400px\"}; \n top: ${props=>props.Top || \"calc(50vh - 35px)\"};\n width:${props=>props.Width ||\"35px\"}; \n height:${props=>props.Height||\"69px\"}; \n background-image: url(${props => props.ImgURL});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n z-index:1310;\n filter: drop-shadow(3px 3px 3px #000);\n`;\n\nconst SliderContainer = styled.div`\n width: ${props=>props.Width ||\"610px\"}; \n height: ${props=>props.Height ||\"900px\"};\n background-color: white;\n display: flex;\n`;\n\nfunction ModalCatalog(props){\n\n const [currentSlide, setCurrentSlide] = useState(0);\n const slideRef = useRef(null);\n\n const TOTAL_SLIDES = props.arrCatalogData.length-1;\n const images = props.arrCatalogData;\n\n let [ImgSize, setImgSize] = useState({ Width:\"610px\", Height:\"900px\" });\n let [closeImgSize, setCloseImgSize] = useState({ Width:\"29px\", Height:\"28px\" });\n let [arrowLocation, setArrowLocation] = useState({ Width:\"35px\", Height:\"69px\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"ModalCatalog : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setImgSize({ Width:\"250px\", Height:\"369px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"15px\", Height:\"30px\"});\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setImgSize({ Width:\"300px\", Height:\"443px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"15px\", Height:\"30px\"});\n }\n \n \n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setImgSize({ Width:\"630px\", Height:\"930px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"15px\", Height:\"30px\"});\n }\n \n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setImgSize({ Width:\"678px\", Height:\"1000px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"15px\", Height:\"30px\"});\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setImgSize({ Width:\"163px\", Height:\"240px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"15px\", Height:\"30px\"});\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setImgSize({ Width:\"216px\", Height:\"319px\" });\n setCloseImgSize({ Width:\"13px\", Height:\"13px\" });\n setArrowLocation({ Width:\"15px\", Height:\"30px\"});\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S){\n setImgSize({ Width:\"397px\", Height:\"586px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"30px\", Height:\"59px\"});\n }\n else if(CurrMediaType === Utils_MediaQuery.L_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setImgSize({ Width:\"424px\", Height:\"625px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"30px\", Height:\"59px\"});\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setImgSize({ Width:\"635px\", Height:\"937px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n setArrowLocation({ Width:\"30px\", Height:\"59px\"});\n }\n },[props.objWindowSize])\n\n const nextSlide = () => {\n if (currentSlide >= TOTAL_SLIDES) {\n setCurrentSlide(0);\n } else {\n setCurrentSlide(currentSlide + 1);\n }\n };\n\n const prevSlide = () => {\n if (currentSlide === 0) {\n setCurrentSlide(TOTAL_SLIDES);\n } else {\n setCurrentSlide(currentSlide - 1);\n }\n };\n\n useEffect(() => {\n slideRef.current.style.transition = \"all 0.5s ease-in-out\";\n slideRef.current.style.transform = `translateX(-${currentSlide}00%)`;\n }, [currentSlide]);\n\n return (\n \n \n {(TOTAL_SLIDES > 0)\n ?<>\n \n \n \n :null\n }\n \n \n \n {(TOTAL_SLIDES > 0)\n ?<>\n \n \n \n :null\n }\n \n {\n props.funcSetOpenCatalog(false);\n }} />\n \n \n {images.map((img, i) => )}\n \n \n \n \n );\n}\n\nexport default ModalCatalog;","import React, { useState, useEffect} from \"react\";\nimport styled from \"styled-components\";\nimport ReactPlayer from \"react-player\";\n\nimport IcoClose from '../images/ico_close.png';\nimport Utils_MediaQuery from \"../common/Utils_MediaQuery\";\n\nlet ContainerBox = styled.div`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all; \n height:100vh;\n width:100vw;\n z-index: 1000;\n`;\n\nlet BlackBgBox = styled.div`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all; \n height:100vh;\n width:100vw;\n background-color: black;\n opacity: 0.9;\n z-index: 1100;\n`;\n\n\nlet MovieContentsBoxContainer = styled.div`\n position: absolute;\n left:${props=> props.Left || \"calc(50vw - (768px / 2))\"};\n top:${props=> props.Top ||\"calc(50vh - (762px / 2))\"};\n z-index: 1300;\n`;\n\nlet BtnClose = styled.div`\n pointer-events:all;\n cursor: pointer;\n position: fixed;\n z-index: 1300;\n right: ${props => props.Right};\n top: ${props => props.top};\n width:${props => props.width};\n height:${props => props.height};\n background-image: url(${props => props.ImgURL});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n`;\n\n\nfunction ModalMovie(props){\n\n let [movieSize, setMovieSize] = useState({ Width:\"1280px\", Height:\"720px\" });\n let [closeImgSize, setCloseImgSize] = useState({ Width:\"29px\", Height:\"28px\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n // console.log(\"ModalMovie : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setMovieSize({ Width:\"320px\", Height:\"180px\" });\n setCloseImgSize({ Width:\"30px\", Height:\"30px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setMovieSize({ Width:\"375px\", Height:\"211px\" });\n setCloseImgSize({ Width:\"30px\", Height:\"30px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setMovieSize({ Width:\"412px\", Height:\"232px\" });\n setCloseImgSize({ Width:\"30px\", Height:\"30px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S){\n setMovieSize({ Width:\"753px\", Height:\"424px\" });\n setCloseImgSize({ Width:\"30px\", Height:\"30px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setMovieSize({ Width:\"744px\", Height:\"419px\" });\n setCloseImgSize({ Width:\"30px\", Height:\"30px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setMovieSize({ Width:\"937px\", Height:\"527px\" });\n setCloseImgSize({ Width:\"30px\", Height:\"30px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setMovieSize({ Width:\"427px\", Height:\"240px\" });\n setCloseImgSize({ Width:\"13px\", Height:\"13px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S){\n setMovieSize({ Width:\"567px\", Height:\"319px\" });\n setCloseImgSize({ Width:\"13px\", Height:\"13px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setMovieSize({ Width:\"590px\", Height:\"332px\" });\n setCloseImgSize({ Width:\"13px\", Height:\"13px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.L_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setMovieSize({ Width:\"1000px\", Height:\"563px\" });\n setCloseImgSize({ Width:\"20px\", Height:\"20px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setMovieSize({ Width:\"1666px\", Height:\"937px\" });\n setCloseImgSize({ Width:\"30px\", Height:\"30px\" });\n }\n },[props.objWindowSize])\n console.log(\"rops.strVideoUrl\",props.strVideoUrl)\n return(\n \n \n {\n props.funcSetOpenVideo(false);\n props.funcSetPlaying(true);\n }} />\n \n \n \n \n )\n}\n\nexport default ModalMovie;","import React,{useState, useEffect} from \"react\";\n\n\nfunction AudioBgm(props){\n const [audio] = useState(new Audio('./sound/Netstream_Master.mp3'));\n const [playing, setPlaying] = useState(true);\n\n useEffect(() => {\n playing ? audio.play() : audio.pause();\n audio.loop = true;\n // KDG 볼륨 사운드\n // audio.volume = 1;\n audio.volume = 0.0;\n },[playing]);\n\n useEffect(() => {\n setPlaying(props.isBgmPlay);\n }, [props.isBgmPlay]);\n\n useEffect(() => {\n audio.addEventListener('ended', () => setPlaying(true));\n return () => {\n audio.removeEventListener('ended', () => setPlaying(true));\n };\n }, [playing]);\n\n function handleVisibilityChange() {\n if (document.hidden) {\n // the page is hidden\n setPlaying(false);\n } else {\n // the page is visible\n setPlaying(true);\n }\n }\n\n useEffect(() => {\n document.addEventListener(\"visibilitychange\", handleVisibilityChange, false);\n }, [playing]);\n return(\n <>\n \n );\n}\n\nexport default AudioBgm;","export default __webpack_public_path__ + \"static/media/ico_worldMap_SMG.39b1d832.png\";","import React, { useState, useEffect } from \"react\";\nimport { ContainerBox, ImgButton } from \"../../common/StyleMasterComp\";\n\n// KDG\n// import IcoWorldMap from '../../images/ico_worldMap.png';\nimport IcoWorldMap from '../../images/ico_worldMap_SMG.png';\n// KDG\n// import IcoWorldBack from '../../images/ico_worldBack.png';\nimport IcoWorldBack from '../../images/ico_worldMap_SMG.png';\n// KDG\n// import IcoCompanyList from '../../images/ico_companyList.png';\nimport IcoCompanyList from '../../images/ico_target_list.png';\nimport IcoSatisfaction from '../../images/ico_satisfaction.png';\nimport Utils_MediaQuery from \"../../common/Utils_MediaQuery\";\n\nfunction Topmenu(props){\n\n let [btnSize, setBtnSize] = useState({ Width:\"92px\", Height:\"99px\" });\n let [btnPosition1, setBtnPosition1] = useState({ Left:\"30px\", Top:\"20px\" });\n let [btnPosition2, setBtnPosition2] = useState({ Right:\"30px\", Top:\"20px\" });\n let [btnPosition3, setBtnPosition3] = useState({ Right:\"100px\", Top:\"20px\" }); // 만족도 조사 버튼\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"Topmenu : \",CurrMediaType);\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setBtnSize({ Width:\"50px\", Height:\"54px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"80px\", Top:\"20px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setBtnSize({ Width:\"60px\", Height:\"65px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"90px\", Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setBtnSize({ Width:\"92px\", Height:\"99px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"122px\", Top:\"20px\" });\n }\n \n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setBtnSize({ Width:\"150px\", Height:\"161px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"180px\", Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setBtnSize({ Width:\"50px\", Height:\"54px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"80px\", Top:\"20px\" });\n }\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setBtnSize({ Width:\"60px\", Height:\"65px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"90px\", Top:\"20px\" });\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.L_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setBtnSize({ Width:\"92px\", Height:\"99px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"122px\", Top:\"20px\" });\n }\n \n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setBtnSize({ Width:\"92px\", Height:\"99px\" });\n setBtnPosition1({ Left:\"15px\", Top:\"15px\" });\n setBtnPosition2({ Right:\"15px\", Top:\"15px\" });\n setBtnPosition3({ Right:\"122px\", Top:\"20px\" });\n }\n },[props.objWindowSize])\n\n function worldMapClickControlTrue() { props.funcWorldMapMode(true); }\n function worldMapClickControlFalse() { props.funcWorldMapMode(false); }\n\n function keyEnter(e, func)\n {\n if ( e.keyCode === 13 )\n func();\n }\n\n function clickBoothListModal()\n {\n props.funcBoothListModal();\n }\n return(\n \n {\n (props.isControlMode)\n ?<>\n {keyEnter(e, worldMapClickControlFalse)}}\n />\n \n :<>\n {keyEnter(e, worldMapClickControlTrue)}}\n />\n \n }\n {/* {\n if(props.funcSatisfactionUrl)props.funcSatisfactionUrl();\n }}/> */}\n {keyEnter(e, clickBoothListModal)}}\n />\n \n );\n}\n\nexport default Topmenu;","export default \"data:image/png;base64,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\"","import React from 'react';\nimport styled from 'styled-components';\n\n\nlet Tabs = styled.ul`\n margin:0;\n padding:0;\n`;\n\nlet InactiveTab = styled.li`\n pointer-events:all;\n font-family: 'Spoqa HanSansNeo'; font-size: 18px; color: #fff; font-weight: 600;\n line-height: 38px;\n width:77px; \n height:38px;\n display: block; \n float:left;\n border-radius: 10px 10px 0 0;\n cursor:pointer;\n background: rgba(0, 0, 0, 0.26);\n text-align: center;\n opacity:0.5;\n`;\n\nlet ActiveTab = styled.li`\n pointer-events:all;\n background: linear-gradient(\n to bottom, \n rgba(0, 0, 0, 0.75) 10%,\n rgba(20, 20, 20, 0.65) 25%,\n rgba(20, 20, 20, 0.55) 50%,\n rgba(20, 20, 20, 0.5) 75%,\n rgba(0, 0, 0, 0.46) 100%\n );\n font-family: 'Spoqa HanSansNeo'; font-size: 18px; color: #fff; font-weight: 600;\n line-height: 38px;\n width:77px;\n height:38px;\n display: block;\n float:left;\n border-radius: 10px 10px 0 0;\n text-align: center;\n cursor:pointer;\n`;\n\nfunction ChatTab(props){\n return(\n \n {\n (props.iSelectMenuIndex===0)\n ?
\n { props.funcSelectMenuIndex(0) }}>채널\n { props.funcSelectMenuIndex(1) }}>전체\n
\n :
\n { props.funcSelectMenuIndex(0) }}>채널\n { props.funcSelectMenuIndex(1) }}>전체\n
\n }\n
\n )\n}\n\nexport default ChatTab;","import React, { useEffect, useState, useRef } from 'react';\nimport styled from \"styled-components\";\n\nimport { Block, ContainerBox } from \"../../common/StyleMasterComp\";\n\nimport ChatTab from './ChatTab';\nimport ImgCloseChat from \"../../images/ico_chatOff.png\";\nimport ImgOpenChat from \"../../images/ico_chatOn.png\";\nimport Utils_MediaQuery from '../../common/Utils_MediaQuery';\n\n\nlet MenuBar = styled.div`\n width: 621px; height:38px;\n cursor: pointer;\n left:10px;\n`;\n\nlet ChatContentArea = styled.div`\n pointer-events:all;\n margin:0; padding:0; margin-top:0;\n width: ${props => props.Width || \"621px\"}; \n height: ${props => props.Height || \"296px\"};\n background: rgba(0, 0, 0, 0.46);\n border-radius: 0 0 22px 22px;\n font-size: ${props => props.FontSize || \"16px\"};\n ul{\n list-style-type: none;\n margin: 0; padding: 0;\n overflow-x:hidden;\n overflow-y:scroll;\n ::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: rgba(136,136,136,1);\n }\n ::-webkit-scrollbar { \n border-radius: 10px;\n width:5px;\n background-color: rgba(0,0,0,0.3);\n }\n height:${props=> props.UlHeight ||\"220px\"};\n padding-right:10px;\n padding-top:5px;\n padding-left:5px;\n }\n li{\n padding-top:1px;\n }\n \n text-align: left;\n padding:10px;\n box-sizing:border-box;\n color:#fff;\n text-shadow: 2px 2px 2px #000000;\n`;\n\nlet InputTxtSet = styled.div``;\n\nlet InputBox = styled.input`\n pointer-events:all;\n font-family: 'Spoqa HanSansNeo'; font-size: 16px; color: #fff; font-weight: 600;\n box-sizing: border-box; \n width: ${props => props.Width || \"621px\"}; \n height: 40px; \n position:absolute;\n bottom:0px;\n border-radius: 100px;\n background-color: #ebf3ff; \n border: none; \n color: black;\n padding:0 47px;\n ::placeholder {\n font-family: 'Spoqa HanSansNeo'; font-size: 16px; color: #000; font-weight: 600;\n }\n :focus { \n outline:none; font-weight:600;\n }\n`;\n\nlet BtnOpen = styled.div`\n pointer-events:all;\n bottom:0;\n width:40px;\n height:40px;\n background-image: url(${props => props.ImgURL});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n position: absolute;\n cursor: pointer;\n z-index:20;\n`;\nlet BtnClose = styled.div`\n pointer-events:all;\n bottom:0;\n width:40px;\n height:40px;\n background-image: url(${props => props.ImgURL});\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n position: absolute;\n cursor: pointer;\n z-index:20;\n`;\n\nfunction ChatingBox(props,ref){\n let [iSelectMenuIndex,setSelectMenuIndex] = useState(0);\n let [inputData, setInputData] = useState('');\n let useChatData = [];\n\n const messagesEndRef = useRef(null);\n\n\n let arrUseChatData = () => {\n props.arrChatdata.map((data) => {\n if (iSelectMenuIndex === 0 && data.roomType === \"Room_Type_Normal\") {\n useChatData.push(data);\n } else if (iSelectMenuIndex === 1 && data.roomType === \"Room_Type_Lobby\") {\n useChatData.push(data);\n }\n\n return null;\n })\n }\n\n arrUseChatData();\n\n\n const onKeyPress = (e) => {\n if (inputData === \"\") return;\n if (e.key === 'Enter') {\n\n props.funcSendChatData({menuIndex:iSelectMenuIndex, msg: inputData});\n // setChatData([...chatData, { roomType: \"Room_Type_Normal\", messageType: \"chatting\", msg: inputData }]);\n setInputData(\"\");\n }\n }\n \n\n useEffect(() => {\n { messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" }) }\n });\n\n\n let [chatContentInfo, setChatContentInfo] = useState({ Width:\"621px\", Height:\"334px\", BlackBoxHeight:\"296px\", UlHeight:\"220px\" });\n let [chatFontSize, setChatFontSize] = useState({ FontSize:\"16px\" });\n\n useEffect(() => {\n let CurrMediaType = Utils_MediaQuery.GetMediaDetailType(props.objWindowSize.Width,props.objWindowSize.Height);\n console.log(\"페이지명 : \",CurrMediaType);\n\n if(CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_M_FOLD_S){\n setChatContentInfo({ Width:\"290px\", Height:\"300px\", BlackBoxHeight:\"260px\", UlHeight:\"200px\" });\n setChatFontSize({FontSize:\"12px\"});\n \n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_IPHONE_S){\n setChatContentInfo({ Width:\"340px\", Height:\"300px\", BlackBoxHeight:\"260px\", UlHeight:\"200px\" });\n setChatFontSize({FontSize:\"12px\"});\n }\n else if(CurrMediaType === Utils_MediaQuery.P_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.P_M_DEFAULT_L){\n setChatContentInfo({ Width:\"350px\", Height:\"300px\", BlackBoxHeight:\"260px\", UlHeight:\"200px\" });\n setChatFontSize({FontSize:\"14px\"});\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.P_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.P_T_DEFAULT_L){\n setChatContentInfo({ Width:\"590px\", Height:\"334px\", BlackBoxHeight:\"296px\", UlHeight:\"220px\" });\n setChatFontSize({FontSize:\"15px\"});\n }\n\n else if(CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.P_D_DEFAULT_L){\n setChatContentInfo({ Width:\"621px\", Height:\"334px\", BlackBoxHeight:\"296px\", UlHeight:\"220px\" });\n setChatFontSize({FontSize:\"16px\"});\n }\n\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_FOLD_S){\n setChatContentInfo({ Width:\"480px\", Height:\"150px\", BlackBoxHeight:\"112px\", UlHeight:\"55px\" });\n setChatFontSize({FontSize:\"12px\"});\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_S){\n setChatContentInfo({ Width:\"480px\", Height:\"220px\", BlackBoxHeight:\"180px\", UlHeight:\"120px\" });\n setChatFontSize({FontSize:\"12px\"});\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_M_IPHONE_S ||\n CurrMediaType === Utils_MediaQuery.L_M_ANDROID_S ||\n CurrMediaType === Utils_MediaQuery.L_M_DEFAULT_L){\n setChatContentInfo({ Width:\"480px\", Height:\"210px\", BlackBoxHeight:\"162px\", UlHeight:\"105px\" });\n setChatFontSize({FontSize:\"12px\"});\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_T_GALAXY_S ||\n CurrMediaType === Utils_MediaQuery.L_T_IPAD_S ||\n CurrMediaType === Utils_MediaQuery.L_T_DEFAULT_L){\n setChatContentInfo({ Width:\"500px\", Height:\"312px\", BlackBoxHeight:\"270px\", UlHeight:\"210px\" });\n setChatFontSize({FontSize:\"14px\"});\n }\n\n else if(CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DESKTOP_S ||\n CurrMediaType === Utils_MediaQuery.L_D_DEFAULT_L){\n setChatContentInfo({ Width:\"621px\", Height:\"334px\", BlackBoxHeight:\"296px\", UlHeight:\"220px\" });\n setChatFontSize({FontSize:\"16px\"});\n }\n },[props.objWindowSize])\n\n return(\n \n \n {\n\n (!props.isUseChatRoom)\n ? {\n props.funcUseChatRoom(true);\n }} \n />\n : <>\n \n {\n (iSelectMenuIndex === 0)\n ? \n : \n }\n \n \n
    \n {\n useChatData.map((data, i) => {\n return (\n \n )\n })\n }\n
    \n
\n
\n\n\n \n { setInputData(e.target.value)}} \n onKeyPress={onKeyPress} value={inputData} />\n \n {\n props.funcUseChatRoom(false);\n }} />\n \n }\n
\n
\n )\n}\n\nfunction ChatTxtConvert(props) {\n //console.log(props.data)\n if (props.data.messageType === 'login' && props.data.roomType === 'Room_Type_Normal') {\n return
  • [입장] {props.data.name}{props.data.msg}
  • \n } else if (props.data.messageType === 'logout' && props.data.roomType === 'Room_Type_Normal') {\n return
  • [퇴장] {props.data.name}{props.data.msg}
  • \n } else if (props.data.messageType === 'notice' && props.data.roomType === 'Room_Type_Normal') {\n return
  • [알림]{props.data.msg}
  • \n } else if (props.data.messageType === 'chatting') {\n return
  • {props.data.name} : {props.data.msg}
  • \n } else {\n return null;\n }\n}\n\nexport default React.forwardRef(ChatingBox);","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANJSURBVHgBzZm9btNQFMf/dj1X6VAJxFcqwdx0i0SqukvpgkQlHqDhBVoPDIWBdOBDQtRNX6DhCVpUCUiXuEpB2TBLF0CkLRJIHTCIAUSJOcdxyJfjr5jEP8mKfX1v8ve55x6feyIgLJnHMkwxBUGcgQn6RIJaE/Zdg45q/ai9pUPD/m0NIRAC9ZbVBE6xRGfLLWL8YZJYERp+YxUVpep3mD+BLOwP7tGPLCMKBBT8Ch3x6oDM2hJqwjadyYgOdokbuDD3Dce7ultHdwtOq2pkVuutYB1lRel924m6r20hWqu5oUPCLDTF6LwhOnY/RQmDE8ekbIN00S2Qp5UHDB7Z/u022hfJ9JNFmMIjDI+0vXAqjYamD6bVJMktUUsSw8Ugf5xo+GNzikcozg1fHFOPuTZ1C7L1JHxEnJAwxlaUrIuRpuJeJM+OYnNlDvLUefSD/u4EC3d3UP383b3jaY3jb64xxTI82Lp/vW9xTOrKuPWg3oj8zqcp5qwEUsmru1mO9oUiTK/76TZLFhRlxBWzlmKBk4gtgsw+mERcEYXJ0AIX7uwg+2AXxo9fgdt8YyLBAoNlxoT+/gTb5Q8ovDiwwkaQtoAkJIQgdXkcuWyaHhD/Qo/ftqBQmFG/wocVhxRmDJEez0B8qYpkQx1xxTQPyYK1PcQVwdTJgqIvC2pvPiEqeGX7Q9Tq6ZaPhZI8M4rcrTRmUu2rkbMcNzqzFg49ysYeql88shne6L9SJuwwU8uTWteUi79wkQJuJxw+Shs3HcdkH+6i8PwAoeAqBBoZtST6WvNO8NSvbla62rkttDiGKw9obJqqxZ+4eG2MvDKNELBItmRjuvk662Bt33Bp5LXylE+bexJJyAHhYyILYjfgoy9x7Hu29epaW7mqLlOLimFSQ5asV2hctu+Lj4uVfqY6AvK0ctv25c61mYw66NIHo2NfmepsdK7NSFiwBgwOzSoeOeBefsusUfgRlvB/yZPleqZK7gXMo+JLXJo/bKlBR4lB37tCPpdz6+RdYT0q6jg3/4xe3GMQhKiqXnnLjcqK5tUxWBHdKjCZORo2E6KOY9jC1p0Klb0IJrCVjCpT0JLtbWvSPpp/Q3AizLmmiT3rc9/bWk78BbvJLLi2RMarAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOwSURBVHgBzZm7b9NQFMY/u5FYAKUDEohXELCwkGyRSNWwlDIgqARTl6Z/QBsPDIWhZamQEHVSdlqGLoBUKgZol7pqQd1iFhZATR8SSAw1FQOPNuaca4c0reNXojQ/ybJzfW1/Pj733HNPJIQl9SgNU45DkjthgvaIUmvUPmvQVrS20gfaNCzd1RACKVDvtBrFNgbpKLtLjD9MEitDw188wLJS9HuZP4EsbAfD9JAsGoGESb9C27w6IDU2iJL0io7SaBzsErdwuusH1ud0t47uFuxQ1YZZrbaCHBYVpfZpJyxfm0ZjreaGjgiuQlOMvSdkx+7bmEfzxDFx2yD72C+QPytf0HzS9rOrqB4kHY/7YEoPcXAk7YGzXG6o+GBSjZHceWqJ4WAxyB/Plf2x8onbKM4dvDjGirk2lgXZehGsoJWIoJ2tGBE/2iqKaxE7cRQTQ11IJ06hHvRP39Fz/zWKX7fcO26XOP6OWBa8oq54fd7C014YP38j/6Ig9mEZziTF/urAS6+uBpaU9ojISuDte/GLx8RNtcIG6iF6uIDp0Ru+uiKlpmmQyGk0kUDWN0txFngZLYvEFmyJ0OKMLF0OLVAd6MTEva5Qbb4xEWWBwTJjWAMmeyeBvuuXxHGQtoBEIwgBx7Jnbz4Kh+fjIG1BYYE85wW2Yt/oXOi2ABgyfWcDrUtRphlER6timqtkwdKC3/7Rw4fQVCRTj9DC25cFeYobpBG5dyYoftuqOfFHjxxC/EJl9PIL8j30z34HjKxZyUJK3YTHQIkdPyrmUKdwoYwvIEdJxG5YSI5i4F74RTM0cPjFXOGF/jvlnB1mSnlS65py8Q0T/VP72kf6kyIYa/rG/1DCqRmLU56Q8OcFhIKrECgnrNYycxMhYTE3O84jkZkSn3V+/DZmFr8gO+7bvfezTWk/VR4qa5LUWI70DiIE7FuFiV5hQfZRTmpZbOi8kUsji0rGOixjWZHT/sBBm2EfZZEMi/P0sVqw7+3QIt6u21RXFq6oWWpREZJyGKon40YJGbxXJss/q9fF67PLOHOtnXQnEYJff3bEVgd5GrlV63Ln2kxKbXbpg9FpDZLY2+hcm4mgR1zQPDRRPHLAvfxWx8gOQJ4sV7PE517AXJt9i7Pdq7tq0I3EoPsOkc+NuHXyrrCuzeo42T1DE3c7JKlRVa+8cKNFRfPqGKyILgpM5ghd1hmijmPYwnJOhcpaBBO4G1pUU9BK28vWmL1V/obgRJhzTRMLYr/kbS0n/gG8jFuVxlJDNAAAAABJRU5ErkJggg==\"","import React from \"react\";\nimport styled from \"styled-components\";\n\n\nlet ContainerBox = styled.div`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all; \n height:100vh;\n width:100vw;\n z-index: 1000;\n`;\n\nlet AlphaBgBox = styled.div`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all; \n height:100vh;\n width:100vw;\n background-color: black;\n opacity: 0;\n z-index: 1100;\n`;\n\n\n\nfunction ModalLoading(props){\n \n return(\n \n \n \n )\n}\n\nexport default ModalLoading;","export default __webpack_public_path__ + \"static/media/img_guide_PC.a61aa3a6.png\";","export default __webpack_public_path__ + \"static/media/img_guide_Mobile.07df1b78.png\";","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport ImgTutorialPC from \"../images/img_guide_PC.png\";\nimport ImgTutorialMobile from \"../images/img_guide_Mobile.png\";\nimport { ImgBox, ImgButton } from \"../common/StyleMasterComp\";\nimport { MainContext } from \"../page/PageMain\";\nimport ImgCloseList from \"../images/ico_x.png\";\nimport Utils from \"../../common/Utils\";\n\n\nlet ContainerBox = styled.div`\n position: fixed;\n left: 0;\n top:0;\n pointer-events:all; \n z-index: 1000;\n`;\n // height:520vh;\n // width:120vw;\n\nlet TutorialImg = styled(ImgBox)`\n background-image:url(${!Utils.checkMobileByWidth()?ImgTutorialPC:ImgTutorialMobile});\n width: ${props => cw};\n height: ${props => ch};\n`;\n // top: 50px;\n // position: absolute;\n // left: ${props => cl};\n // left: calc(50% - ((${props => props.Width} / 2)));\n\nconst _minWidth = 300;\n// Calculate Width\nfunction cw( props )\n{\n const _w = props.Width || \"340\";\n return (parseInt(_w)>_minWidth?_minWidth:_w) + \"px\";\n}\n\n// Calculate Width\nfunction ch( props )\n{\n return parseInt( cw(props) ) * (Utils.checkMobileByWidth()?18:18.3)/17 + \"px\";\n}\n\nfunction cl( props )\n{\n const _w = props.Width || \"300\";\n console.log(\"aaaaaaaaaa\", window.screen.width - parseInt(_w/2), window.screen.width, parseInt(_w/2), window.screen)\n return (window.screen.width - parseInt(_w/2))+\"px\";\n\n}\nfunction ModalTutorial(props){\n const mainContext = useContext(MainContext);\n\n const squareSize = () => {\n const min = Math.min( window.screen.width, window.screen.height );\n console.log(\"squareSize : \", min, window.screen.width, window.screen.height);\n return min;\n }\n \n return(\n \n {/*
    */}\n
    \n { mainContext.setFlagOpenTutorial(false); }}\n />\n \n
    \n \n )\n}\n\nexport default ModalTutorial;","import React, { createContext, useContext, useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { Block, ContainerBox } from \"../common/StyleMasterComp\";\nimport { ModalBoothList, ModalCatalog, ModalMovie } from \"../modals\";\nimport Utils_ui from \"../common/Utils_ui\";\n\n\nimport Communicator from \"../../common/Communicator\";\nimport CommunicatorEvent from \"../../common/event/CommunicatorEvent\";\nimport Constants_ui from \"../common/Constants_ui\";\n\nimport {AudioBgm, Topmenu} from \"../components/pageMain\";\nimport ChatingBox from \"../components/pageMain/ChatingBox\";\n\n// import ReactGA from 'react-ga';\nimport { customEvent, pageView } from \"../common/ga\";\nimport ModalLoading from \"../modals/ModalLoading\";\nimport ModalTutorial from \"../modals/ModalTutorial\";\n\nlet ChatingBoxContainer = styled.div`\n position: absolute;\n bottom: 15px;\n left: 15px;\n`;\n\n\nlet ChatdataDefault = [\n { roomType: \"Room_Type_Normal\", messageType: \"chatting\", name: \"SMG\", msg: \"안녕하세요, 버추얼 새만금에 오신 것을 환영합니다. 왼쪽 상단에는 전체를 볼 수 있는 월드맵이, 오른쪽 상단에는 인게이지 메타버스에 쉽게 접근할수 있는 목록이 있습니다.\" }\n , { roomType: \"Room_Type_Lobby\", messageType: \"chatting\", name: \"SMG\", msg: \"안녕하세요, 버추얼 새만금에 오신 것을 환영합니다. 왼쪽 상단에는 전체를 볼 수 있는 월드맵이, 오른쪽 상단에는 인게이지 메타버스에 쉽게 접근할수 있는 목록이 있습니다.\" }\n]\n\n\nexport const MainContext = createContext(null);\n\nfunction PageMain(props){\n let [isControlMode, setControlMode] = useState(true);\n let [isBoothListView, setBoothListView] = useState(false);\n let [isEnterBooth, setIsEnterBooth] = useState(false);\n let [flagOpenTutorial, setFlagOpenTutorial] = useState(true);\n\n let [isUseChatRoom, setUseChatRoom] = useState(false);\n let [chatData, setChatData] = useState(ChatdataDefault);\n\n let [isOpenCatalog, setOpenCatalog] = useState(false);\n let [arrCatalogData, setCatalogData] = useState([]);\n \n const sampleRef = useRef({});\n const contextValue = {\n setBoothListView, // context에 bootListView를 show할 flag변수의 set 함수를 설정\n setFlagOpenTutorial,\n }\n\n let worldMapMode = (_isWorldMapView) =>{\n if(_isWorldMapView === null) return;\n\n if(_isWorldMapView) Communicator.sendEvent(CommunicatorEvent.CHANGE_CAMERA_MODE, \"Play_Mode\");\n else Communicator.sendEvent(CommunicatorEvent.CHANGE_CAMERA_MODE, \"Mini_Map_Mode\");\n \n setControlMode(_isWorldMapView);\n }\n\n // 만족도 조사 버튼 클릭\n let satisfactionUrl = () => {\n window.open(\"https://forms.gle/2xVdNY99sbABrwnG8\", '_blank');\n }\n\n // 부스 리스트 버튼 클릭\n let boothListModal = () => {\n setBoothListView(true);\n }\n\n //부스 리스트 팝업에서 이동 버튼 클릭 시\n let sendTenant = (_objVar) => {\n console.log(\"sendTenant\")\n Communicator.sendEvent(CommunicatorEvent.GO_TO_TENANT, { id: _objVar.id });\n setBoothListView(false)\n setControlMode(true);\n }\n\n //서버에서 보내온 신규 챗 데이터\n let updateChatData = (_objVar) => {\n ChatdataDefault = [...ChatdataDefault, { roomType: _objVar.roomType, messageType: _objVar.messageType, name: _objVar.name, msg: _objVar.msg }];\n //ChatdataDefault.push({ roomType: _objVar.roomType, messageType: _objVar.messageType, name: _objVar.name, msg: _objVar.msg });\n setChatData(ChatdataDefault);\n }\n\n\n let sendChatData = (_objVar) => {\n if (_objVar.menuIndex === 0) {\n if(!Constants_ui.TESTMODE_CHAT)\n {\n Communicator.sendEvent(CommunicatorEvent.SEND_CHAT_MESSAGE,\n { roomType: \"Room_Type_Normal\", messageType: \"chatting\", msg: _objVar.msg });\n }else{\n updateChatData({ roomType: \"Room_Type_Normal\", messageType: \"chatting\", msg: _objVar.msg, name:\"테스트모드\"})\n }\n } else {\n Communicator.sendEvent(CommunicatorEvent.SEND_CHAT_MESSAGE,\n { roomType: \"Room_Type_Lobby\", messageType: \"chatting\", msg: _objVar.msg });\n }\n }\n\n let [isBgmPlay,setBgmPlay] = useState(true);\n let [isOpenVideo, setOpenVideo] = useState(false);\n let [strVideoUrl, setVideoUrl] = useState('');\n\n let onOpenVideo = (_strVars) => {\n //console.log('비디오 팝업 URL:', _strVars);\n if (_strVars !== \"\") {\n setVideoUrl(_strVars);\n setOpenVideo(true);\n setBgmPlay(false);\n }\n }\n\n let onOpenBoardVideo= (_objVar) => {\n console.log(\"onOpenBoardVideo :\", _objVar);\n if (_objVar.boardType === \"A\") {\n // ReactGA.event({\n // category: \"총장님 말씀 전광판\"\n // , action: \"전광판 클릭\"\n // , label: \"동영상 팝업\"\n // });\n customEvent(\"총장님 말씀 전광판\",\"전광판 클릭\",\"동영상 팝업\")\n } else if (_objVar.boardType === \"B\") {\n // ReactGA.event({\n // category: \"산관학 전광판\"\n // , action: \"전광판 클릭\"\n // , label: \"동영상 팝업\"\n // });\n customEvent(\"산관학 전광판\",\"전광판 클릭\",\"동영상 팝업\");\n }\n onOpenVideo(_objVar.url);\n }\n\n let onOpenCatalog = (_strVars) => {\n //console.log('이미지 팝업 URL:', _strVars);\n if (_strVars !== \"\") {\n setCatalogData(_strVars);\n setOpenCatalog(true);\n }\n }\n\n let onOpenUrl = (_strUrl) => {\n if (_strUrl !== \"\") window.open(_strUrl, '_blank');\n }\n\n let onOpenPDFUrl=(_strUrl)=>{\n if (_strUrl !== \"\") window.open(_strUrl, '_blank');\n }\n\n let onEnterBooth=(_objVar)=>{\n console.log(\"onEnterBooth :\", _objVar);\n if(_objVar !== null && _objVar.name !== \"\")\n // ReactGA.event({\n // category: '부스 입장',\n // action: '부스 이동',\n // label:_objVar.name+\" 입장\"\n // });\n setIsEnterBooth(true); // 부스 애니메이션 시작\n customEvent('부스 입장','부스 이동',_objVar.name+\" 입장\"); //통계\n }\n\n useEffect(() => {\n \n Communicator.reciveEvent(CommunicatorEvent.OPEN_VIDEO, onOpenVideo);\n Communicator.reciveEvent(CommunicatorEvent.OPEN_CATALOG, onOpenCatalog);\n \n //전광판 클릭 시 영상 재생팝업\n Communicator.reciveEvent(CommunicatorEvent.OPEN_BOARDVIDEO, onOpenBoardVideo);\n\n Communicator.reciveEvent(CommunicatorEvent.OPEN_URL_LINK, onOpenUrl);\n Communicator.reciveEvent(CommunicatorEvent.OPEN_PDF, onOpenPDFUrl);\n\n Communicator.reciveEvent(CommunicatorEvent.ENTER_BOOTH, onEnterBooth);\n Communicator.reciveEvent(CommunicatorEvent.RECEIVE_CHAT_MESSAGE, updateChatData);\n\n Communicator.reciveEvent(CommunicatorEvent.ANIMEND_BOOTH,()=>{setIsEnterBooth(false)});\n pageView(\"/main\"); //통계\n }, [])\n\n return(\n \n \n \n \n \n \n \n \n {\n (isControlMode) \n ? \n : null\n }\n \n \n\n {isBoothListView ? :null }\n {isOpenVideo ? : null}\n {isOpenCatalog ? : null}\n {isEnterBooth ? : null}\n {flagOpenTutorial ? : null}\n \n\n \n )\n}\n\nexport default PageMain;","import { debounce } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { Block } from \"./common/StyleMasterComp\";\n\nimport DataManager from '../common/data/DataManager';\nimport Constants_ui from './common/Constants_ui';\nimport Utils_ui from './common/Utils_ui';\n\nimport PageAuth from './page/PageAuth';\nimport PageLoading from './page/PageLoading';\nimport PageMain from './page/PageMain';\n\nlet AppContainerBox = styled.div`\n margin:0; padding:0;\n width: 100vw; \n height: ${props => ((props.ContainerHeight))};\n pointer-events:none;\n position: fixed;\n`;\n\nlet m_arrData = [];\n\nfunction App() {\n const [strSelectPageName, setSelectPageName] = useState(Constants_ui.PAGE_START);\n const [windowSize, setWindowSize] = useState({\n Width: window.innerWidth,\n Height: window.innerHeight\n });\n\n // handleResize 함수를 debounce로 감싸고, 시간을 설정한다\n // 1000ms = 1sec\n const handleResize = debounce(() => {\n setWindowSize({\n Width: window.innerWidth,\n Height: window.innerHeight\n });\n }, 500);\n \n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => { // cleanup \n window.removeEventListener('resize', handleResize);\n }\n }, [handleResize]);\n\n\n \n useEffect(()=>{\n m_arrData = DataManager.GetCompanyDatas();\n let tempData = [...m_arrData];\n tempData = Utils_ui.SortJSON(tempData, \"id\", \"asc\");\n m_arrData = [...tempData];\n console.log(tempData)\n\n console.log(\"ENV : \", process.env);\n },[]);\n\n return (\n \n {\n Constants_ui.TESTMODE\n ?testMode : {windowSize.Width},{windowSize.Height}, ver : {process.env.REACT_APP_VERSION} \n :null\n }\n \n \n \n );\n}\n\nfunction SelectSubPage(props) {\n if (props.strPageName === Constants_ui.PAGE_LOADING){\n return ;\n } else if (props.strPageName === Constants_ui.PAGE_AUTH) {\n return ;\n } else if (props.strPageName === Constants_ui.PAGE_MAIN) {\n return ;\n }\n}\n\nexport default App;","import Communicator from '../common/Communicator.js';\nimport Constants from '../common/Constants.js';\nimport CommunicatorEvent from '../common/event/CommunicatorEvent.js';\nexport default class LoadingProgressManager\n{\n static LOADED_DATA;\n\n constructor(_objInit)\n {\n //super();\n if (_objInit !== LoadingProgressManager.m_objInit) \n {\n throw new Error( \"LoadingProgressManager 생성은 다음과 같이 해주세요 - LoadingProgressManager.GetInstance()\" ); \n // return;\n }\n }\n\n static GetInstance(_scene, _avatar)\n {\n if(LoadingProgressManager.m_loadingProgressManager == null) \n {\n LoadingProgressManager.m_loadingProgressManager = new LoadingProgressManager(LoadingProgressManager.m_objInit);\n LoadingProgressManager.m_objInit = {};\n\n LoadingProgressManager.LOADED_DATA = 0;\n }\n return LoadingProgressManager.m_loadingProgressManager;\n }\n\n \n static AddData(_nData){\n if(_nData === NaN || NaN === undefined)return;\n LoadingProgressManager.LOADED_DATA += _nData;\n let nPercent = LoadingProgressManager.LOADED_DATA / Constants.TOTAL_DATA * 100;\n //console.log(\"AddData :::: \", _nData, LoadingProgressManager.LOADED_DATA, nPercent);\n Communicator.sendEvent(CommunicatorEvent.WORLD_LOADING, nPercent);\n }\n};\n\n","/**\n @Class : Avatar\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 아바타 클래스\n */\n\nimport * as BABYLON from 'babylonjs';\nimport LoadingProgressManager from './LoadingProgressManager';\nimport * as GUI from 'babylonjs-gui';\nimport Constants from '../common/Constants';\nimport EventDispatcher from '../common/event/EventDispatcher';\nimport gsap from \"gsap\";\nimport Utils from '../common/Utils';\n\nexport default class Avatar extends EventDispatcher {\n 'use strict';\n\n static LOAD_COMPLETE = \"Load_Complete\";\n static MAKE_COUNT = 0;\n static AVATAR_MESH = null;\n\n /**\n *===============================================================================\n * constructor() :\n * @param _strMeshURL : \n *===============================================================================\n */\n constructor(_strMeshURL = null, _isHost = true, name=null) {\n super();\n\n Avatar.MAKE_COUNT += 1;\n this.strUniqueID = \"_\" + String(Avatar.MAKE_COUNT);\n\n this.strMeshURL = _strMeshURL;\n this.meshAvatar = null;\n this.meshShadow = null;\n this.meshBody = null;\n this.meshHead = null;\n this.meshNavi = null;\n this.strName = name;\n this.planeText = null;\n this.isGo = false;\n this.isHost = _isHost;\n this.nNamePosition = 1.6;\n this.iSwingCountFrame = 0;\n this.iSwingCycle = Utils.Random(30, 50);\n this.nSwingSpeed = 2;\n this.nFloatingAmplitude = .2;\n this.sweatParticle1 = null;\n this.sweatParticle2 = null;\n this.sweat = null;\n this.walkAnimation = null;\n this.isIdleAnim = false;\n this.agentIndex = null;\n\n this.statusData = {\n position: {\n x: 0,\n y: 0,\n z: 0\n },\n rotation: {\n x: 0,\n y: 0,\n z: 0\n },\n name: \"younghee\"\n }\n\n this.camera = null;\n this.isBoothMode = false;\n this.init();\n }\n\n /**\n *===============================================================================\n * dispose() :\n *===============================================================================*/\n dispose() {\n //console.log(\":::::: Avatar dipose ::::::\");\n this.iSwingCountFrame = 0;\n Constants.SCENE.onBeforeAnimationsObservable.removeCallback(this.onMoveAvatar.bind(this));\n Constants.SCENE.onBeforeAnimationsObservable.removeCallback(this.onFlowNameteg.bind(this));\n Constants.SCENE.onBeforeAnimationsObservable.removeCallback(this.floating.bind(this));\n\n if (this.textblock) this.textblock.dispose();\n if (this.planeText) this.planeText.dispose();\n\n this.strMeshURL = null;\n if ( this.meshShadow )\n {\n this.meshShadow.material.dispose();\n this.meshShadow.dispose();\n }\n this.meshAvatar.dispose();\n }\n\n /**\n *===============================================================================\n * init() :\n *===============================================================================*/\n async init() {\n this.setNavimesh();\n await this.loadMesh();\n\n // KDG\n // this.setFirstPersonMove();\n }\n\n /**\n *===============================================================================\n * loadMesh() : 아바타 로드\n *===============================================================================*/\n async loadMesh() {\n let loadData = 0;\n\n const onMeshLoadProgress = (_data) => {\n let dataUnit = _data.loaded - loadData;\n loadData = _data.loaded;\n LoadingProgressManager.AddData(dataUnit);\n }\n // 아바타 파일 로드\n let avatarLoad = null;\n if ( Avatar.AVATAR_MESH && !this.strMeshURL )\n {\n console.log(\"---=== 기존 아바타 사용\");\n this.meshAvatar = Avatar.AVATAR_MESH.clone(this.strName);\n this.setShadow(true);\n }\n else\n {\n console.log(\"---=== 아바타 새로 로드\");\n avatarLoad = await BABYLON.SceneLoader.ImportMeshAsync(\"\", Constants.ASSETS_URL, this.strMeshURL, Constants.SCENE, onMeshLoadProgress);\n this.meshAvatar = avatarLoad.meshes[0];\n if ( !Avatar.AVATAR_MESH )\n Avatar.AVATAR_MESH = this.meshAvatar;\n this.meshAvatar.name = \"player\" + this.strUniqueID;\n this.meshAvatar.position = new BABYLON.Vector3(Constants.STARTING_POINT.x, Constants.STARTING_POINT.y, Constants.STARTING_POINT.z);\n this.setShadow();\n\n }\n // KDG\n // let scale = .7;\n let scale = 1.0;\n this.meshAvatar.scaling = new BABYLON.Vector3(scale, scale, scale);\n this.meshAvatar.animations.forEach( i=> { i.speedRatio=.9; } );\n // console.log(\"avatar animation : \", this.mesh, Constants.SCENE.animationGroups);\n // console.log(\"avatar animation : \", this.meshAvatar, this.meshAvatar.animations);\n\n // this.meshBody = Constants.SCENE.getMeshByName(\"Yirumae_Idle\");\n // this.meshBody = Constants.SCENE.getMeshByName(\"Null.2 (Copy)\");\n // this.meshBody.material.name = \"Mat_Yirumae\";\n\n // this.meshBody = this.meshAvatar.clone(\"MeshBody\");\n // this.meshBody.material = new BABYLON.StandardMaterial(\"matMeshBody\", Constants.SCENE);\n // console.log(\"메쉬 바디 : \", this.meshBody);\n // this.meshBody.material._roughness = 1\n // this.meshBody.name = this.meshBody.name + this.strUniqueID;\n\n if (Constants.SCENE.animationGroups.length > 0) {\n for (let i = 0; i < Constants.SCENE.animationGroups.length; i++) {\n if (Constants.SCENE.animationGroups[i].name === \"Armature|Take 001|BaseLayer\") {\n this.walkAnimation = Constants.SCENE.animationGroups[i];\n this.walkAnimation.name = \"PlayerAnimation\"\n this.walkAnimation.speedRatio = 0.3;\n this.walkAnimation.start(true, 0.3, this.walkAnimation.from, this.walkAnimation.to/2)\n }\n }\n }\n\n let loadData2 = 0;\n const onMeshLoadProgress2 = (_data) => {\n let dataUnit = _data.loaded - loadData2;\n loadData2 = _data.loaded;\n LoadingProgressManager.AddData(dataUnit);\n }\n\n // 아바타 이동시 땀 파일 로드\n let avatarSweatLoad = await BABYLON.SceneLoader.ImportMeshAsync(\"\", Constants.ASSETS_URL, Constants.AVATAR_SWEAT_FILE_NAME, Constants.SCENE, onMeshLoadProgress2);\n this.sweat = avatarSweatLoad.meshes[0];\n this.sweat.parent = this.meshAvatar;\n this.sweat.setEnabled(false);\n }\n\n /**\n *===============================================================================\n * setShadow() : 그림자 설정\n *===============================================================================*/\n // KDG - player와 봇의 그림자를 사용하면 느려져 성능이 대폭 저하되어 일단 뺌\n setShadow( flagIsBot=false ) {\n // let mat = new BABYLON.StandardMaterial(\"mat_shadow\", Constants.SCENE);\n // this.meshShadow = new BABYLON.Mesh.CreatePlane(\"avatar_shadow\", 2, Constants.SCENE);\n // this.meshShadow.material = mat;\n // mat.opacityTexture = new BABYLON.Texture(Constants.AVATAR_SHADOW_IMAGE_URL, Constants.SCENE);\n // mat.opacityTexture.hasAlpha = true;\n // mat.opacityTexture.level = 2;\n // mat.alpha = .3;\n // mat.diffuseColor = new BABYLON.Color3(0, 0, 0);\n\n // // const p = this.meshAvatar.position;\n // // this.meshShadow.position = new BABYLON.Vector3(p.x, 0.1, p.z);\n // this.meshShadow.position.y = 0.3;\n // this.meshShadow.rotation = new BABYLON.Vector3(BABYLON.Tools.ToRadians(90), BABYLON.Tools.ToRadians(180), 0);\n // this.meshShadow.scaling = new BABYLON.Vector3(.7, .7, .7);\n\n // this.meshShadow.visibility = .4;\n // this.meshShadow.parent = this.meshAvatar;;\n\n Constants.SCENE.onBeforeAnimationsObservable.add(this.floating.bind(this));\n if (this.isHost) Constants.SCENE.onBeforeAnimationsObservable.add(this.onMoveAvatar.bind(this));\n\n this.dispatchEvent({\n type: Avatar.LOAD_COMPLETE,\n data: null\n })\n }\n\n /**\n *===============================================================================\n * setNavimesh() : navimesh용 객체 생성\n *===============================================================================*/\n setNavimesh() {\n // KDG 아바타 발밑 네모\n this.meshNavi = BABYLON.MeshBuilder.CreateBox(\"NavimeshAgent\", {\n size: .01,\n height: .01\n }, this.scene);\n this.meshNavi.position.y = 0.2;\n // KDG\n // this.meshNavi.isVisible = false;\n this.meshNavi.isVisible = true;\n this.meshNavi.visibility = .3;\n }\n\n /**\n *===============================================================================\n * makeNameText() : 아바타 네임택 설정\n *===============================================================================*/\n makeNameText() {\n if (this.strName === undefined) this.strName = \"Nickname\"\n\n const planeText = this.meshAvatar.getChildren(null, false).find(i=>i.name.indexOf('NameBoard')>=0);\n console.log(\"이름 세팅 \", planeText, this.meshAvatar.getChildren(null, false));\n if ( planeText )\n {\n planeText.parent = null;\n planeText.dispose();\n }\n\n this.planeText = BABYLON.Mesh.CreatePlane(\"NameBoard\", 3, Constants.SCENE, false);\n this.planeText.isPickable = false;\n this.planeText.material = new BABYLON.StandardMaterial(\"NameBoard_met\", Constants.SCENE);\n this.planeText.scaling.scaleInPlace(1.5);\n //this.planeText.material.transparencyMode = 3;\n\n // if (this.meshAvatar) {\n // this.planeText.position.x = this.meshAvatar.position.x;\n // this.planeText.position.z = this.meshAvatar.position.z;\n this.planeText.position.y = this.meshAvatar.position.y + this.nNamePosition; //2.5;\n // }\n this.planeText.parent = this.meshAvatar;\n\n this.planeText.billboardMode = BABYLON.AbstractMesh.BILLBOARDMODE_ALL;\n\n var advancedTexture = GUI.AdvancedDynamicTexture.CreateForMesh(this.planeText, 512, 512, true, true);\n advancedTexture.isPickable = false;\n //advancedTexture.transparencyMode = 3;\n\n var panel = new GUI.StackPanel();\n advancedTexture.addControl(panel);\n\n this.textblock = new GUI.TextBlock();\n this.textblock.height = \"1000px\";\n this.textblock.color = \"#FFFFFF\";\n this.textblock.fontSize = 30;\n this.textblock.fontFamily = 'Nanum Gothic';\n this.textblock.fontStyle = \"Bold\";\n this.textblock.disabledColor = \"#555555\";\n this.textblock.text = this.strName;\n this.textblock.drawOutline = true;\n this.textblock.outlineColor = \"#999999\";\n this.textblock.outlineWidth = 5;\n\n console.log(\"NameText : \", this.textblock.text);\n\n panel.addControl(this.textblock);\n\n Constants.SCENE.onBeforeAnimationsObservable.add(this.onFlowNameteg.bind(this));\n }\n\n /**\n *===============================================================================\n * get status() : status getter\n * @return : status 객체\n *===============================================================================*/\n get status() {\n return this.statusData;\n }\n\n /**\n *===============================================================================\n * set name() : 회원 닉네임 setter\n * @param _strName : 회원 닉네임 스트링\n *===============================================================================*/\n set name(_strName) {\n this.strName = _strName;\n this.statusData.name = _strName;\n\n if (_strName.indexOf(\"[GM]\") !== -1) {\n this.meshAvatar.scaling = new BABYLON.Vector3(1.5, 1.5, 1.5);\n this.meshShadow.scaling = new BABYLON.Vector3(1.5, 1.5, 1.5);\n this.nNamePosition = 3;\n }\n this.makeNameText();\n }\n\n /**\n *===============================================================================\n * get name() : 회원 닉네임 getter\n * @return : 회원 닉네임 스트링\n *===============================================================================*/\n get name() {\n return this.statusData.name;\n }\n\n /**\n *===============================================================================\n * set position() : 아바타 포지션 setter\n * @param _vecPosition : 아바타 포지션 BABYLON.Vector3\n *===============================================================================*/\n set position(_vecPosition) {\n this.meshAvatar.position = _vecPosition;\n if ( this.meshShadow )\n {\n this.meshShadow.position.x = _vecPosition.x;\n this.meshShadow.position.z = _vecPosition.z;\n }\n\n //this.meshAvatar.position.y = _vecPosition.y;\n }\n\n /**\n *===============================================================================\n * get position() : 아바타 포지션 getter\n * @return : 아바타 포지션 BABYLON.Vector3\n *===============================================================================*/\n get position() {\n\n return this.meshAvatar.position;\n }\n\n /**\n *===============================================================================\n * set rotation() : 아바타 로테이션 setter\n * @param _vecRotation : 아바타 로테이션 BABYLON.Vector3\n *===============================================================================*/\n set rotation(_vecRotation) {\n this.meshAvatar.rotation = _vecRotation;\n }\n\n /**\n *===============================================================================\n * get rotation() : 아바타 로테이션 getter\n * @return : 아바타 로테이션 BABYLON.Vector3\n *===============================================================================*/\n get rotation() {\n\n return this.meshAvatar.rotation;\n }\n\n /**\n *===============================================================================\n * set mesh() : 아바타 포지션 setter\n * @param _vecPosition : 아바타 포지션 BABYLON.Vector3\n *===============================================================================*/\n get mesh() {\n return this.meshAvatar;\n }\n\n /**\n *===============================================================================\n * get position() : nevimesh용 객체 getter\n * @return : nevimesh용 mesh 객체\n *===============================================================================*/\n get meshNevi() {\n return this.meshNavi;\n }\n\n /**\n *===============================================================================\n * onMoveAvatar() : 아바타 이동 -- 포지션 및 로테이션 상태 업데이트\n *===============================================================================*/\n onMoveAvatar() {\n this.meshAvatar.position.x = this.meshNavi.position.x;\n this.meshAvatar.position.z = this.meshNavi.position.z;\n this.meshAvatar.rotation.y = this.meshNavi.rotation.y;\n // this.meshShadow.position.y = this.meshNavi.position.y;\n\n // 멀티플레이 전송용\n this.statusData.position.x = this.meshAvatar.position.x;\n this.statusData.position.z = this.meshAvatar.position.z;\n this.statusData.rotation.x = this.meshAvatar.rotation.x;\n this.statusData.rotation.y = this.meshAvatar.rotation.y;\n this.statusData.rotation.z = this.meshAvatar.rotation.z;\n\n if ( this.meshShadow )\n {\n // this.statusData.position.x = this.meshShadow.position.x = this.meshAvatar.position.x;\n this.meshShadow.position.y = this.meshNavi.position.y;\n // this.statusData.position.z = this.meshShadow.position.z = this.meshAvatar.position.z;\n this.meshShadow.rotation = new BABYLON.Vector3(BABYLON.Tools.ToRadians(90), this.meshAvatar.rotation.y, 0);\n\n }\n\n }\n\n /**\n *===============================================================================\n * onFlowNameteg() : 네임텍 Flowing 이벤트\n *===============================================================================*/\n onFlowNameteg() {\n // this.planeText.position.x = this.meshAvatar.position.x;\n // this.planeText.position.z = this.meshAvatar.position.z;\n // this.planeText.position.y = this.meshAvatar.position.y + this.nNamePosition; //2.5;\n }\n\n /**\n *===============================================================================\n * floating() : 플로팅 애니메이션\n *===============================================================================*/\n floating() {\n this.iSwingCountFrame++;\n let degree = Math.sin(this.iSwingCountFrame / (this.iSwingCycle) * this.nSwingSpeed) * this.nFloatingAmplitude + 0.75;\n if (this.meshAvatar) this.meshAvatar.position.y = degree;\n }\n\n /**\n *===============================================================================\n * onMoveStart() : 캐릭터 움직임 시작 -- 캐릭터 이동 모션\n *===============================================================================*/\n onMoveStart() {\n if (this.isGo) return;\n\n this.sweat.setEnabled(true);\n if ( this.walkAnimation )\n this.walkAnimation.speedRatio = 1;\n\n this.isGo = true;\n this.meshAvatar.rotation = new BABYLON.Vector3(0, this.meshNavi.rotation.y, BABYLON.Tools.ToRadians(0));\n\n gsap.to(this.meshAvatar.rotation, {\n duration: .5,\n x: BABYLON.Tools.ToRadians(20),\n ease: \"power1.outout\"\n });\n }\n\n /**\n *===============================================================================\n * onMoveStop() : 캐릭터 멈춤 -- 캐릭터 멈춤 모션\n *===============================================================================*/\n onMoveStop() {\n this.isGo = false;\n gsap.to(this.meshAvatar.rotation, {\n duration: 1,\n x: BABYLON.Tools.ToRadians(0),\n ease: \"power1.outout\"\n });\n\n if ( this.sweat )\n {\n this.sweat.setEnabled(false);\n if ( this.walkAnimation )\n this.walkAnimation.speedRatio = 0.3;\n\n }\n }\n\n // KDG\n setFirstPersonMove()\n {\n // console.log(\"physics ok? : \", Constants.SCENE.getPhysicsEngine().isSupported());\n // var physicsPlugin = new BABYLON.CannonJSPlugin();\n // var physicsPlugin = new BABYLON.OimoJSPlugin();\n // Constants.SCENE.enablePhysics(new BABYLON.Vector3(0, -9,8, 0), physicsPlugin);\n\n this.meshAvatar.physicsImpostor = new BABYLON.PhysicsImpostor(this.meshAvatar, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 1, restitution: 0.0, friction: 0.1 }, Constants.SCENE);\n var moveForward = false;\n var moveBackward = false;\n var moveRight = false;\n var moveLeft = false;\n\n var onKeyDown = function (event)\n {\n switch (event.keyCode)\n {\n case 38: // up\n case 87: // w\n moveForward = true;\n break;\n\n case 37: // left\n case 65: // a\n moveLeft = true; break;\n\n case 40: // down\n case 83: // s\n moveBackward = true;\n break;\n\n case 39: // right\n case 68: // d\n moveRight = true;\n break;\n\n case 32: // space\n break;\n }\n };\n\n var onKeyUp = function (event)\n {\n switch (event.keyCode)\n {\n case 38: // up\n case 87: // w\n moveForward = false;\n break;\n\n case 37: // left\n case 65: // a\n moveLeft = false;\n break;\n\n case 40: // down\n case 83: // a\n moveBackward = false;\n break;\n\n case 39: // right\n case 68: // d\n moveRight = false;\n break;\n }\n };\n\n document.addEventListener('keydown', onKeyDown, false);\n document.addEventListener('keyup', onKeyUp, false);\n\n\n Constants.SCENE.registerBeforeRender(function ()\n {\n //Your code here\n //Step\n //let stats = document.getElementById(\"stats\");\n //stats.innerHTML = \"\"; \n\n // camera.position.x = hero.position.x;\n // camera.position.y = hero.position.y + 1.0;\n // camera.position.z = hero.position.z;\n // pointer.position = camera.getTarget();\n\n // var forward = camera.getTarget().subtract(camera.position).normalize();\n var forward = new BABYLON.Vector3(0, 0, 1);\n var right = new BABYLON.Vector3(1, 0, 0);\n // right.y = 0;\n\n var SPEED = 20;\n let f_speed = 0;\n var s_speed = 0;\n var u_speed = 0;\n\n if (moveForward)\n {\n f_speed = SPEED;\n }\n if (moveBackward)\n {\n f_speed = -SPEED;\n }\n\n if (moveRight)\n {\n s_speed = SPEED;\n }\n\n if (moveLeft)\n {\n s_speed = -SPEED;\n }\n\n var move = (forward.scale(f_speed)).subtract((right.scale(s_speed))).subtract(new BABYLON.Vector3(0, 1, 0).scale(u_speed));\n\n this.meshAvatar.physicsImpostor.physicsBody.velocity.x = move.x;\n this.meshAvatar.physicsImpostor.physicsBody.velocity.z = move.z;\n this.meshAvatar.physicsImpostor.physicsBody.velocity.y = move.y;\n\n });\n }\n}","/**\n @Class : ShadowManager\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 그림자 관리 클래스\n */\n\nimport * as BABYLON from 'babylonjs';\n\n\nexport default class ShadowManager\n{\n static m_directionalLight;\n static m_arrReciveObjects;\n static m_directionalLight;\n\n /**\n *===============================================================================\n * constructor() : \n * @param _objInit : 싱글톤 생성 확인용 객체\n *===============================================================================*/\n constructor(_objInit)\n {\n //super();\n if (_objInit !== ShadowManager.m_objInit) \n {\n throw new Error( \"ShadowManager 생성은 다음과 같이 해주세요 - ShadowManager.GetInstance()\" ); \n // return;\n }\n }\n\n /**\n *===============================================================================\n * dispose() : \n *===============================================================================*/\n static dispose(){\n ShadowManager.m_directionalLight = null;\n ShadowManager.m_shadowManager = null;\n ShadowManager.m_objInit = null;\n }\n \n /**\n *===============================================================================\n * GetInstance() : \n * @return : 인스턴스 리턴\n *===============================================================================*/\n static GetInstance(_directionalLight)\n {\n if(ShadowManager.m_shadowManager == null) \n {\n ShadowManager.m_shadowManager = new ShadowManager(ShadowManager.m_objInit);\n ShadowManager.m_objInit = {};\n ShadowManager.m_directionalLight = _directionalLight;\n ShadowManager.GetInstance().setShadowGenerator();\n }\n return ShadowManager.m_shadowManager;\n }\n\n /**\n *===============================================================================\n * setShadowGenerator() : 셰도우제너레이터 생성\n *===============================================================================*/\n setShadowGenerator(){\n ShadowManager.m_shadowGenerator = new BABYLON.ShadowGenerator(4096, ShadowManager.m_directionalLight);\n ShadowManager.m_shadowGenerator.useCloseBlurExponentialShadowMap = true;\n ShadowManager.m_shadowGenerator.forceBackFacesOnly = true;\n ShadowManager.m_shadowGenerator.usePoissonSampling = true;\n ShadowManager.m_shadowGenerator.useBlurExponentialShadowMap = true;\n ShadowManager.m_shadowGenerator.setDarkness(0);\n ShadowManager.m_shadowGenerator.enableSoftTransparentShadow = false;\n ShadowManager.m_shadowGenerator.transparencyShadow = true;\n }\n\n /**\n *===============================================================================\n * AddShadowMap() : 그림자를 생성할 객체 추가\n * @param _mesh : 대상 객체 mseh\n *===============================================================================*/\n static AddShadowMap(_mesh){\n // console.log(\"AddShadowMap :::: \", _mesh);\n // ShadowManager.m_shadowGenerator.getShadowMap().renderList.push(_mesh);\n ShadowManager.m_shadowGenerator.addShadowCaster(_mesh);\n }\n\n /**\n *===============================================================================\n * AddReceive() : 그림자를 받아줄 객체 추가\n * @param _mesh : 대상 객체 mseh\n *===============================================================================*/\n static AddReceive(_mesh){\n // console.log(\"AddReceive :::: \", _mesh);\n //_mesh.showBoundingBox = true;\n _mesh.receiveShadows = true;\n }\n\n /**\n *===============================================================================\n * AddReceive() : 그림자를 생성할 객체에서 제외\n * @param _mesh : 대상 객체 mseh\n *===============================================================================*/\n static RemoveCast(_mesh){\n // console.log(\"RemoveCast :::: \", _mesh);\n ShadowManager.m_shadowGenerator.removeShadowCaster(_mesh);\n }\n\n /**\n *===============================================================================\n * FreezingShadow() : 그림자 프리징\n * @param _light : 대상 라이트\n * @param _funcCallback : 완료 콟백\n *===============================================================================*/\n static FreezingShadow(_light, _funcCallback){\n \n ShadowManager.m_shadowGenerator.getShadowMap().refreshRate = BABYLON.RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\n _funcCallback();\n }\n};\n\n","/**\n @Class : Booth\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 부스 클래스\n */\n\nimport * as BABYLON from 'babylonjs';\nimport gsap from \"gsap\";\nimport Constants from '../common/Constants';\nimport EventDispatcher from '../common/event/EventDispatcher';\nimport CameraManager from './CameraManager';\nimport ShadowManager from './ShadowManager';\nimport NavimeshManager from './NavimeshManager';\nimport CommunicatorEvent from '../common/event/CommunicatorEvent';\nimport Communicator from '../common/Communicator';\nimport DataManager from '../common/data/DataManager';\n\nexport default class Booth extends EventDispatcher {\n 'use strict';\n static SETTING_COMPLETE = \"Setting_Complete\";\n\n /**\n *===============================================================================\n * constructor() :\n * @param _objData : \n * @param _meshBooth : \n *===============================================================================\n */\n constructor(_objData, _meshBooth) {\n super();\n\n this.objCompanyData = _objData\n this.meshBooth = _meshBooth;\n this.isIntersects = false;\n this.videoVidTex = null;\n this.strBaseURL = null;\n this.highlightLayer = null;\n this.glowLayer = null;\n this.timeOut = null;\n this.linesBooth = null;\n this.linesBooth2 = null;\n this.linesBooth3 = null;\n this.tweenIn = null;\n this.tweenOut = null;\n\n this.init();\n }\n\n /**\n *===============================================================================\n * dispose() :\n *===============================================================================*/\n dispose() {\n clearTimeout(this.timeOut);\n this.highlightLayer.dispose();\n this.highlightLayer = null;\n this.meshBooth.dispose();\n this.meshBooth = null;\n }\n\n /**\n *===============================================================================\n * init() :\n *===============================================================================*/\n init() {\n Constants.CONTAINER_MAP.addChild(this.meshBooth);\n\n this.strBaseURL = \"\";\n\n this.highlightLayer = new BABYLON.HighlightLayer(\"highlight\", Constants.SCENE);\n this.glowLayer = new BABYLON.GlowLayer(\"glow\", Constants.scene);\n this.glowLayer.intensity = .5;\n this.glowLayer.isEnabled = false;\n\n this.setIntersectsBox();\n this.setBooth();\n\n if (Constants.OS_PLATFORM === Constants.OS_ECT) this.setShadow();\n //this.setNavimesh();\n this.setInterective();\n\n Constants.SCENE.onBeforeAnimationsObservable.add(this.onCheckIntersects.bind(this));\n\n setTimeout(() => {\n // this.dispatchEvent({\n // type: Booth.SETTING_COMPLETE,\n // data: null\n // })\n }, 200);\n }\n\n /**\n *===============================================================================\n * setIntersectsBox() : 부스 진입시 충돌체크 객체 설정\n *===============================================================================*/\n setIntersectsBox() {\n this.IntersectsBox = BABYLON.MeshBuilder.CreateBox(\"Booth_IntersectsBox\", {\n size: 6,\n height: 4\n }, Constants.scene);\n this.IntersectsBox.position.y = 0;\n this.IntersectsBox.isVisible = false;\n this.meshBooth.addChild(this.IntersectsBox);\n\n const myPoints = [\n new BABYLON.Vector3(-3, 0, -3),\n new BABYLON.Vector3(-3, 0, 3),\n new BABYLON.Vector3(3, 0, 3),\n new BABYLON.Vector3(3, 0, -3),\n new BABYLON.Vector3(-3, 0, -3)\n ]\n\n const myColors = [\n new BABYLON.Color4(1, 0, 0, 1)\n ]\n\n this.linesBooth = BABYLON.MeshBuilder.CreateLines(\"lines1\", {\n points: myPoints\n });\n this.linesBooth.alpha = .5;\n this.linesBooth.position.y = 3;\n this.linesBooth.isVisible = false;\n\n this.linesBooth2 = BABYLON.MeshBuilder.CreateLines(\"lines2\", {\n points: myPoints\n });\n this.linesBooth2.alpha = .5;\n this.linesBooth2.position.y = 3;\n this.linesBooth2.isVisible = false;\n\n this.linesBooth3 = BABYLON.MeshBuilder.CreateLines(\"lines3\", {\n points: myPoints\n });\n this.linesBooth3.alpha = .5;\n this.linesBooth3.position.y = 3;\n this.linesBooth3.isVisible = false;\n\n this.meshBooth.addChild(this.linesBooth);\n this.meshBooth.addChild(this.linesBooth2);\n this.meshBooth.addChild(this.linesBooth3);\n }\n\n /**\n *===============================================================================\n * setShadow() : 부스 그림자 설정\n *===============================================================================*/\n setShadow() {\n ShadowManager.AddShadowMap(this.meshBooth);\n\n let meshReceive = Constants.SCENE.getNodeByName(this.meshBooth.name + \".booth.booth_floor\");\n ShadowManager.RemoveCast(meshReceive); // 바닥 스스로에게 받는 그림자 제거를 위해 추가\n ShadowManager.AddReceive(meshReceive);\n }\n\n /**\n *===============================================================================\n * setInterective() : 홍보물 인터렉션 설정\n *===============================================================================*/\n setInterective() {\n var mesh = Constants.SCENE.getMeshByName(this.meshBooth.name + \".booth.booth_kiosk\");\n mesh.name = this.meshBooth.name + \"_kiosk\";\n this.setAction(mesh);\n\n if (this.objCompanyData.homepage !== \"\") {\n mesh = Constants.SCENE.getMeshByName(this.meshBooth.name + \".booth.booth_homepage\");\n mesh.name = this.meshBooth.name + \"_homepage\";\n this.setAction(mesh);\n }\n if (this.objCompanyData.sns !== \"\") {\n mesh = Constants.SCENE.getMeshByName(this.meshBooth.name + \".booth.booth_SNS\");\n mesh.name = this.meshBooth.name + \"_sns\";\n this.setAction(mesh);\n }\n\n if (this.objCompanyData.video_url !== \"\") {\n mesh = Constants.SCENE.getMeshByName(this.meshBooth.name + \".booth.booth_screen\");\n mesh.name = this.meshBooth.name + \"_video\";\n this.setAction(mesh);\n }\n\n // pdf 파일이 없을 경우 액션 연결하지 않도록 설정\n if (this.objCompanyData.ir_doc !== \"\") {\n mesh = Constants.SCENE.getMeshByName(this.meshBooth.name + \".booth.booth_disket\");\n mesh.name = this.meshBooth.name + \"_disket\";\n this.setAction(mesh);\n }\n }\n\n /**\n *===============================================================================\n * setAction() : 인터렉션 액션 바인딩\n *===============================================================================*/\n setAction(_mesh) {\n _mesh.isPickable = true;\n _mesh.actionManager = new BABYLON.ActionManager(Constants.SCENE);\n _mesh.actionManager.registerAction(new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOverTrigger, (_meshEvent) => {\n if (this.isIntersects) this.highlightLayer.addMesh(_mesh, new BABYLON.Color3(.4, .5, 1));\n }));\n _mesh.actionManager.registerAction(new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOutTrigger, (_meshEvent) => {\n this.highlightLayer.removeMesh(_mesh);\n }));\n\n _mesh.actionManager.registerAction(new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickUpTrigger, (_meshEvent) => {\n this.highlightLayer.removeMesh(_mesh);\n this.onClickInfo(_mesh);\n }));\n }\n\n /**\n *===============================================================================\n * onClickInfo() : 셀렉트\n * @param _objMeshData : 인포메이션 mesh\n *===============================================================================\n */\n onClickInfo(_mesh) {\n if (!this.isIntersects) return;\n\n switch (_mesh.name) {\n case this.meshBooth.name + \"_kiosk\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_CATALOG, this.objCompanyData.catalog_images);;\n break;\n case this.meshBooth.name + \"_homepage\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_URL_LINK, this.objCompanyData.homepage);\n break;\n case this.meshBooth.name + \"_sns\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_URL_LINK, this.objCompanyData.sns);\n break;\n case this.meshBooth.name + \"_video\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_VIDEO, this.objCompanyData.video_url);\n break;\n case this.meshBooth.name + \"_disket\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_PDF, this.objCompanyData.ir_doc);\n break;\n default:\n break;\n }\n }\n\n /**\n *===============================================================================\n * onCheckIntersects() : 아바타 부스 진입 여부 확인\n *===============================================================================\n */\n onCheckIntersects() {\n if (Constants.AVATAR===null || Constants.AVATAR.mesh === null) return;\n if (CameraManager.cameraMode === CameraManager.MINI_MAP_MODE) return;\n if (Constants.AVATAR.mesh.intersectsMesh(this.IntersectsBox, true)) {\n if (!this.isIntersects) {\n // 진입한 부스정보\n let companyName = DataManager.m_arrCompanyDatas.filter(\n element => element.id == Number(this.IntersectsBox.parent.name.replace(\"booth_\", \"\")) + 1\n )\n console.log(companyName[0]);\n // 커뮤니케이터로 퍼블리싱쪽에 알려주기 \n Communicator.sendEvent(CommunicatorEvent.ENTER_BOOTH, companyName[0]);\n\n gsap.killTweensOf(this.linesBooth.position);\n gsap.killTweensOf(this.linesBooth2.position);\n gsap.killTweensOf(this.linesBooth3.position);\n this.isIntersects = true;\n\n this.linesBooth.isVisible = true;\n this.linesBooth.position.y = 3;\n\n this.linesBooth2.isVisible = true;\n this.linesBooth2.position.y = 2;\n\n this.linesBooth3.isVisible = true;\n this.linesBooth3.position.y = 1;\n\n this.glowLayer.addIncludedOnlyMesh(this.linesBooth);\n this.glowLayer.addIncludedOnlyMesh(this.linesBooth2);\n this.glowLayer.addIncludedOnlyMesh(this.linesBooth3);\n this.glowLayer.isEnabled = true;\n\n this.glowLayer.customEmissiveColorSelector = (mesh, subMesh, material, result) => {\n if (mesh === this.linesBooth) {\n result.r = 0;\n result.g = 0;\n result.b = 1;\n }\n if (mesh === this.linesBooth2) {\n result.r = 0;\n result.g = 0;\n result.b = 1;\n }\n if (mesh === this.linesBooth3) {\n result.r = 0;\n result.g = 0;\n result.b = 1;\n }\n }\n\n //this.highlightLayer.addMesh(this.linesBooth, new BABYLON.Color3(1, 1, 1));\n gsap.to(this.linesBooth.position, {\n duration: 1.5,\n y: 0,\n onComplete: () => {\n CameraManager.cameraMode = CameraManager.BOOTH_MODE;\n this.glowLayer.isEnabled = false;\n }\n })\n\n gsap.to(this.linesBooth2.position, {\n duration: 1.5,\n y: 0\n })\n\n gsap.to(this.linesBooth3.position, {\n duration: 1.5,\n y: 0\n })\n\n // this.videoVidTex.video.play();\n }\n } else {\n if (this.isIntersects) {\n gsap.killTweensOf(this.linesBooth.position);\n this.glowLayer.isEnabled = false;\n CameraManager.cameraMode = CameraManager.PLAY_MODE;\n this.isIntersects = false;\n\n //this.highlightLayer.removeMesh(this.linesBooth);\n this.linesBooth.isVisible = false;\n this.linesBooth.position.y = 3;\n\n this.linesBooth2.isVisible = false;\n this.linesBooth2.position.y = 2;\n\n this.linesBooth3.isVisible = false;\n this.linesBooth3.position.y = 1;\n\n //this.videoVidTex.video.pause();\n }\n }\n }\n\n /**\n *===============================================================================\n * setBooth() : 부스 셋팅\n *===============================================================================*/\n setBooth() {\n let newPoint = this.rotateCoordinate(this.objCompanyData.position, 180, {\n x: 0,\n z: 0\n })\n\n this.meshBooth.position.x = newPoint.x;\n this.meshBooth.position.y = 0; //this.objCompanyData.position.y;\n this.meshBooth.position.z = newPoint.z;\n this.objCompanyData.positionNew = {\n x: this.meshBooth.position.x,\n y: this.meshBooth.position.y,\n z: this.meshBooth.position.z\n };\n\n this.setLogo();\n this.setVideo();\n this.setKiosk();\n }\n\n /**\n *===============================================================================\n * rotateCoordinate() : 테넌트 좌표 이동 - MAX와 Babylon 좌표계 보정을 위함\n * @param _position : 좌표계를 가진 객체 - 이동을 원하는 좌표\n * @param _nDegree : 이동할 회전각\n * @param _objCenter : 중심점 좌표 객체\n * @return : 이동 후 좌표 객체\n *===============================================================================*/\n rotateCoordinate(_position, _nDegree, _objCenter) {\n let objReturn = {};\n\n objReturn.x = (_position.x - _objCenter.x) * Math.cos(_nDegree * Math.PI / 180) - (_position.z - _objCenter.z) * Math.sin(_nDegree * Math.PI / 180) + _objCenter.x;\n objReturn.z = (_position.x - _objCenter.x) * Math.sin(_nDegree * Math.PI / 180) + (_position.z - _objCenter.z) * Math.cos(_nDegree * Math.PI / 180) + _objCenter.z;\n\n return objReturn;\n }\n\n /**\n *===============================================================================\n * setLogo() : 업체 로고 셋팅 - 배너 및 월\n *===============================================================================*/\n setLogo() {\n var mat = new BABYLON.StandardMaterial(\"logo_\" + this.objCompanyData.name, Constants.SCENE);\n mat.diffuseTexture = new BABYLON.Texture(this.strBaseURL + this.objCompanyData.logo_image, Constants.SCENE);\n\n mat.diffuseTexture.wAng = Math.PI;\n mat.diffuseTexture.vAng = Math.PI;\n let strName = this.meshBooth.name + \".booth.booth_Logo\";\n\n let meshLogoBoard = Constants.SCENE.getNodeByName(strName);\n meshLogoBoard.material = mat;\n\n // 부스 모델링 변경에 따라 부스 벽 설정이 불필요해져 주석 처리\n // strName = this.meshBooth.name + \".booth.booth_wall.booth_wall_primitive1\";\n // let meshWall = Constants.SCENE.getNodeByName(strName);\n\n // meshWall.material = new BABYLON.StandardMaterial(\"BoothWall\", Constants.SCENE);\n // meshWall.material.diffuseColor = new BABYLON.Color3.FromHexString(\"#9F7751\");\n // meshWall.material.emissiveColor = new BABYLON.Color3.FromHexString(\"#342B25\") \n }\n\n /**\n *===============================================================================\n * setVideo() : 비디오 홍보물 썸네일 설정\n *===============================================================================*/\n setVideo() {\n // let strName = this.meshBooth.name + \".booth_main.booth_Video\";\n console.log(this.meshBooth.name);\n let strName = this.meshBooth.name + \".booth.booth_screen\";\n let meshVideo = Constants.SCENE.getNodeByName(strName);\n var mat = new BABYLON.StandardMaterial(\"video_\" + this.objCompanyData.name, Constants.SCENE);\n\n //if(Constants.OS_PLATFORM === Constants.OS_IOS || Constants.OS_PLATFORM === Constants.OS_ANDROID){\n\n let texture = new BABYLON.Texture(this.strBaseURL + this.objCompanyData.video_thumbnail, Constants.SCENE);\n\n // 동영상 URL이 없을 경우 동영상 텍스처 처리\n // if (this.objCompanyData.video_url === \"\")\n // texture = new BABYLON.Texture(this.strBaseURL + this.objCompanyData.logo_image, Constants.SCENE);\n \n mat.diffuseTexture = texture;\n mat.diffuseTexture.uAng = Math.PI;\n mat.emissiveColor = new BABYLON.Color3(.7, .7, .7);\n meshVideo.material = mat;\n\n /* }else{\n this.videoVidTex = new BABYLON.VideoTexture(\"video\", this.strBaseURL + this.objCompanyData.video_url, Constants.SCENE, true);\n mat.diffuseTexture = this.videoVidTex;\n this.videoVidTex.video.pause();\n this.videoVidTex.video.volume = 0;\n\n } */\n }\n\n /**\n *===============================================================================\n * setKiosk() : 이미지 홍보물 썸네일 설정\n *===============================================================================*/\n setKiosk() {\n var mat = new BABYLON.StandardMaterial(\"kiosk_\" + this.objCompanyData.name, Constants.SCENE);\n mat.diffuseTexture = new BABYLON.Texture(this.strBaseURL + this.objCompanyData.catalog_images[0], Constants.SCENE);\n mat.diffuseTexture.uAng = Math.PI;\n mat.diffuseTexture.level = 2;\n\n let strName = this.meshBooth.name + \".booth.booth_kiosk\";\n let meshKiosk = Constants.SCENE.getNodeByName(strName);\n meshKiosk.material = mat;\n meshKiosk.material.diffuseColor = new BABYLON.Color3(.5, .5, .5);\n }\n}","/**\n @Class : SelectableObject\n @Maker : Sean\n @Date : 2024-02-22\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 부스 클래스\n */\n\nimport * as BABYLON from 'babylonjs';\nimport gsap from \"gsap\";\nimport Constants from '../common/Constants';\nimport EventDispatcher from '../common/event/EventDispatcher';\nimport CameraManager from './CameraManager';\nimport ShadowManager from './ShadowManager';\nimport NavimeshManager from './NavimeshManager';\nimport CommunicatorEvent from '../common/event/CommunicatorEvent';\nimport Communicator from '../common/Communicator';\nimport DataManager from '../common/data/DataManager';\n\n/**\n * 선택 가능한 Object\n * 마우스를 올리면 highlight가 된다.\n * \n * click되면 특정 행위를 할 수 있도록 설정할 수 있다.\n * \n * 이 Object는 hierarchy 특성상 가장 최상단에 node나 mesh가 있을 수 있다.\n * 하위메쉬에서 마우스 동작이 일어나도 걸려 있는 전체 mesh가 반응하도록 한다.\n */\nexport default class SelectableObject extends EventDispatcher {\n 'use strict';\n static SETTING_COMPLETE = \"Setting_Complete\";\n\n /**\n *===============================================================================\n * constructor() :\n * mesh와 node중 하나는 무조건 인자로 들어와야 한다.\n * mesh는 이미 world에 추가 되어 있다고 생각한다.\n * \n * @param _objData : 기본 데이터\n * @param _mesh : 이 객체의 mesh\n * @param _node : 이 객체의 node\n * @param _cbClick : 클릭시 콜백\n * @param _cbOver : 클릭시 콜백\n * @param _cbOut : 클릭시 콜백\n *===============================================================================\n */\n constructor(_objData, _mesh, _node, _cbClick=null, _cbOver=null, _cbOut=null, _hlColor=Constants.PORTAL_MOUSE_OVER_COLOR ) {\n\n if ( !_mesh && !_node )\n throw Error(\"SelectableObject:constructor() : mesh와 node중 하나는 명시해 줘야 합니다. \");\n super();\n\n this.objCompanyData = _objData\n this.mesh= _mesh; // 전체 부모 mesh\n this.node= _node; // 전체 부모 node. mesh와 node중 하나만 있으면 된다.\n this.childrenMeshes = null;\n this.isIntersects = false;\n this.videoVidTex = null;\n this.strBaseURL = null;\n this.highlightLayer = null;\n this.glowLayer = null;\n this.timeOut = null;\n this.cbClick = _cbClick;\n this.cbOver = _cbOver;\n this.cbOut = _cbOut;\n this.hlColor = _hlColor\n // this.linesBooth = null;\n // this.linesBooth2 = null;\n // this.linesBooth3 = null;\n\n this.init();\n }\n\n setClickHandler( cb ) { this.cbClick = cb; }\n setMouseOverHandler( cb ) { this.cbOver = cb; }\n setMouseOutHandler( cb ) { this.cbOut = cb; }\n\n /**\n *===============================================================================\n * dispose() :\n *===============================================================================*/\n dispose() {\n clearTimeout(this.timeOut);\n this.highlightLayer.dispose();\n this.highlightLayer = null;\n this.mesh.dispose();\n this.mesh= null;\n }\n\n /**\n *===============================================================================\n * init() :\n *===============================================================================*/\n init() {\n this.strBaseURL = \"\";\n\n this.highlightLayer = new BABYLON.HighlightLayer(\"highlight\", Constants.SCENE);\n this.glowLayer = new BABYLON.GlowLayer(\"glow\", Constants.SCENE);\n this.glowLayer.intensity = 1;\n this.glowLayer.isEnabled = false;\n\n this.setInteraction();\n\n // Constants.SCENE.onBeforeAnimationsObservable.add(this.onCheckIntersects.bind(this));\n\n setTimeout(() => {\n // this.dispatchEvent({\n // type: Booth.SETTING_COMPLETE,\n // data: null\n // })\n }, 200);\n }\n\n /**\n *===============================================================================\n * setInteraction() : 지정된 최상위 객체의 모든 하위 객체들을 대상으로 \n * interaction을 정의해줌\n *===============================================================================*/\n setInteraction() \n {\n // node와 mesh중 설정된 최상위 개체를 넣어 준다.\n const topNode = (this.node || this.mesh);\n // console.log(\"NODE : \", topNode.name);\n const children = topNode.getChildren();\n this.childrenMeshes = children.filter(i=>i instanceof BABYLON.Mesh);\n // console.log(this.childrenMeshes);\n this.childrenMeshes.forEach(i => {\n this.setAction(i, this.childrenMeshes);\n });\n }\n\n /**\n *===============================================================================\n * setAction() : 인터렉션 액션 바인딩\n *===============================================================================*/\n setAction(_mesh, allChildren) {\n _mesh.isPickable = true;\n _mesh.actionManager = new BABYLON.ActionManager(Constants.SCENE);\n\n function setHighlight()\n {\n const c = this.hlColor;\n allChildren.forEach(i=>{\n this.highlightLayer.addMesh(i, new BABYLON.Color3(c.r, c.g, c.b));\n // console.log(\"mesh names : \", i.name);\n });\n }\n\n function unsetHighlight()\n {\n allChildren.forEach(i=>{\n this.highlightLayer.removeMesh(i);\n });\n }\n\n _mesh.actionManager.registerAction(new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOverTrigger, (_meshEvent) => {\n setHighlight.bind(this)();\n if ( this.cbOver && typeof this.cbOver==\"function\" )\n this.cbOver().bind(this);\n }));\n _mesh.actionManager.registerAction(new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOutTrigger, (_meshEvent) => {\n unsetHighlight.bind(this)();\n if ( this.cbOut && typeof this.cbOut==\"function\" )\n this.cbOut().bind(this);\n }));\n\n _mesh.actionManager.registerAction(new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickUpTrigger, (_meshEvent) => {\n unsetHighlight.bind(this)();\n this.onClickInfo(_mesh);\n if ( this.cbClick && typeof this.cbClick==\"function\" )\n this.cbClick();\n }));\n }\n\n /**\n *===============================================================================\n * onClickInfo() : 셀렉트\n * @param _objMeshData : 인포메이션 mesh\n *===============================================================================\n */\n onClickInfo(_mesh) {\n if (!this.isIntersects) return;\n\n switch (_mesh.name) {\n case this.meshBooth.name + \"_kiosk\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_CATALOG, this.objCompanyData.catalog_images);;\n break;\n case this.meshBooth.name + \"_homepage\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_URL_LINK, this.objCompanyData.homepage);\n break;\n case this.meshBooth.name + \"_sns\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_URL_LINK, this.objCompanyData.sns);\n break;\n case this.meshBooth.name + \"_video\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_VIDEO, this.objCompanyData.video_url);\n break;\n case this.meshBooth.name + \"_disket\":\n Communicator.sendEvent(CommunicatorEvent.OPEN_PDF, this.objCompanyData.ir_doc);\n break;\n default:\n break;\n }\n }\n\n}","/**\n @Class : BoothManager\n @Maker : 윤휘원 (박정훈 팀장님 작업 상속)\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 부스 관리 클래스\n */\n\nimport * as BABYLON from 'babylonjs';\nimport EventDispatcher from '../common/event/EventDispatcher';\nimport Constants from '../common/Constants';\nimport LoadingProgressManager from './LoadingProgressManager';\nimport DataManager from '../common/data/DataManager';\nimport Booth from './Booth';\nimport SelectableObject from './SelectableObject';\nimport Utils from '../common/Utils';\n\nexport default class BoothManager extends EventDispatcher\n{\n 'use strict';\n\n static LOAD_COMPLETE = \"Load_Complete\";\n\n /**\n *===============================================================================\n * constructor() : \n *===============================================================================*/\n constructor()\n {\n super();\n \n this.meshBooth = null;\n this.arrBooth = [];\n \n this.init();\n }\n\n /**\n *===============================================================================\n * dispose() : \n *===============================================================================*/\n dispose(){\n\n for(let i=0; i < this.arrBooth.length; ++i)\n {\n const booth = this.arrBooth[i];\n booth.dispose();\n }\n }\n \n init(){\n this.setPortalsSMG();\n this.setBoothsSMG();\n this.loadBoothMesh();\n }\n\n /**\n *===============================================================================\n * loadBoothMesh() : 부스 메시 로드\n *===============================================================================*/\n loadBoothMesh(){\n \n let loadData = 0;\n const onMeshLoadProgress = (_data) => {\n let dataUnit = _data.loaded - loadData;\n loadData = _data.loaded;\n LoadingProgressManager.AddData(dataUnit);\n }\n\n let onMeshLoadComplete = (_newMeshes) => {\n this.meshBooth = _newMeshes[0];\n this.setBooths();\n }\n try\n {\n BABYLON.SceneLoader.ImportMesh(\"\", Constants.ASSETS_URL, Constants.BOOTH_FILE_NAME, Constants.SCENE, onMeshLoadComplete, onMeshLoadProgress);\n\n }\n catch(e) {}\n }\n\n /**\n *===============================================================================\n * setBooths() : 개별 부스 생성\n *===============================================================================*/\n setBooths(){\n this.arrBooth =[];\n let arrDatas = DataManager.GetCompanyDatas();\n let objData;\n let meshBooth;\n let i = 0;\n\n for(i=0; i < arrDatas.length; ++i)\n {\n objData = arrDatas[i];\n meshBooth = this.meshBooth.clone(\"booth_\" + String(i));\n const booth = new Booth(objData, meshBooth);\n booth.addEventListener(Booth.SETTING_COMPLETE,()=>{\n LoadingProgressManager.AddData(10000);\n booth.removeEventListener(Booth.SETTING_COMPLETE);\n })\n this.arrBooth.push(booth);\n \n }\n this.dispatchEvent({\n type: BoothManager.LOAD_COMPLETE,\n data: null\n })\n this.meshBooth.dispose();\n }\n\n /**\n */\n setBoothsSMG()\n {\n /* 새만금 맵에는 portal로 시작하는 포털들이 이미 정의 되어 있음 */\n const booths = Constants.SCENE.getNodeByName('booth').getChildren(null, true);\n\n // console.log(\"All Nodes : \", booths);\n booths.forEach(i => {\n // console.log(i.initial);\n const company = Constants.SMG_BOOTH_LIST.find(j=>j.initial===i.name)\n this.arrBooth.push(\n new SelectableObject(null, null, i, \n ()=>{ \n alert(company.name + \" 기업 홈페이지로 이동합니다. 이동하지 않을 경우 상단 주소창에서 팝업 차단을 해제하고 다시 객체를 선택해 주세요.\");\n window.open(company.link, '_blank');\n }, null, null, Constants.BOOTH_MOUSE_OVER_COLOR));\n });\n }\n\n setPortalsSMG()\n {\n /* 새만금 맵에는 portal로 시작하는 포털들이 이미 정의 되어 있음 */\n const portals = Constants.SCENE.getNodes().filter(i=>i.name.toLowerCase().indexOf('portal')>=0);\n\n // console.log(\"All Nodes : \", portals);\n // 포털 하위 객체들에 대해 select가 가능하도록 처리한다. 클릭시 goDeepLink를 수행.\n portals.forEach(i => {\n // console.log(i.name);\n const dl = Constants.DEEP_LINK_LIST.find(j=>j.portal===i.name).link;\n this.arrBooth.push(new SelectableObject(null, null, i, ()=>{ Utils.goDeepLink(dl)} ));\n });\n }\n};\n\n","import Constants from \"../common/Constants\";\nimport * as BABYLON from 'babylonjs';\nimport {Client} from \"colyseus.js\";\nimport Avatar from \"./Avatar\";\nimport Communicator from \"../common/Communicator\";\nimport CommunicatorEvent from \"../common/event/CommunicatorEvent\";\nimport DataManager from \"../common/data/DataManager\";\n\nexport default class MultiPlayManager extends Client{\n 'use strict';\n\n static LOGIN = \"login\";\n static LOGOUT = \"logout\";\n static CHATTING = \"chatting\";\n static NOTICE = \"notice\";\n static EVENT = \"event\";\n static ROOM_TYPE_LOBBY = \"Room_Type_Lobby\";\n static ROOM_TYPE_NORMAL = \"Room_Type_Normal\";\n\n constructor(_strURL)\n {\n super(_strURL);\n\n this.objPlayers = {};\n this.strRoomType = null;\n this.room = null;\n this.key = null;\n this.avatar = Constants.AVATAR;\n this.scene = Constants.SCENE;\n\n this.init();\n }\n\n /**\n *===============================================================================\n * init() :\n *===============================================================================\n */\n init(){\n\n /* Communicator.reciveEvent(CommunicatorEvent.SEND_CHAT_MESSAGE, (_data)=>{\n this.SendMessage(_data)\n }); */\n\n this.sendPosition = () =>{\n // console.log(\"--- Send !! \", this.room, this.avatar.status);\n //if(this.strRoomType === MultiPlayManager.ROOM_TYPE_LOBBY) return;\n try{\n if(this.room) this.room.send('move', this.avatar.status);\n }catch(_err){\n\n console.log(\"ERR ::\",_err.message);\n }\n } \n }\n\n /**\n *===============================================================================\n * connect() :\n * @param _strRoomName : \n *===============================================================================\n */\n connect(_strRoomName, _isLobby = false)\n {\n this.strRoomType = _isLobby ? MultiPlayManager.ROOM_TYPE_LOBBY : MultiPlayManager.ROOM_TYPE_NORMAL;\n\n this.joinOrCreate(_strRoomName).then((room) => {\n this.room = room;\n //console.log(\"_strRoomName ::::\", _strRoomName, this.room);\n this.room.state.players.onAdd = (player, key) => {\n // console.log(\"Room : \", room, \", Player : \", player, \", key : \", key);\n this.key = key;\n \n // 호스트일 경우\n if(this.room.sessionId === key)\n {\n if(this.strRoomType === MultiPlayManager.ROOM_TYPE_NORMAL) {\n this.objPlayers[key] = this.avatar;\n this.scene.onBeforeAnimationsObservable.add(this.sendPosition);\n }\n \n this.onLogin(this.avatar.status);\n }else { \n if(this.strRoomType === MultiPlayManager.ROOM_TYPE_NORMAL){\n let onAvatarLoded = () => {\n this.objPlayers[key] = avatar;\n this.objPlayers[key].position = new BABYLON.Vector3(player.position.x, player.position.y, player.position.z);\n this.objPlayers[key].rotation = new BABYLON.Vector3(player.rotation.x, player.rotation.y, player.rotation.z);\n this.objPlayers[key].name = player.name;\n this.objPlayers[key].grade = player.grade;\n this.objPlayers[key].color = player.color;\n this.objPlayers[key].image = player.image;\n \n player.position.onChange = () => {\n // console.log(\"Position Change!!!!\");\n if(this.objPlayers[key]) {\n this.objPlayers[key].position = new BABYLON.Vector3(player.position.x, player.position.y, player.position.z);\n }\n };\n \n player.rotation.onChange = () => {\n // console.log(\"Rotation Change!!!!\");\n if(this.objPlayers[key]) \n {\n this.objPlayers[key].rotation = new BABYLON.Vector3(player.rotation.x, player.rotation.y, player.rotation.z);\n }\n };\n }\n let avatar\n \n setTimeout(() => {\n load();\n }, 200);\n \n const load = ()=>{\n \n let meshURL = Constants.AVATAR_FILE_NAME;\n console.log(\"플레이어 아바타 만듬 : \", player.name);\n avatar = new Avatar(meshURL, false, player.name);\n avatar.addEventListener(Avatar.LOAD_COMPLETE, onAvatarLoded);\n }\n }\n }\n }\n \n \n \n this.room.connection.transport.ws.onclose = (_e)=>{\n console.log(\"CLOSE MULTI SERVER\");\n if(this.scene && this.sendPosition) this.scene.onBeforeAnimationsObservable.removeCallback(this.sendPosition);\n }; \n\n this.room.onMessage(\"chat\", this.onMessageChatting);\n this.room.state.players.onRemove = (player, key)=> {\n if(this.objPlayers[key]){\n this.objPlayers[key].dispose();\n }\n this.onLogout(player);\n }; \n\n this.room.onLeave(this.onLeave);\n this.room.onError(this.onError);\n \n }).catch(e => {\n //console.log(\"JOIN ERROR\", e);\n });\n }\n\n /**\n *===============================================================================\n * connect() :\n * @param _strRoomName : \n *===============================================================================\n */\n onLogin(status){\n try{\n // console.log(this.room.state.players);\n this.room.send('login', this.avatar.status);\n this.room.send('chat',{roomType:this.strRoomType, messageType:MultiPlayManager.LOGIN, name:DataManager.GetUserData().name, msg:\"님이 입장하셨습니다.\"});\n this.room.send('chat',{roomType:this.strRoomType, messageType:MultiPlayManager.NOTICE, name:\"\", msg: \" 이 채널의 현재 인원은 \" + String(this.room.state.players.size) + \"명 입니다.\"});\n }catch(_err){\n console.log(\"ERR ::\",_err.message);\n }\n }\n\n onLogout(player){\n try{\n //console.log(\"onLogout :::: \");\n Communicator.sendEvent(CommunicatorEvent.RECEIVE_CHAT_MESSAGE, {roomType:this.strRoomType, messageType:MultiPlayManager.LOGOUT, name:player.name, msg:\"님이 퇴장하셨습니다.\"});\n Communicator.sendEvent(CommunicatorEvent.RECEIVE_CHAT_MESSAGE, {roomType:this.strRoomType, messageType:MultiPlayManager.NOTICE, name:\"\", msg: \" 이 채널의 현재 인원은 \" + String(this.room.state.players.size) + \"명 입니다.\"});\n }catch(_err){\n console.log(\"ERR ::\",_err.message);\n }\n \n }\n\n onMessageChatting(message){\n try{\n //console.log(\"onMessageChatting :::: \", message);\n Communicator.sendEvent(CommunicatorEvent.RECEIVE_CHAT_MESSAGE, message);\n }catch(_err){\n console.log(\"ERR ::\",_err.message);\n }\n }\n\n \n onError(code, message){\n console.log(\"onError ::: \", message);\n }\n\n onLeave(code){\n try{\n if(this.avatar)Communicator.sendEvent(CommunicatorEvent.RECEIVE_CHAT_MESSAGE, {roomType:this.strRoomType, messageType:MultiPlayManager.LOGOUT, name:DataManager.GetUserData().name, msg:\"\"});\n \n }catch(_err){\n console.log(\"ERR ::\",_err.message);\n }\n }\n\n SendMessage(_message){\n try{\n //console.log(\"SendMessage this.room ::::\", this.room);\n this.room.send('chat', {roomType:_message.roomType , messageType:_message.messageType, name:DataManager.GetUserData().name, msg:_message.msg});\n }catch(_err){\n console.log(\"ERR ::\",_err.message);\n }\n }\n \n dispose(){\n //console.log(\"MultiPlayManager.dispose ::::::\")\n for(const key in this.objPlayers){\n this.objPlayers[key].dispose();\n }\n this.room.connection.close();\n this.objPlayers = null;\n this.key = null;\n this.room = null;\n this.scene = null;\n\n }\n}","/**\n @Class : UOSManager\n @Maker : 윤휘원\n @Date : 2022-01-05\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 서울시립대 컨텐츠 바인딩 및 인터렉티브 관리자\n */\n\nimport * as BABYLON from \"babylonjs\";\nimport Communicator from \"../common/Communicator\";\nimport EventDispatcher from \"../common/event/EventDispatcher\";\nimport Constants from \"../common/Constants\";\nimport CommunicatorEvent from \"../common/event/CommunicatorEvent\";\nimport DataManager from \"../common/data/DataManager\";\nimport CameraManager from \"./CameraManager\";\n\nexport default class UOSManager extends EventDispatcher {\n \"use strict\";\n\n static LOAD_COMPLETE = \"Load_Complete\";\n\n /**\n *===============================================================================\n * constructor() :\n *===============================================================================*/\n constructor() {\n super();\n this.UOSData = DataManager.GetUOSData();\n this.highlightLayer = null;\n\n //this.init();\n }\n\n /**\n *===============================================================================\n * dispose() :\n *===============================================================================*/\n dispose() {\n this.highlightLayer.dispose();\n this.highlightLayer = null;\n }\n\n /**\n *===============================================================================\n * init() :\n *===============================================================================*/\n init() {\n // this.setConferenceScreen();\n // this.setPresidentScreen();\n // this.setKiosk(); // 2023스펙에서 산학관 키오스크 제거에 따른 주석 처리\n // this.setInterective();\n }\n\n /**\n *===============================================================================\n * setConferenceScreen() : 컨퍼런스 스크린(전광판, 좌측)\n *===============================================================================*/\n setConferenceScreen() {\n let mesh = Constants.SCENE.getNodeByName(\"screen_02\");\n this.setAction(mesh);\n var mat = new BABYLON.StandardMaterial(\"screen02_mat\", Constants.SCENE);\n\n /* this.videoVidTex = new BABYLON.VideoTexture(\"video\", this.strBaseURL + this.UOSData.video_big_url, Constants.SCENE, true);\n mat.diffuseTexture = this.videoVidTex;\n this.videoVidTex.video.pause();\n this.videoVidTex.video.volume = 0; */\n\n let texture = new BABYLON.Texture(\n this.UOSData.video_side_thumbnail,\n Constants.SCENE\n );\n mat.diffuseTexture = texture;\n mat.diffuseTexture.uAng = Math.PI;\n mat.emissiveColor = new BABYLON.Color3(0.5, 0.5, 0.5);\n mesh.material = mat;\n }\n/**\n *===============================================================================\n * setKiosk() : 키오스크(좌측)\n *===============================================================================*/\n setKiosk() {\n let mesh = Constants.SCENE.getNodeByName(\"uni_seoul_kiosk_primitive0\");\n this.setAction(mesh);\n var mat = new BABYLON.StandardMaterial(\"kiosk_mat\", Constants.SCENE);\n\n let texture = new BABYLON.Texture(\n this.UOSData.kiosk_img[0],\n Constants.SCENE\n );\n mat.diffuseTexture = texture;\n mat.diffuseTexture.uAng = Math.PI;\n mat.emissiveColor = new BABYLON.Color3(0.5, 0.5, 0.5);\n mesh.material = mat;\n }\n /**\n *===============================================================================\n * setPresidentScreen() : 총장님 인삿말 영상 (전광판, 우측)\n *===============================================================================*/\n setPresidentScreen() {\n let mesh = Constants.SCENE.getNodeByName(\"Screen_01\");\n this.setAction(mesh);\n var mat = new BABYLON.StandardMaterial(\"Screen01_ad_mat\", Constants.SCENE);\n\n let texture = new BABYLON.Texture(\n this.UOSData.video_big_thumbnail,\n Constants.SCENE\n );\n mat.diffuseTexture = texture;\n mat.diffuseTexture.uAng = Math.PI;\n mat.emissiveColor = new BABYLON.Color3(0.5, 0.5, 0.5);\n mesh.material = mat;\n }\n\n /**\n *===============================================================================\n * setInterective() : 홍보물 인터렉션 설정\n *===============================================================================*/\n setInterective() {\n this.highlightLayer = new BABYLON.HighlightLayer(\"glow\", Constants.SCENE);\n\n var mesh = Constants.SCENE.getMeshByName(\"instar_primitive0\");\n this.setAction(mesh);\n mesh = Constants.SCENE.getMeshByName(\"instar_primitive1\");\n this.setAction(mesh);\n\n mesh = Constants.SCENE.getMeshByName(\"Homepage\");\n this.setAction(mesh);\n\n mesh = Constants.SCENE.getMeshByName(\"youtube\");\n this.setAction(mesh);\n\n // 2023스펙에서 산학관 키오스크 제거에 따른 주석 처리 =====\n // mesh = Constants.SCENE.getMeshByName(\"uni_seoul_kiosk_primitive0\");\n // this.setAction(mesh);\n // mesh = Constants.SCENE.getMeshByName(\"uni_seoul_kiosk_primitive1\");\n // this.setAction(mesh);\n // ====================================================\n }\n\n /**\n *===============================================================================\n * setAction() : 인터렉션 액션 바인딩\n *===============================================================================*/\n setAction(_mesh) {\n _mesh.actionManager = new BABYLON.ActionManager(Constants.SCENE);\n\n _mesh.actionManager.registerAction(\n new BABYLON.ExecuteCodeAction(\n BABYLON.ActionManager.OnPointerOverTrigger,\n (_meshEvent) => {\n if (CameraManager.currentMode === CameraManager.PLAY_MODE)\n this.highlightLayer.addMesh(_mesh, new BABYLON.Color3(0.4, 0.5, 1));\n }\n )\n );\n _mesh.actionManager.registerAction(\n new BABYLON.ExecuteCodeAction(\n BABYLON.ActionManager.OnPointerOutTrigger,\n (_meshEvent) => {\n this.highlightLayer.removeMesh(_mesh);\n }\n )\n );\n\n _mesh.actionManager.registerAction(\n new BABYLON.ExecuteCodeAction(\n BABYLON.ActionManager.OnPickUpTrigger,\n (_meshEvent) => {\n this.highlightLayer.removeMesh(_mesh);\n this.onClickInfo(_mesh);\n }\n )\n );\n }\n\n /**\n *===============================================================================\n * onClickInfo() : 셀렉트\n * @param _objMeshData : 인포메이션 mesh\n *===============================================================================\n */\n onClickInfo(_mesh) {\n if (CameraManager.currentMode !== CameraManager.PLAY_MODE) return;\n\n switch (_mesh.name) {\n case \"uni_seoul_kiosk_primitive0\":\n Communicator.sendEvent(\n CommunicatorEvent.OPEN_CATALOG,\n this.UOSData.kiosk_img\n );\n break;\n case \"billboard\":\n Communicator.sendEvent(\n CommunicatorEvent.OPEN_URL_LINK,\n this.UOSData.webinar\n );\n break;\n case \"instar_primitive0\":\n Communicator.sendEvent(\n CommunicatorEvent.OPEN_URL_LINK,\n this.UOSData.instagram\n );\n break;\n case \"Homepage\":\n Communicator.sendEvent(\n CommunicatorEvent.OPEN_URL_LINK,\n this.UOSData.homepage\n );\n break;\n case \"youtube\":\n Communicator.sendEvent(\n CommunicatorEvent.OPEN_URL_LINK,\n this.UOSData.youtube_live\n );\n console.log(this.UOSData.youtube_live);\n\n break;\n case \"Screen_01\": // 우측 총장말씀 스크린\n Communicator.sendEvent(\n CommunicatorEvent.OPEN_BOARDVIDEO,\n this.UOSData.obj_boardA\n );\n break;\n case \"screen_02\": // 좌측 산관학스크린\n Communicator.sendEvent(\n CommunicatorEvent.OPEN_BOARDVIDEO,\n this.UOSData.obj_boardB\n );\n break;\n default:\n break;\n }\n }\n}","/**\n @Class : Snow\n @Maker : 윤휘원\n @Date : 2022-01-06\n @Debug DATE : \n @Debug Contents : -\n @Version : 1.0\n @Description : 별 파티클 클래스\n */\n\nimport * as BABYLON from 'babylonjs';\nimport Constants from '../common/Constants';\nimport EventDispatcher from '../common/event/EventDispatcher';\n\nexport default class Snow extends EventDispatcher {\n 'use strict';\n\n static LOAD_COMPLETE = \"Load_Complete\";\n\n /**\n *===============================================================================\n * constructor() :\n * @param _strMeshURL : \n *===============================================================================\n */\n constructor(_strMeshURL) {\n super();\n\n this.theta = 0;\n this.solidParticleSystem = null;\n this.meshSnow = null;\n }\n\n /**\n *===============================================================================\n * dispose() :\n *===============================================================================*/\n dispose() {\n this.particleSystem.dispose();\n Constants.SCENE.onAfterRenderObservable.remove(this.move.bind(this));\n }\n\n /**\n *===============================================================================\n * init() :\n *===============================================================================*/\n async init(_intValue) {\n this.particleSystem = new BABYLON.ParticleSystem(\"particles\", 200);\n\n this.particleSystem.minEmitBox = new BABYLON.Vector3(-200, -30, -100); // Starting all from\n this.particleSystem.maxEmitBox = new BABYLON.Vector3(200, 75, 100); // To...\n this.particleSystem.emitRate = 200;\n this.particleSystem.minSize = 0.4;\n this.particleSystem.maxSize = 0.8;\n this.particleSystem.minLifeTime = 3;\n this.particleSystem.maxLifeTime = 4;\n this.particleSystem.updateSpeed = .03;\n\n this.particleSystem.preWarmCycles = 100;\n this.particleSystem.preWarmStepOffset = 10;\n\n if (_intValue === 1) {\n this.particleSystem.particleTexture = new BABYLON.Texture(\"images/star.png\");\n this.particleSystem.direction1 = new BABYLON.Vector3(0, 0, 0);\n this.particleSystem.direction2 = new BABYLON.Vector3(0, 0, 0);\n\n this.particleSystem.color1 = new BABYLON.Color4.FromHexString(\"#2bceffFF\");\n this.particleSystem.color2 = new BABYLON.Color4.FromHexString(\"#ffbf2bFF\");\n this.particleSystem.colorDead = new BABYLON.Color4.FromHexString(\"#FFAE000\");\n } else {\n this.particleSystem.particleTexture = new BABYLON.Texture(\"images/petal.png\");\n\n this.particleSystem.blendMode = BABYLON.BaseParticleSystem.BLENDMODE_STANDARD;\n this.particleSystem.color1 = new BABYLON.Color4.FromHexString(\"#ffffffff\");\n this.particleSystem.color2 = new BABYLON.Color4.FromHexString(\"#ffffffff\");\n this.particleSystem.colorDead = new BABYLON.Color4.FromHexString(\"#ffffff00\");\n\n this.particleSystem.direction1 = new BABYLON.Vector3(-10, -5, -10);\n this.particleSystem.direction2 = new BABYLON.Vector3(10, -5, 10);\n\n this.particleSystem.minInitialRotation = Math.PI / 2;\n this.particleSystem.maxInitialRotation = Math.PI;\n }\n this.particleSystem.start(0);\n\n let container = new BABYLON.MeshBuilder.CreateBox(\"StarContainer\", {\n size: 1\n }, Constants.SCENE);\n container.position = new BABYLON.Vector3(-300, 200, -50);\n container.rotation = new BABYLON.Vector3(0,0, Math.PI/3);\n container.visibility = 0;\n }\n\n /**\n *===============================================================================\n * move() :\n *===============================================================================*/\n move() {\n //console.log(\"sdfsfddfs\");\n this.solidParticleSystem.setParticles();\n this.theta += Math.PI / 5000;\n this.meshSnow.rotation.y = this.theta;\n }\n\n /**\n *===============================================================================\n * start() :\n *===============================================================================*/\n start() {\n if (this.moveSnow !== null) return;\n this.moveSnow = Constants.SCENE.onAfterRenderObservable.add(this.move.bind(this));\n }\n\n /**\n *===============================================================================\n * stop() :\n *===============================================================================*/\n stop() {\n this.theta = 0;\n Constants.SCENE.onAfterRenderObservable.remove(this.moveSnow);\n this.moveSnow = null;\n }\n}","import Constants from \"../common/Constants\";\nimport * as BABYLON from 'babylonjs';\nimport {Client} from \"colyseus.js\";\nimport Avatar from \"./Avatar\";\nimport Communicator from \"../common/Communicator\";\nimport CommunicatorEvent from \"../common/event/CommunicatorEvent\";\nimport DataManager from \"../common/data/DataManager\";\nimport Utils from \"../common/Utils\";\nimport NavimeshManager from \"./NavimeshManager\";\n\n/**\n * 특정 인터벌마다 맵 내의 특정 위치 사이를 이동하는 봇을 운영한다.\n * 봇의 움직임은 setInterval을 이용하고 있다.\n */\nexport default class BotManager {\n 'use strict';\n\n constructor()\n {\n // super(_strURL);\n\n this.bots = {}; // Avatar 객체가 들어감. key는 봇의 이름\n this.avatar = Constants.AVATAR;\n this.scene = Constants.SCENE;\n this.botMoveInterval = null;\n\n this.init();\n }\n\n /**\n *===============================================================================\n * init() :\n *===============================================================================\n */\n init(){\n // 봇은 처음에 이름이 설정된 개수만큼 생긴다.\n const bots = Constants.BOT_NAMES;\n\n bots.forEach( (name) =>{setTimeout(()=>{this.makeABot(name)}, 200)} );\n this.botMoveInterval = setInterval( this.moveBot.bind(this), Constants.BOT_MOVE_INTERVAL*1000 );\n // this.sendPosition = () =>{\n // //if(this.strRoomType === MultiPlayManager.ROOM_TYPE_LOBBY) return;\n // try{\n // if(this.room) this.room.send('move', this.avatar.status);\n // }catch(_err){\n\n // console.log(\"ERR ::\",_err.message);\n // }\n // } \n }\n\n /**\n * 새로운 봇을 하나 만든다\n * 봇이 생성되는 위치는 봇들의 이동 포인트중 하나가 된다. 봇들은 유저가 월드에 입장하면 \n * @param {*} name \n */\n makeABot(name)\n {\n const positions = Constants.BOT_NAVI_LOCATIONS;\n const botPosIdx = Utils.RandomInt(0, positions.length-1);\n const botPos = positions[ botPosIdx];\n const avatar = new Avatar(null, false, name);\n // Constants.CONTAINER_MAP.addChild(avatar.mesh);\n this.bots[name] = avatar;\n console.log(\"[Bot] \", name, \" - (\", botPos, \") \", botPosIdx);\n avatar.name = name; // Avatar 객체의 set name 에서 하는 일이 있으므로 꼭 수행해야 함.\n avatar.position = botPos;\n\n\n NavimeshManager.AddAvatar(avatar, null);\n // avatar.mesh.position = new BABYLON.Vector3(0, 0, 0);\n\n }\n\n moveBot()\n {\n const positions = Constants.BOT_NAVI_LOCATIONS;\n const players = Object.keys(this.bots);\n const arrIdx = Utils.arrayShuffle(positions.map( (i, idx)=>idx)); // 0~장소 수 사이의 숫자를 배열에서 셔플해 둠\n players.forEach( (i, idx)=> // i는 bots의 name\n {\n const avatar = this.bots[i];\n // const botPosIdx = Utils.RandomInt(0, positions.length-1);\n const nextBotPos = positions[ arrIdx[idx] ];\n // const naviClosestPoint = NavimeshManager.navigationPlugin.getClosestPoint(nextBotPos);\n // if (naviClosestPoint.x === 0 && naviClosestPoint.z === 0) return;\n\n // console.log(\"이동 : \", nextBotPos, botPosIdx);\n // console.log(\"무브 아바타 : \", i, avatar.agentIndex, avatar, NavimeshManager.crowd);\n\n // NavimeshManager.crowd.agentGoto(NavimeshManager.agents[avatar.agentIndex], nextBotPos);\n NavimeshManager.crowd.agentGoto(avatar.agentIndex, nextBotPos);\n });\n }\n\n /**\n *===============================================================================\n * connect() :\n * @param _strRoomName : \n *===============================================================================\n */\n // connect(_strRoomName, _isLobby = false)\n // {\n // this.strRoomType = _isLobby ? MultiPlayManager.ROOM_TYPE_LOBBY : MultiPlayManager.ROOM_TYPE_NORMAL;\n\n // this.joinOrCreate(_strRoomName).then((room) => {\n // this.room = room;\n // //console.log(\"_strRoomName ::::\", _strRoomName, this.room);\n // this.room.state.players.onAdd = (player, key) => {\n // this.key = key;\n \n // if(this.room.sessionId === key)\n // {\n // if(this.strRoomType === MultiPlayManager.ROOM_TYPE_NORMAL) {\n // this.objPlayers[key] = this.avatar;\n // this.scene.onBeforeAnimationsObservable.add(this.sendPosition);\n // }\n \n // this.onLogin(this.avatar.status);\n // }else { \n // if(this.strRoomType === MultiPlayManager.ROOM_TYPE_NORMAL){\n // let onAvatarLoded = () => {\n // this.objPlayers[key] = avatar;\n // this.objPlayers[key].position = new BABYLON.Vector3(player.position.x, player.position.y, player.position.z);\n // this.objPlayers[key].rotation = new BABYLON.Vector3(player.rotation.x, player.rotation.y, player.rotation.z);\n // this.objPlayers[key].name = player.name;\n // this.objPlayers[key].grade = player.grade;\n // this.objPlayers[key].color = player.color;\n // this.objPlayers[key].image = player.image;\n \n // player.position.onChange = () => {\n // if(this.objPlayers[key]) {\n // this.objPlayers[key].position = new BABYLON.Vector3(player.position.x, player.position.y, player.position.z);\n // }\n // };\n \n // player.rotation.onChange = () => {\n // if(this.objPlayers[key]) \n // {\n // this.objPlayers[key].rotation = new BABYLON.Vector3(player.rotation.x, player.rotation.y, player.rotation.z);\n // }\n // };\n // }\n // let avatar\n \n // setTimeout(() => {\n // load();\n // }, 200);\n \n // const load = ()=>{\n \n // let meshURL = Constants.AVATAR_FILE_NAME;\n // avatar = new Avatar(meshURL, false);\n // avatar.addEventListener(Avatar.LOAD_COMPLETE, onAvatarLoded);\n // }\n // }\n // }\n // }\n \n \n \n // this.room.connection.transport.ws.onclose = (_e)=>{\n // console.log(\"CLOSE MULTI SERVER\");\n // if(this.scene && this.sendPosition) this.scene.onBeforeAnimationsObservable.removeCallback(this.sendPosition);\n // }; \n\n // this.room.onMessage(\"chat\", this.onMessageChatting);\n // this.room.state.players.onRemove = (player, key)=> {\n // if(this.objPlayers[key]){\n // this.objPlayers[key].dispose();\n // }\n // this.onLogout(player);\n // }; \n\n // this.room.onLeave(this.onLeave);\n // this.room.onError(this.onError);\n \n // }).catch(e => {\n // //console.log(\"JOIN ERROR\", e);\n // });\n // }\n\n dispose(){\n //console.log(\"MultiPlayManager.dispose ::::::\")\n for(const key in this.bots){\n this.bots[key].dispose();\n }\n this.room.connection.close();\n this.bots = null;\n this.key = null;\n this.room = null;\n this.scene = null;\n\n if ( this.botMoveInterval )\n clearInterval( this.botMoveInterval );\n\n }\n}","import * as BABYLON from 'babylonjs';\nimport 'babylonjs-loaders';\nimport 'babylonjs-inspector';\nimport 'babylonjs-gui';\nimport EventDispatcher from '../common/event/EventDispatcher';\nimport Constants from '../common/Constants';\nimport NavimeshManager from './NavimeshManager'; //NavimeshManager 와 CameraManager import 순서 지켜야함\nimport CameraManager from './CameraManager';\nimport Avatar from './Avatar';\nimport BoothManager from './BoothManager';\nimport ShadowManager from './ShadowManager';\nimport MultiPlayManager from './MultiPlayManager';\nimport UOSManager from './UOSManager';\nimport Communicator from '../common/Communicator';\nimport CommunicatorEvent from '../common/event/CommunicatorEvent';\nimport LoadingProgressManager from './LoadingProgressManager';\nimport DataManager from '../common/data/DataManager';\nimport GalaxyParticle from './GalaxyParticle';\nimport BotManager from './BotManager';\n\nexport default class BasicWorld extends EventDispatcher {\n 'use strict';\n\n /**\n *===============================================================================\n * constructor() :\n * @param _canvas : WebGL용 canvas element\n *===============================================================================\n */\n constructor(_canvas) {\n super();\n\n Constants.CANVAS = this.canvas = _canvas;\n Constants.ENGINE = this.engine = new BABYLON.Engine(this.canvas, true);\n Constants.SCENE = this.scene = new BABYLON.Scene(this.engine);\n\n this.isInput = false;\n this.meshWorld = null;\n this.skyboxMaterial = null;\n this.nightTexture = null;\n this.dayTexture = null;\n this.starParticle = null;\n\n this.botManager = null;\n\n this.Init();\n\n }\n\n dispose() {\n if (this.avatar) this.avatar.dispose();\n\n CameraManager.dispose();\n this.light.dispose();\n this.light2.dispose();\n this.scene.dispose();\n this.engine.dispose();\n\n this.meshWorld = null;\n Constants.SCENE = this.scene = null;\n Constants.ENGINE = this.engine = null;\n Constants.CANVAS = this.canvas = null;\n }\n\n /**\n *===============================================================================\n * Init() :\n *===============================================================================\n */\n Init() {\n\n LoadingProgressManager.GetInstance();\n\n this.setEnvironment();\n this.setCamera();\n this.setWorld();\n this.setInspector();\n\n if (Constants.DEBUG_MODE) this.setInspector();\n\n this.engine.runRenderLoop(() => {\n this.scene.render();\n });\n\n window.addEventListener('resize', () => {\n this.engine.resize();\n });\n\n }\n\n setEnvironment() {\n //배경 컬러\n this.scene.clearColor = new BABYLON.Color3(0.933, 0.917, 0.905);\n }\n\n setCamera() {\n CameraManager.GetInstance();\n // CameraManager.cameraMode = CameraManager.MINI_MAP_MODE;\n this.setLight();\n }\n\n setLight() {\n this.light = new BABYLON.DirectionalLight(\"DirectionalLight\", new BABYLON.Vector3(0, -120, 0), this.scene);\n this.light.direction = new BABYLON.Vector3(-3, -15, -5)\n // this.light.intensity = 1.5;\n this.light.intensity = 2;\n this.light.diffuse = new BABYLON.Color3(1, 1, 1);\n this.light.specular = new BABYLON.Color3(1, 1, 1);\n\n\n this.light2 = new BABYLON.HemisphericLight(\"light\", new BABYLON.Vector3(0, 10, 0), this.scene);\n this.light2.intensity = 0.5;\n // this.light2.intensity = 1;\n this.light2.groundColor = new BABYLON.Color3(.588, .588, .588);\n\n if (Constants.OS_PLATFORM === Constants.OS_ECT) ShadowManager.GetInstance(this.light);\n\n /* this.light3 = new BABYLON.DirectionalLight(\"DirectionalLight2\", new BABYLON.Vector3(0, -120, 0), this.scene);\n this.light3.direction = new BABYLON.Vector3(-1, -10, -5)\n this.light3.intensity = 1.0;\n this.light3.diffuse = new BABYLON.Color3(1, 1, 1);\n this.light3.specular = new BABYLON.Color3(1, 1, 1); */\n\n /*\n this.m_shadowGenerator = new BABYLON.ShadowGenerator(4096, this.light3);\n this.m_shadowGenerator.useCloseBlurExponentialShadowMap = true;\n this.m_shadowGenerator.forceBackFacesOnly = true;\n this.m_shadowGenerator.usePoissonSampling = true;\n this.m_shadowGenerator.useBlurExponentialShadowMap = true;\n this.m_shadowGenerator.setDarkness(0.5);\n this.m_shadowGenerator.enableSoftTransparentShadow = false;\n this.m_shadowGenerator.transparencyShadow = true; */\n\n }\n\n async setWorld() {\n //console.log(\"setWorld ::::::\") \n NavimeshManager.GetInstance();\n\n var skybox = BABYLON.MeshBuilder.CreateBox(\"skybox\", {\n size: 1024.0\n }, this.scene);\n this.skyboxMaterial = new BABYLON.StandardMaterial(\"skybox\", this.scene);\n this.skyboxMaterial.backFaceCulling = false;\n this.nightTexture = new BABYLON.CubeTexture(\"images/Skybox_night/skybox\", this.scene);\n this.dayTexture = new BABYLON.CubeTexture(\"images/Skybox_day/skybox\", this.scene);\n\n // KDG - day texture로 변경\n // this.skyboxMaterial.reflectionTexture = this.nightTexture;\n this.skyboxMaterial.reflectionTexture = this.dayTexture;\n this.skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;\n this.skyboxMaterial.diffuseColor = new BABYLON.Color3(0, 0, 0);\n this.skyboxMaterial.specularColor = new BABYLON.Color3(0, 0, 0);\n skybox.material = this.skyboxMaterial;\n\n this.scene.onBeforeRenderObservable.add(() => {\n skybox.rotation.y += 0.00007;\n });\n\n Constants.CONTAINER_MAP = new BABYLON.Mesh(\"mapContainer\", this.scene);\n\n // 월드맵 로딩\n let loadData = 0;\n const onMeshLoadProgress = (_data) => {\n let dataUnit = _data.loaded - loadData;\n loadData = _data.loaded;\n LoadingProgressManager.AddData(dataUnit);\n }\n\n let mapLoad = await BABYLON.SceneLoader.ImportMeshAsync(\"\", Constants.ASSETS_URL, Constants.WORLD_FILE_NAME, this.scene, onMeshLoadProgress);\n this.meshWorld = mapLoad.meshes[0];\n this.meshWorld.name = \"WorldMap\";\n\n Constants.CONTAINER_MAP.addChild(this.meshWorld);\n\n // KDG - 아바타 제외\n // Constants.SCENE.getMeshByName(\"AVATAR\")?.isVisible = false;\n // 새만금 캐릭터 추가\n const afterLoad = (meshes, vec) => \n { \n // console.log(\"mesh : \", meshes, this);\n const rootMesh = meshes.find(i => i.name === \"__root__\");\n rootMesh.position = vec\n Constants.SCENE.addMesh( rootMesh, true );\n }\n const afterLoad1 = (meshes) => \n { \n afterLoad(meshes, new BABYLON.Vector3(0.6, 0.8, 2));\n }\n const afterLoad2 = (meshes) => \n { \n afterLoad(meshes, new BABYLON.Vector3(-0.6, 0.8, 2));\n }\n const addCharacter1 = await BABYLON.SceneLoader.ImportMesh(\"\", Constants.ASSETS_URL, \"Manguem_idle.glb\", Constants.SCENE, afterLoad1);\n const addCharacter2 = await BABYLON.SceneLoader.ImportMesh(\"\", Constants.ASSETS_URL, \"Saee_idle.glb\", Constants.SCENE, afterLoad2);\n\n this.onWorldloaded();\n }\n\n onWorldloaded() {\n let boothManager = new BoothManager();\n boothManager.addEventListener(BoothManager.LOAD_COMPLETE, () => {\n this.onBoothSettingComplete();\n boothManager.removeEventListener(BoothManager.LOAD_COMPLETE);\n })\n }\n\n onBoothSettingComplete() {\n let uos_Manager = new UOSManager();\n uos_Manager.init();\n\n this.setAvatar();\n }\n\n setAvatar() {\n this.avatar = Constants.AVATAR = new Avatar(Constants.AVATAR_FILE_NAME);\n this.avatar.addEventListener(Avatar.LOAD_COMPLETE, () => {\n this.onAvataLoded();\n this.avatar.removeEventListener(Avatar.LOAD_COMPLETE);\n })\n }\n\n onAvataLoded() {\n CameraManager.target = this.avatar;\n // Constants.CONTAINER_MAP.addChild(this.avatar.mesh);\n\n this.setNavimesh();\n this.setDeco(1);\n CameraManager.cameraMode = CameraManager.MINI_MAP_MODE;\n\n Communicator.reciveEvent(CommunicatorEvent.START_CONTENT, this.StartContent.bind(this));\n\n // KDG\n // if (Constants.OS_PLATFORM === Constants.OS_ECT) {\n if ( false ){\n this.setShadow();\n } else {\n Communicator.sendEvent(CommunicatorEvent.WORLD_LOAD_COMPLETE);\n }\n }\n\n setNavimesh() {\n // KDG\n // let meshNavi = this.scene.getNodeByName(\"navvy_mesh\");\n let meshNavi = this.scene.getNodeByName(\"navimesh\");\n let mesh = this.scene.getMeshByName(\"navimesh\");\n // console.log(\"메쉬를 로드 했을 때 pickable?\", mesh.name, mesh.isPickable);\n mesh.isPickable = true;\n // KDG - navi mesh의 상하 위치 조절\n mesh.position.y = mesh.position.y-0.2;\n NavimeshManager.AddMeshForNavimesh(meshNavi);\n // KDG - param1은 navmesh가 보이게 할지말지 결정함.\n NavimeshManager.MakeNavimesh(false, false);\n\n let meshTarget = NavimeshManager.marker.mesh;\n NavimeshManager.AddAvatar(this.avatar, meshTarget);\n }\n\n setDeco(_intValue) {\n this.starParticle = Constants.GALAXY_PARTICLE = new GalaxyParticle();\n this.starParticle.init(_intValue);\n }\n\n setShadow() {\n //부스는 부스 클래스 내부에서 따로 설정함\n // 그림자가 그려져야하는 오브젝트\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"eagle\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"mountain_primitive0\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"mountain_primitive1\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive0\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive1\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive2\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive3\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive4\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive5\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive6\"));\n // // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"shadow_object_primitive7\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"TextPlus001\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"subject_uni_seoul\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"YirumaePlane\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"Screen_01\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"screen_02\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"Homepage\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"instar_primitive0\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"instar_primitive1\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"youtube\"));\n // ShadowManager.AddShadowMap(this.scene.getNodeByName(\"screen_02\"));\n\n // // // 그림자가 그려질 오브젝트\n // ShadowManager.AddReceive(this.scene.getNodeByName(\"ground_star\"));\n // ShadowManager.AddReceive(this.scene.getNodeByName(\"fake_road_primitive0\"));\n // ShadowManager.AddReceive(this.scene.getNodeByName(\"fake_road_primitive1\"));\n // ShadowManager.AddReceive(this.scene.getNodeByName(\"glow_road\"));\n // ShadowManager.AddReceive(this.scene.getNodeByName(\"track\"));\n // ShadowManager.AddReceive(this.scene.getNodeByName(\"navvy_mesh\"));\n\n \n\n\n // 그림자가 그려져야하는 오브젝트 (빛을 가릴 오브젝트)\n ShadowManager.AddShadowMap(this.scene.getNodeByName(\"center_building\"));\n\n // // 그림자가 그려질 오브젝트 (그림자를 받아 표시할)\n ShadowManager.AddReceive(this.scene.getNodeByName(\"navimesh\"));\n ShadowManager.AddReceive(this.scene.getNodeByName(\"floor\"));\n\n const funcCallback = () => {\n Communicator.sendEvent(CommunicatorEvent.WORLD_LOAD_COMPLETE);\n }\n ShadowManager.FreezingShadow(this.light, funcCallback);\n }\n\n /**\n *===============================================================================\n * StartContent() : 플래이어가 입장하기 클릭시 실행되는 함수\n * @param _objUserData : 유저데이터\n *===============================================================================\n */\n StartContent(_objUserData) {\n //console.log(\"StartContent ::::::\", _objUserData, this.avatar);\n CameraManager.cameraMode = CameraManager.PLAY_MODE;\n\n DataManager.SetUserData(_objUserData);\n\n this.avatar.name = _objUserData.name;\n // let strURL = Constants.MULTI_SERVER_URL.url + \":\" + Constants.MULTI_SERVER_URL.port;\n let strURL = Constants.MULTI_SERVER_URL.url;\n\n //일반 멀티서버 룸 접속\n let multiPlayManager = new MultiPlayManager(strURL, this.avatar, this.scene);\n multiPlayManager.connect('normalRoom');\n\n //전체 멀티서버 룸 접속\n let multiPlayManagerLobby = new MultiPlayManager(strURL, this.avatar, this.scene);\n multiPlayManagerLobby.connect('lobby', true);\n\n Communicator.reciveEvent(CommunicatorEvent.SEND_CHAT_MESSAGE, (data) => {\n if (data.roomType === MultiPlayManager.ROOM_TYPE_NORMAL) {\n multiPlayManager.SendMessage(data);\n } else if (data.roomType === MultiPlayManager.ROOM_TYPE_LOBBY) {\n multiPlayManagerLobby.SendMessage(data);\n }\n });\n\n Communicator.reciveEvent(CommunicatorEvent.GO_TO_TENANT, (data) => {\n\n let id = data.id;\n CameraManager.goToBooth(id);\n\n });\n\n this.botManager = new BotManager();\n }\n\n setInspector() { // insert 버튼 눌러 인스펙터 창 토글\n var keys = [],\n egd1 = \"65,78,84,79,78,73,79\",\n egsd = \"68,65,89\",\n egsn = \"78,73,71,72,84\",\n egne = \"78,69,79,78\",\n egde = \"68,69,70,65,85,76,84\";\n\n this.scene.onKeyboardObservable.add((kbInfo) => {\n if (kbInfo.type === BABYLON.KeyboardEventTypes.KEYDOWN) {\n keys.push(kbInfo.event.keyCode);\n if (keys.toString().indexOf(egd1) >= 0) {\n keys = [];\n this.scene.debugLayer.show({\n enablePopup: true,\n overlay: true,\n });\n document.getElementById(\"scene-explorer-host\").style.zIndex = 100;\n document.getElementById(\"inspector-host\").style.zIndex = 100;\n }\n else if(keys.toString().indexOf(egsd) >= 0){\n keys = [];\n this.skyboxMaterial.reflectionTexture = this.dayTexture;\n this.skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;\n this.starParticle.dispose();\n this.setDeco(2);\n }\n else if(keys.toString().indexOf(egsn) >= 0){\n keys = [];\n this.skyboxMaterial.reflectionTexture = this.nightTexture;\n this.skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;\n this.starParticle.dispose();\n this.setDeco(1);\n }\n else if(keys.toString().indexOf(egne) >= 0){\n keys = [];\n this.light.intensity = 0.1;\n this.light2.intensity = 0.1;\n CameraManager.pipeline.bloomWeight = 1;\n CameraManager.pipeline.bloomKernel = 100;\n }\n else if(keys.toString().indexOf(egde) >= 0){\n keys = [];\n this.light.intensity = 1.5;\n this.light2.intensity = 0.5;\n CameraManager.pipeline.bloomWeight = 0.1;\n CameraManager.pipeline.bloomKernel = 64;\n this.skyboxMaterial.reflectionTexture = this.nightTexture;\n this.skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;\n this.starParticle.dispose();\n this.setDeco(1);\n }\n }\n });\n }\n}","import { debounce } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { Block } from \"./common/StyleMasterComp\";\n\nimport DataManager from '../common/data/DataManager';\nimport Constants_ui from './common/Constants_ui';\nimport Utils_ui from './common/Utils_ui';\n\nimport PageAuth from './page/PageAuth';\nimport PageLoading from './page/PageLoading';\nimport PageMain from './page/PageMain';\nimport { _deepLinkList } from './components/ModalBoothList/ListContents';\nimport Constants from '../common/Constants';\nimport Utils from '../common/Utils';\nimport { useParams } from 'react-router-dom';\n\nfunction SMGDeepLink() {\n let { seqnum } = useParams();\n const links = Constants.DEEP_LINK_LIST;\n let flagFirstCall = false;\n\n\n useEffect(()=>{\n if ( flagFirstCall ) // 한번 call 되었을 경우 다시 실행하지 않는다.\n return;\n Utils.goDeepLink(links[seqnum].link);\n },[]);\n\n return (\n <>\n \n );\n}\n\nexport default SMGDeepLink","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './ui/App';\nimport \"./css/font.css\";\nimport WebFont from \"webfontloader\";\nimport World from './content/BasicWorld';\nimport DataManager from \"./common/data/DataManager\";\nimport Communicator from './common/Communicator';\nimport Constants from './common/Constants';\nimport {BrowserRouter, RouterProvider, createBrowserRouter} from 'react-router-dom';\nimport Constants_ui from './ui/common/Constants_ui';\nimport SMGDeepLink from './ui/SMGDeepLink';\n\nwindow.addEventListener('load', function () {\n window.removeEventListener('load', this);\n Constants.DEBUG_MODE = process.env.REACT_APP_DDEVELOP_MODE === \"TRUE\";\n Constants.MULTI_SERVER_URL.url = process.env.REACT_APP_MULTI_SERVER_URL; \n Constants.MULTI_SERVER_URL.port = process.env.REACT_APP_MULTI_SERVER_PORT; \n Constants_ui.TESTMODE = Constants.DEBUG_MODE;\n\tInit();\n});\n\n\nconst Init =() =>{\n if(!Constants.DEBUG_MODE) console.log = () =>{}; // 디버그모드일 때 로그 삭제\n\n console.log(\"::: FONT LOAD START :::\");\n\n WebFont.load({\n custom: {\n families: ['Spoqa HanSansNeo', 'SEBANG_Gothic_Regular']\n },\n /* fontloading: function(name, fvd) {\n console.log(`fontloading ${name}:${fvd}`);\n }, */\n fontactive: (name, fvd) => {\n console.log(`::: LOADING FONT ${name}:${fvd} :::`);\n },\n /* fontinactive: function(name, fvd) {\n console.log(`fontinactive ${name}:${fvd}`);\n }, */\n active: () => {\n console.log(\"::: ALL FONTS LOADED :::\");\n startApp();\n },\n \n inactive: () => {\n console.error(\"::: ERROR LOADING FONTS :::\");\n // REPORT ERROR here\n },\n }); \n}\n\nlet world = null;\n\nconst startApp = () =>{\n console.log(\"::: START APP ::::\");\n\n if( /Android/i.test(navigator.userAgent)) {\n Constants.OS_PLATFORM = Constants.OS_ANDROID;\n }else if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) {\n Constants.OS_PLATFORM = Constants.OS_IOS;\n }else {\n Constants.OS_PLATFORM = Constants.OS_ECT;\n }\n\n Communicator.GetInstance();\n DataManager.GetInstance();\n DataManager.LoadData(onDataLoadComplete, onDataLoadFail);\n}\n\nconst onDataLoadFail = () =>{\n \n}\n\n\nconst onDataLoadComplete = () =>{\n console.log(\"::: DATALOAD COMPLETE ::: \");\n reactStart();\n const canvas = document.getElementById('World');\n world = new World(canvas);\n world.addEventListener(\"WOLD_SETTING_COMPLETE\", worldSettingComplete);\n world.addEventListener(\"WORLD_LOADING\", worldLoading);\n}\n\n\n\nconst worldLoading = (_ev) =>{\n \n}\n\nconst worldSettingComplete = (_ev) =>{\n \n}\n\n\n\nconst router = createBrowserRouter(\n[\n {\n path: \"/\",\n element: ,\n // loader: rootLoader,\n children: [\n ],\n },\n {\n path: \"/link/:seqnum\",\n element: ,\n // loader: teamLoader,\n },\n]);\nconst reactStart = ()=>{\n ReactDOM.render(\n \n }/>\n {/* \n */}\n ,\n document.getElementById('root')\n );\n}\n\n"],"sourceRoot":""}