예제 #1
0
        private void DisplayGroupNode(BaseNode nodeToDisplay)
        {
            CurrentDisplayNode = nodeToDisplay;
            int             count = nodeToDisplay.Children.Count;
            List <BaseNode> list  = new List <BaseNode>(count + 1);

            list.Add(nodeToDisplay);
            list.AddRange(nodeToDisplay.Children);
            for (uint num = (uint)list.Count; num < orderedControllers.Length; num++)
            {
                ITileController tileController = orderedControllers[num];
                if (tileController != null)
                {
                    DestroyController(num, destroyView: true);
                }
            }
            for (uint num = 0u; num < list.Count; num++)
            {
                BaseNode node = list[(int)num];
                if (num >= orderedCells.Length)
                {
                    logger.Warn("The hex grid is not large enough to fit all nodes.");
                }
                else
                {
                    SetupTileController(num, node);
                }
            }
        }
예제 #2
0
        public void Setup()
        {
            // initialize services
            _compositionRoot = TestHelper.GetCompositionRoot(_worldZeroPoint);

            // get local references
            _mapDataLoader = _compositionRoot.GetService<IMapDataLoader>();
            _tileController = _compositionRoot.GetService<ITileController>();
        }
 public void Setup()
 {
     _container = new Container();
     TestHelper.GetGameRunner(_container)
     .RunGame(TestHelper.BerlinTestFilePoint);
     _tileEditor            = _container.Resolve <ITileModelEditor>();
     _elementSourceProvider = _container.Resolve <IElementSourceProvider>();
     _tileController        = _container.Resolve <ITileController>();
 }
예제 #4
0
        public void Setup()
        {
            // initialize services
            _compositionRoot = TestHelper.GetCompositionRoot(_worldZeroPoint);

            // get local references
            _mapDataLoader  = _compositionRoot.GetService <IMapDataLoader>();
            _tileController = _compositionRoot.GetService <ITileController>();
            _isCalled       = false;
        }
예제 #5
0
        private void DestroyController(uint orderedIndex, bool destroyView)
        {
            ITileController tileController = orderedControllers[orderedIndex];

            if (tileController != null)
            {
                tileController.Destroy(destroyView);
                orderedControllers[orderedIndex] = null;
            }
        }
예제 #6
0
 public TileModelEditor(ITileController tileController,
                        IElementSourceProvider elementSourceProvider,
                        IElementSourceEditor elementSourceEditor,
                        IModelLoader modelLoader,
                        IObjectPool objectPool)
 {
     _tileController        = tileController;
     _elementSourceProvider = elementSourceProvider;
     _elementSourceEditor   = elementSourceEditor;
     _modelLoader           = modelLoader;
     _objectPool            = objectPool;
 }
예제 #7
0
        /// <summary> Performs framework initialization once, before any Start() is called. </summary>
        void Awake()
        {
            _appManager = ApplicationManager.Instance;
            _appManager.InitializeFramework(ConfigBuilder.GetDefault(),
                                            (compositionRoot) =>
            {
                compositionRoot.RegisterAction((c, _) =>
                                               c.Register(UtyDepend.Component.For <IProjection>().Use <CartesianProjection>(GetWorldZeroPoint())));
            });
            _appManager.CreateDebugConsole();

            _trace = _appManager.GetService <ITrace>();

            _tileController = _appManager.GetService <ITileController>();
            _modelBuilder   = _appManager.GetService <IModelBuilder>();
            _mapDataLoader  = _appManager.GetService <IMapDataLoader>();
        }
예제 #8
0
        void OnEnable()
        {
            Assert.raiseExceptions = true;

            Centre = new GeoCoordinate(CentreLatitude, CentreLongitude);

            Scheduler.MainThread = UnityMainThreadScheduler.MainThread;

            m_container  = new Container();
            m_messageBus = new MessageBus();
            m_trace      = new UnityTrace();

            UnityMainThreadDispatcher.RegisterUnhandledExceptionCallback(
                ex => m_trace.Error("Fatal", ex, "Unhandled exception"));

            m_container.RegisterInstance(this);
            m_container.RegisterInstance(new MapGenTileExporter(this));
            m_container.RegisterInstance <ITrace>(m_trace);
            m_container.RegisterInstance <IPathResolver>(new PathResolver());
            m_container.RegisterInstance(m_messageBus);
            m_container.Register(Component.For <IFileSystemService>().Use <FileSystemService>().Singleton());

            Config = ConfigBuilder.GetDefault()
                     .SetTileSettings(TileSize, 40)
                     .SetRenderOptions(
                RenderMode.Scene,
                new Rectangle2d(0, 0, TileSize, TileSize))
                     .Build();

            m_gameRunner = new GameRunner(m_container, Config);
            m_gameRunner.RegisterPlugin <MapGenBootstrapper>("mapgen", this);
            m_gameRunner.Bootstrap();

            Observable.Start(
                () => {
                m_tileController = GetService <ITileController>();
                m_gameRunner.RunGame(Centre);
                IsInitialized = true;
            },
                Scheduler.ThreadPool);
        }
예제 #9
0
        private void Initialize()
        {
            // initialize services
            _compositionRoot = TestHelper.GetCompositionRoot(_worldZeroPoint);

            // get local references
            _messageBus     = _compositionRoot.GetService <IMessageBus>();
            _trace          = _compositionRoot.GetService <ITrace>();
            _tileController = _compositionRoot.GetService <ITileController>();

            SetupMapData();

            // set observer to react on geo position changes
            _messageBus.AsObservable <GeoPosition>()
            .ObserveOn(Scheduler.MainThread)
            .Subscribe(position =>
            {
                _trace.Debug(TraceCategory, "GeoPosition: {0}", position.ToString());
                _tileController.OnPosition(position.Coordinate, LevelOfDetails);
            });
        }
예제 #10
0
        private void Initialize()
        {
            // initialize services
            _compositionRoot = TestHelper.GetCompositionRoot(_worldZeroPoint);

            // get local references
            _messageBus = _compositionRoot.GetService<IMessageBus>();
            _trace = _compositionRoot.GetService<ITrace>();
            _tileController = _compositionRoot.GetService<ITileController>();

            SetupMapData();

            // set observer to react on geo position changes
            _messageBus.AsObservable<GeoPosition>()
                .ObserveOn(Scheduler.MainThread)
                .Subscribe(position =>
            {
                _trace.Debug(TraceCategory, "GeoPosition: {0}", position.ToString());
                _tileController.OnPosition(position.Coordinate, LevelOfDetails);
            });
        }
예제 #11
0
        private void SetupTileController(uint orderedIndex, BaseNode node)
        {
            HexGridCell <BaseNode> hexGridCell = orderedCells[orderedIndex];

            hexGridCell.Value = node;
            ITileController tileController = orderedControllers[orderedIndex];
            TileView        tileView       = null;

            if (!tilePrefabMap.TryGetValue(node.GetType(), out var value))
            {
                logger.Error("No tile view prefab mapping exists for type {0}.", node.GetType());
                DestroyController(orderedIndex, destroyView: true);
                return;
            }
            if (tileController != null)
            {
                if (tileController.ViewType != value.GetType())
                {
                    DestroyController(orderedIndex, destroyView: true);
                }
                else
                {
                    tileView = tileController.BaseView;
                }
            }
            if (tileView == null)
            {
                tileView = GetTileView(hexGridCell);
                if (tileView == null)
                {
                    logger.Error("Failed to get a tile view for node of type {0}", node.Type);
                    return;
                }
            }
            DestroyController(orderedIndex, destroyView: false);
            tileController = TileControllerFactory.MakeController(tileView, hexGridCell, this);
            orderedControllers[orderedIndex] = tileController;
        }
예제 #12
0
 public LocateCommand(ITileController controller)
 {
     _geoPositionObserver = controller;
     _mapPositionObserver = controller;
 }
예제 #13
0
 public SearchCommand(ITileController controller, ISearchEngine searchEngine)
 {
     _tileController      = controller;
     _geoPositionObserver = controller;
     _searchEngine        = searchEngine;
 }
예제 #14
0
 public void SetTileController(ITileController tileController)
 {
     this.tileController = tileController;
 }