Пример #1
0
        internal NativePluginRunner(
            string apiKey,
            TextureLoadHandler textureLoadHandler,
            MaterialRepository materialRepository,
            MapGameObjectScene mapGameObjectScene,
            ConfigParams config,
            IndoorMapScene indoorMapScene,
            IndoorMapsApiInternal indoorMapsApiInternal,
            IndoorMapMaterialService indoorMapMaterialService,
            LabelServiceInternal labelServiceInternal,
            PositionerApiInternal positionerApiInternal,
            CameraApiInternal cameraApiInternal,
            BuildingsApiInternal buildingsApiInternal,
            PrecacheApiInternal precacheApiInternal,
            TransportApiInternal transportApiInternal,
            IndoorMapEntityInformationApiInternal indoorMapEntityInformationApiInternal,
            IntPtr apiHandle
            )
        {
            m_threadService      = new ThreadService();
            m_textureLoadHandler = textureLoadHandler;
            m_materialRepository = materialRepository;
            m_mapGameObjectScene = mapGameObjectScene;
            m_streamingUpdater   = new StreamingUpdater();

            var nativeConfig = config.GetNativeConfig();
            var pathString   = GetStreamingAssetsDir();
            var pathBytes    = GetNullTerminatedUTF8Bytes(pathString);

            var indoorMapsApiHandle            = indoorMapsApiInternal.GetHandle();
            var indoorMapMaterialServiceHandle = indoorMapMaterialService.GetHandle();

            var apiCallbacks = new ApiCallbacks(
                indoorMapsApiHandle,
                indoorMapMaterialServiceHandle,
                indoorMapScene.GetHandle(),
                cameraApiInternal.GetHandle(),
                buildingsApiInternal.GetHandle(),
                m_threadService.GetHandle(),
                textureLoadHandler.GetHandle(),
                mapGameObjectScene.GetHandle(),
                labelServiceInternal.GetHandle(),
                positionerApiInternal.GetHandle(),
                precacheApiInternal.GetHandle(),
                transportApiInternal.GetHandle(),
                indoorMapEntityInformationApiInternal.GetHandle(),
                apiHandle
                );

            Initialize(Screen.width, Screen.height, Screen.dpi,
                       apiKey,
                       pathBytes,
                       ref nativeConfig,
                       ref apiCallbacks,
                       config.CoverageTreeManifestUrl,
                       config.ThemeManifestUrl
                       );

            API = GetAppInterface();
            Debug.Assert(API != IntPtr.Zero);

            m_isRunning = true;
        }
Пример #2
0
        public ApiImplementation(string apiKey, CoordinateSystem coordinateSystem, Transform parentTransformForStreamedObjects, ConfigParams configParams)
        {
            var textureLoadHandler = new TextureLoadHandler();
            var materialRepository = new MaterialRepository(configParams.MaterialsDirectory, configParams.OverrideLandmarkMaterial, textureLoadHandler);

            var terrainCollision  = (configParams.Collisions.TerrainCollision) ? CollisionStreamingType.SingleSidedCollision : CollisionStreamingType.NoCollision;
            var roadCollision     = (configParams.Collisions.RoadCollision) ? CollisionStreamingType.DoubleSidedCollision : CollisionStreamingType.NoCollision;
            var buildingCollision = (configParams.Collisions.BuildingCollision) ? CollisionStreamingType.SingleSidedCollision : CollisionStreamingType.NoCollision;

            m_root = CreateRootObject(parentTransformForStreamedObjects);

            m_interestPointProvider = new InterestPointProvider(m_root.transform);

            m_terrainStreamer   = new GameObjectStreamer("Terrain", materialRepository, m_root.transform, terrainCollision, true, configParams.UploadMeshesToGPU);
            m_roadStreamer      = new GameObjectStreamer("Roads", materialRepository, m_root.transform, roadCollision, true, configParams.UploadMeshesToGPU);
            m_buildingStreamer  = new GameObjectStreamer("Buildings", materialRepository, m_root.transform, buildingCollision, true, configParams.UploadMeshesToGPU);
            m_highlightStreamer = new GameObjectStreamer("Highlights", materialRepository, m_root.transform, CollisionStreamingType.NoCollision, false, configParams.UploadMeshesToGPU);
            m_indoorMapStreamer = new GameObjectStreamer("IndoorMaps", materialRepository, m_root.transform, CollisionStreamingType.NoCollision, false, configParams.UploadMeshesToGPU);

            var indoorMapMaterialRepository = new IndoorMapMaterialRepository();

            var indoorMapStreamedTextureObserver = new IndoorMapStreamedTextureObserver(indoorMapMaterialRepository);
            var indoorMapTextureStreamingService = new IndoorMapTextureStreamingService(textureLoadHandler, indoorMapStreamedTextureObserver);

            m_indoorMapsApiInternal = new IndoorMapsApiInternal(indoorMapTextureStreamingService, configParams.IndoorMapMaterialsDirectory);
            var indoorMapMaterialService = new IndoorMapMaterialService(indoorMapMaterialRepository, m_indoorMapsApiInternal);

            m_indoorMapsApi = new IndoorMapsApi(m_indoorMapsApiInternal);

            m_indoorMapEntityInformationApiInternal = new IndoorMapEntityInformationApiInternal();
            m_indoorMapEntityInformationApi         = new IndoorMapEntityInformationApi(m_indoorMapEntityInformationApiInternal);

            var meshUploader   = new MeshUploader();
            var indoorMapScene = new IndoorMapScene(m_indoorMapStreamer, meshUploader, indoorMapMaterialService, m_indoorMapsApiInternal);

            m_mapGameObjectScene   = new MapGameObjectScene(m_terrainStreamer, m_roadStreamer, m_buildingStreamer, m_highlightStreamer, m_indoorMapStreamer, meshUploader, indoorMapScene);
            m_labelServiceInternal = new LabelServiceInternal(configParams.LabelCanvas, configParams.EnableLabels, textureLoadHandler);

            m_positionerApiInternal = new PositionerApiInternal();
            m_positionerApi         = new PositionerApi(m_positionerApiInternal);

            m_cameraApiInternal = new CameraApiInternal();

            m_buildingsApiInternal = new BuildingsApiInternal(materialRepository);
            m_buildingsApi         = new BuildingsApi(m_buildingsApiInternal);

            m_precacheApiInternal = new PrecacheApiInternal();
            m_precacheApi         = new PrecacheApi(m_precacheApiInternal);

            m_propsApiInternal = new PropsApiInternal();
            m_propsApi         = new PropsApi(m_propsApiInternal);

            m_transportApiInternal = new TransportApiInternal();
            m_transportApi         = new TransportApi(m_transportApiInternal);

            m_handleToSelf = NativeInteropHelpers.AllocateNativeHandleForObject(this);

            m_nativePluginRunner = new NativePluginRunner(
                apiKey,
                textureLoadHandler,
                materialRepository,
                m_mapGameObjectScene,
                configParams,
                indoorMapScene,
                m_indoorMapsApiInternal,
                indoorMapMaterialService,
                m_labelServiceInternal,
                m_positionerApiInternal,
                m_cameraApiInternal,
                m_buildingsApiInternal,
                m_precacheApiInternal,
                m_transportApiInternal,
                m_indoorMapEntityInformationApiInternal,
                m_handleToSelf
                );

            m_cameraApi = new CameraApi(this, m_cameraApiInternal);

            m_coordinateSystem = coordinateSystem;
            var defaultStartingLocation = LatLongAltitude.FromDegrees(
                configParams.LatitudeDegrees,
                configParams.LongitudeDegrees,
                coordinateSystem == CoordinateSystem.ECEF ? configParams.DistanceToInterest : 0.0);

            m_originECEF = defaultStartingLocation.ToECEF();

            if (coordinateSystem == CoordinateSystem.UnityWorld)
            {
                m_frame = new UnityWorldSpaceCoordinateFrame(defaultStartingLocation);
            }

            m_geographicApi = new GeographicApi(m_root.transform);

            m_environmentFlatteningApiInternal = new EnvironmentFlatteningApiInternal();
            m_environmentFlatteningApi         = new EnvironmentFlatteningApi(m_environmentFlatteningApiInternal);

            m_pathApiInternal = new PathApiInternal();
            m_pathApi         = new PathApi(m_pathApiInternal);

            m_spacesApi = new SpacesApi(this);

            if (m_coordinateSystem == CoordinateSystem.UnityWorld)
            {
                m_transformUpdateStrategy = new UnityWorldSpaceTransformUpdateStrategy(m_frame, m_environmentFlatteningApi.GetCurrentScale());
            }
            else
            {
                var cameraPosition = m_originECEF;
                m_transformUpdateStrategy = new ECEFTransformUpdateStrategy(
                    cameraPosition,
                    cameraPosition.normalized.ToSingleVector(),
                    m_environmentFlatteningApi.GetCurrentScale());
            }
        }