Пример #1
0
        protected TileController(IMapDataStore dataStore, Stylesheet stylesheet, ElevationDataType elevationType,
                                 Transform pivot, Range <int> lodRange)
        {
            _dataStore     = dataStore;
            _stylesheet    = stylesheet;
            _elevationType = elevationType;

            Pivot    = pivot;
            LodRange = lodRange;
        }
Пример #2
0
 public void Setup()
 {
     // initialize services
     _compositionRoot = TestHelper.GetCompositionRoot(_worldZeroPoint);
     _stylesheet      = _compositionRoot.GetService <Stylesheet>();
     _projection      = _compositionRoot.GetService <IProjection>();
     // get local references
     _mapDataStore = _compositionRoot.GetService <IMapDataStore>();
     _isCalled     = false;
 }
Пример #3
0
        void Start()
        {
            // init utymap library
            _compositionRoot = InitTask.Run((container, config) =>
            {
                container
                .Register(Component.For <Stylesheet>().Use <Stylesheet>(@"mapcss/default/index.mapcss"))
                .Register(Component.For <MaterialProvider>().Use <MaterialProvider>())
                .Register(Component.For <GameObjectBuilder>().Use <GameObjectBuilder>())
                .RegisterInstance <IEnumerable <IElementBuilder> >(new List <IElementBuilder>());
            });
            // store map data store reference to member variable
            _mapDataStore = _compositionRoot.GetService <IMapDataStore>();

            // for demo purpose, disable mesh caching to force import data into memory for every run
            _compositionRoot.GetService <IMapDataLibrary>().DisableCache();

            // get reference for active stylesheet.
            var stylesheet = _compositionRoot.GetService <Stylesheet>();
            // get reference to trace.
            var trace = _compositionRoot.GetService <ITrace>();
            // create tile which represents target region to load.
            var tile = new Tile(
                // create quadkey using coordinate and choose proper LOD
                GeoUtils.CreateQuadKey(_coordinate, Scene == SceneType.Bird ? 14 : 16),
                // provide stylesheet (used to be the same as for import)
                stylesheet,
                // use cartesian projection as we want to build flat world
                new CartesianProjection(_coordinate),
                // use flat elevation (all vertices have zero meters elevation)
                ElevationDataType.Flat,
                // parent for built game objects
                gameObject);

            // import data into memory
            _mapDataStore.AddTo(
                // define where geoindex is created (in memory, not persistent)
                MapDataStorages.TransientStorageKey,
                // path to map data
                String.Format(MapDataPathFormat, Scene == SceneType.Bird ? "json" : "xml"),
                // stylesheet is used to import only used data and skip unused
                stylesheet,
                // level of detail (zoom) for which map data should be imported
                new Range <int>(16, 16),
                new CancellationToken())
            // start import and listen for events.
            .Subscribe(
                // NOTE progress callback is ignored
                (progress) => { },
                // exception is reported
                (exception) => trace.Error("import", exception, "Cannot import map data"),
                // once completed, load the corresponding tile
                () => _mapDataStore.OnNext(tile));
        }
 public LoadMapCommand(LoadMapCommandData data,
                       IMapDataStore mapStore,
                       ICommandFactory commandFactory,
                       ZenjectSceneLoader sceneLoader,
                       IModalViewController modalViewController)
 {
     _data                = data;
     _mapStore            = mapStore;
     _commandFactory      = commandFactory;
     _sceneLoader         = sceneLoader;
     _modalViewController = modalViewController;
 }
Пример #5
0
        public SurfaceTileController(IMapDataStore dataStore, Stylesheet stylesheet, ElevationDataType elevationType,
                                     Transform pivot, Range <int> lodRange, GeoCoordinate origin, float scale, float maxDistance) :
            base(dataStore, stylesheet, elevationType, pivot, lodRange)
        {
            _scale     = scale;
            _geoOrigin = origin;

            LodTree    = GetLodTree(pivot.Find("Camera").GetComponent <Camera>().aspect, maxDistance);
            Projection = CreateProjection();

            HeightRange = new Range <float>(LodTree.Min, LodTree.Max);
            ResetToDefaults();
        }
Пример #6
0
        public SphereTileController(IMapDataStore dataStore, Stylesheet stylesheet, ElevationDataType elevationType,
                                    Transform pivot, Range <int> lodRange, float radius) :
            base(dataStore, stylesheet, elevationType, pivot, lodRange)
        {
            _radius = radius;

            LodTree     = GetLodTree();
            FieldOfView = 60;
            Projection  = new SphericalProjection(radius);

            _camera = pivot.Find("Camera").transform;

            HeightRange = new Range <float>(LodTree.Min, LodTree.Max);
            ResetToDefaults();
        }
Пример #7
0
        void Start()
        {
            // init utymap library
            _compositionRoot = InitTask.Run((container, config) =>
            {
                container
                .Register(Component.For <Stylesheet>().Use <Stylesheet>(@"mapcss/default/index.mapcss"))
                .Register(Component.For <MaterialProvider>().Use <MaterialProvider>())
                .Register(Component.For <GameObjectBuilder>().Use <GameObjectBuilder>())
                .RegisterInstance <IEnumerable <IElementBuilder> >(new List <IElementBuilder>());
            });

            // store map data store reference to member variable
            _mapDataStore = _compositionRoot.GetService <IMapDataStore>();

            // get reference for active stylesheet
            var stylesheet = _compositionRoot.GetService <Stylesheet>();
            // define level of detail
            const int levelOfDetail = 14;
            // create center coordinate;
            var coordinate = (new GeoCoordinate(Latitude, Longitude));
            // create "center" tile
            var center = GeoUtils.CreateQuadKey(coordinate, levelOfDetail);

            // load multiply tiles at once
            for (var tileX = center.TileX - 1; tileX <= center.TileX + 1; ++tileX)
            {
                for (var tileY = center.TileY - 1; tileY <= center.TileY + 1; ++tileY)
                {
                    var quadKey = new QuadKey(tileX, tileY, levelOfDetail);
                    var parent  = new GameObject(quadKey.ToString());
                    parent.transform.SetParent(gameObject.transform);
                    _mapDataStore.OnNext(new Tile(
                                             // quadkey to load.
                                             quadKey,
                                             // provide stylesheet
                                             stylesheet,
                                             // use cartesian projection as we want to build flat world
                                             new CartesianProjection(coordinate),
                                             // use grid elevation: uses mapzen servers by default,
                                             // stores elevation in simple NxN grid format.
                                             ElevationDataType.Grid,
                                             // parent for built game objects
                                             parent));
                }
            }
        }
Пример #8
0
        public static MapData GetResultSync(this IMapDataStore store, Tile tile, int waitTimeInSeconds = 10)
        {
            MapData mapData          = null;
            var     manualResetEvent = new ManualResetEvent(false);

            store
            .ObserveOn <Tile>(Scheduler.CurrentThread)
            .SubscribeOn(Scheduler.CurrentThread)
            .Subscribe(_ => manualResetEvent.Set());
            store
            .ObserveOn <MapData>(Scheduler.CurrentThread)
            .SubscribeOn(Scheduler.CurrentThread)
            .Subscribe(r => mapData = r);
            store.OnNext(tile);
            manualResetEvent.WaitOne(TimeSpan.FromSeconds(waitTimeInSeconds));
            return(mapData);
        }
Пример #9
0
        public static Element GetResultSync(this IMapDataStore store, MapQuery query, int waitTimeInSeconds = 10)
        {
            Element element          = null;
            var     manualResetEvent = new ManualResetEvent(false);

            store
            .ObserveOn <Element>(Scheduler.CurrentThread)
            .SubscribeOn(Scheduler.CurrentThread)
            .Subscribe(r =>
            {
                element = r;
                manualResetEvent.Set();
            });
            store.OnNext(query);
            manualResetEvent.WaitOne(TimeSpan.FromSeconds(waitTimeInSeconds));
            return(element);
        }
Пример #10
0
        void Start()
        {
            // init utymap library
            _compositionRoot = InitTask.Run((container, config) =>
            {
                container
                // NOTE use another mapcss style
                .Register(Component.For <Stylesheet>().Use <Stylesheet>(@"mapcss/customization/customization.mapcss"))
                .Register(Component.For <MaterialProvider>().Use <MaterialProvider>())
                .Register(Component.For <GameObjectBuilder>().Use <GameObjectBuilder>())
                // NOTE for use case 1: put cubes for POI
                .Register(Component.For <IElementBuilder>().Use <PlaceElementBuilder>().Named("place"))
                // NOTE for use case 2: search for capsule object in scene which replaces specific tree
                .Register(Component.For <IElementBuilder>().Use <ImportElementBuilder>().Named("import"));
            });

            // store map data store reference to member variable
            _mapDataStore = _compositionRoot.GetService <IMapDataStore>();

            // disable mesh caching to force import data into memory for every run
            _compositionRoot.GetService <IMapDataLibrary>().DisableCache();

            // import data into memory
            _mapDataStore.AddTo(
                // define where geoindex is created (in memory, not persistent)
                MapDataStorages.TransientStorageKey,
                // path to map data
                MapDataPath,
                // stylesheet is used to import only used data and skip unused
                _compositionRoot.GetService <Stylesheet>(),
                // level of detail (zoom) for which map data should be imported
                new Range <int>(16, 16),
                new CancellationToken())
            // start import and listen for events.
            .Subscribe(
                // NOTE progress callback is ignored
                (progress) => { },
                // exception is reported
                (exception) => _compositionRoot.GetService <ITrace>().Error("import", exception, "Cannot import map data"),
                // once completed, load the corresponding tile
                OnDataImported);
        }
Пример #11
0
        void Start()
        {
            // init utymap library
            _compositionRoot = InitTask.Run((container, config) =>
            {
                container
                // NOTE use another mapcss style
                .Register(Component.For <Stylesheet>().Use <Stylesheet>(@"mapcss/default/index.mapcss"))
                .Register(Component.For <MaterialProvider>().Use <MaterialProvider>())
                .Register(Component.For <GameObjectBuilder>().Use <GameObjectBuilder>())
                .RegisterInstance <IEnumerable <IElementBuilder> >(new List <IElementBuilder>());
            });

            // get trace for logging.
            _trace = _compositionRoot.GetService <ITrace>();

            // store map data store reference to member variable
            _mapDataStore = _compositionRoot.GetService <IMapDataStore>();

            // disable mesh caching to force import data into memory for every run
            _compositionRoot.GetService <IMapDataLibrary>().DisableCache();

            // import data into memory
            _mapDataStore.AddTo(
                // define where geoindex is created (in memory, not persistent)
                MapDataStorages.TransientStorageKey,
                // path to map data
                MapDataPath,
                // stylesheet is used to import only used data and skip unused
                _compositionRoot.GetService <Stylesheet>(),
                // level of detail (zoom) for which map data should be imported
                _range,
                new CancellationToken())
            // start import and listen for events.
            .Subscribe(
                // NOTE progress callback is ignored
                (progress) => { },
                // exception is reported
                (exception) => _trace.Error("search", exception, "Cannot import map data"),
                // once completed, load the corresponding tile
                OnDataImported);
        }
Пример #12
0
 public void Construct(MapStoreId mapStoreId,
                       [Inject(Id = MapEditorInstaller.SECTION_TILE_EDITOR_ID)]
                       IMapEditorTool sectionTileEditor,
                       [Inject(Id = MapEditorInstaller.UNIT_TILE_EDITOR_ID)]
                       IMapEditorTool unitTileEditor,
                       [Inject(Id = MapEditorInstaller.PLAYER_UNITS_TILE_EDITOR_ID)]
                       IMapEditorTool playerUnitsTileEditor,
                       IMapDataStore mapDataStore,
                       IInputLock inputLock,
                       IInputEvents inputEvents,
                       ILogger logger)
 {
     _mapStoreId            = mapStoreId;
     _sectionTileEditor     = sectionTileEditor;
     _playerUnitsTileEditor = playerUnitsTileEditor;
     _unitTileEditor        = unitTileEditor;
     _mapDataStore          = mapDataStore;
     _inputLock             = inputLock;
     _inputEvents           = inputEvents;
     _logger = logger;
 }
 public void Construct(IMapDataStore mapDataStore)
 {
     _mapDataStore = mapDataStore;
 }