Beispiel #1
0
        public void Present(PacketPb data, ICSConverter converter)
        {
            MainThreadInvoker.Enqueue(() => _info.Clear());
            IEnumerable <ICloudItem> objects = Pkg2Pts(data, converter).ToArray();

            MainThreadInvoker.Enqueue(() => _info.Render((data.Message, objects)));
        }
Beispiel #2
0
        public override void Update(float delta)
        {
            if (_threadWorker == null)
            {
                return;
            }
            if (_playing)
            {
                if (CurrentPosition == AmountOfFrames - 1)
                {
                    MainThreadInvoker.Enqueue(() => Finished?.Invoke());
                    _playing = false;
                    return;
                }

                NextKeyFrame();
            }
            else if (_rewindPlannedPos > 0)
            {
                Rewind?.Invoke(true);
                _currentPosition  = _rewindPlannedPos;
                _rewindPlannedPos = -1;
                _threadWorker?.Enqueue(() =>
                {
                    _data.ShowAt(_actualTimestamps ![_currentPosition], true);
                    Rewind?.Invoke(false);
                });
 public void Clear()
 {
     lock (GameObjects)
     {
         GameObjects.Clear();
         if (MainThreadInvoker.Instance != null)
         {
             MainThreadInvoker.Enqueue(() => ObservationsPool?.DespawnAllActiveObjects());
         }
     }
 }
Beispiel #4
0
 public void CreateWindow <TComponent>(string title, Action <TComponent, Window> callback,
                                       params object[] titleFormatArgs)
 {
     MainThreadInvoker.Enqueue(() =>
     {
         var prefab = RendererWindowsPrefabs.First(g => g.GetComponent <TComponent>() != null);
         var go     = Instantiate(prefab, Canvas);
         var window = go.GetComponent <Window>();
         window.TitleLabel.SetLocalizedText(title, titleFormatArgs);
         SetManager(window);
         go.SetActive(false);
         Windows.Add(window);
         callback(go.GetComponent <TComponent>(), window);
     });
 }
 private void DestroyObsoleteWindows(object container, RemovedEventArgs args)
 {
     foreach (var id in args.RemovedIds)
     {
         var v = _pinnedViewers.FirstOrDefault(w => w.ObservationContainer == container.GetHashCode() &&
                                               w.ObservationId == id);
         if (v != null)
         {
             MainThreadInvoker.Enqueue(() =>
             {
                 Destroy(v.gameObject);
                 _pinnedViewers.Remove(v);
             });
         }
     }
 }
        private void Start()
        {
#if UNITY_EDITOR
            if (ModeSelector.Mode == Mode.Online)
            {
                Plugins = PluginsLoader.Plugins.Value
                          .OfType <IDataSourcePluginOnline>()
                          .Select(p => (IElektronikPlugin)p)
                          .ToList()
                          .AsReadOnly();
            }
#endif

            ScreenLocker.SetActive(true);

            foreach (var dataSource in Plugins.OfType <IDataSourcePlugin>())
            {
                dataSource.Converter = Converter;
                DataSourcesManager.AddDataSource(dataSource.Data);
            }

            foreach (var dataSource in Plugins.OfType <IDataSourcePluginOffline>())
            {
                PlayerEvents.SetDataSource(dataSource);
            }

            foreach (var plugin in Plugins)
            {
                var thread = new Thread(() => plugin.Start());
                thread.Start();
                _startupThreads.Add(thread);
            }

            PluginsStarted += () => ScreenLocker.SetActive(false);

            Task.Run(() =>
            {
                foreach (var thread in _startupThreads)
                {
                    thread.Join();
                }

                MainThreadInvoker.Enqueue(() => PluginsStarted?.Invoke());
            });
        }
Beispiel #7
0
        public void SetHeader(string[] header)
        {
            MainThreadInvoker.Enqueue(() =>
            {
                Table.Clear();
                var rect = (RectTransform)transform;
                foreach (var columnName in header)
                {
                    var column             = Table.Add().GetComponent <TableColumn>();
                    column.MaxAmountOfRows = MaxAmountOfRows;
                    column.SetHeader(columnName);
                    column.Window = rect;
                    _columns.Add(column);
                }

                rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, rect.sizeDelta.x + 1);
            });
        }
Beispiel #8
0
        public override void Start()
        {
            _containerTree.DisplayName = $"Protobuf: {Path.GetFileName(TypedSettings.FilePath)}";
            _input = File.OpenRead(TypedSettings.FilePath !);
            Converter?.SetInitTRS(Vector3.zero, Quaternion.identity);
            _parsersChain.SetConverter(Converter);

            _frames         = new FramesCollection <Frame>(ReadCommands, TryGetSize());
            _threadWorker   = new ThreadQueueWorker();
            _timer          = new Timer(DelayBetweenFrames);
            _timer.Elapsed += (_, __) =>
            {
                _threadWorker.Enqueue(() =>
                {
                    if (NextFrame())
                    {
                        return;
                    }
                    _timer?.Stop();
                    MainThreadInvoker.Enqueue(() => Finished?.Invoke());
                });
            };
        }
        private IEnumerator CheckCollisionCoroutine()
        {
            while (true)
            {
                var mousePosition = Mouse.current.position.ReadValue();
                var ray           = _camera.ScreenPointToRay(mousePosition);
                Task.Run(() =>
                {
                    var collision = CollisionCloud.FindCollided(ray);

                    if (collision.HasValue)
                    {
                        MainThreadInvoker.Enqueue(
                            () => ProcessRaycast(collision.Value.container, collision.Value.item, mousePosition));
                    }
                    else
                    {
                        MainThreadInvoker.Enqueue(HideViewer);
                    }
                });
                yield return(new WaitForSeconds(CollisionCheckTimeout));
            }
            // ReSharper disable once IteratorNeverReturns
        }
Beispiel #10
0
        public void Compute(MonoBehaviour settings, IClusterizationAlgorithm algorithm)
        {
            var pair = _clusterableContainers[ContainersSelector.value];
            var list = (pair.container as IClusterable) !.GetAllPoints().ToList();

            Task.Run(() =>
            {
                try
                {
                    var data      = algorithm.Compute(list);
                    var clustered = CreateClustersContainers(pair.name, data, pair.container as IVisible);
                    MainThreadInvoker.Enqueue(() =>
                    {
                        DataSourcesManager.AddDataSource(clustered);
                        settings.enabled = true;
                    });
                }
                catch (Exception e)
                {
                    Debug.LogException(e);
                    MainThreadInvoker.Enqueue(() => { settings.enabled = true; });
                }
            });
        }
Beispiel #11
0
 public void Clear()
 {
     MainThreadInvoker.Enqueue(() => _info?.Clear());
 }