Exemple #1
0
        public static GameObject SetDebugMarker(this GameObject obj, MarkerType type, float scaleMult = 1f)
        {
            if (BaseObjects.markerMaterials.ContainsKey(type))
            {
                GameObject marker = new GameObject("DebugMarker");
                marker.transform.parent = obj.transform;

                MeshFilter filter = marker.AddComponent <MeshFilter>();
                filter.sharedMesh = BaseObjects.cubeMesh;

                MeshRenderer render = marker.AddComponent <MeshRenderer>();
                render.sharedMaterial = BaseObjects.markerMaterials[type];

                DebugMarker dm = marker.AddComponent <DebugMarker>();
                dm.scaleMult = scaleMult;
                dm.type      = type;

                marker.transform.localPosition    = Vector3.zero;
                marker.transform.localEulerAngles = Vector3.zero;
            }

            return(obj);
        }
        public FeedbackHandler(Highlight highlight, DebugMarker debug)
        {
            _ingress = new Subject <SuppaChatto>();
            _ingressMouseMovements = new Subject <Point>();
            _highlight             = highlight;
            _debug     = debug;
            _uiThread  = highlight.Dispatcher;
            _hideTimer = new DispatcherTimer(TimeSpan.FromSeconds(1), DispatcherPriority.Normal, HideTimerTick, _uiThread);
            _hideTimer.Stop();

            _subscriptions = new CompositeDisposable();

            var sub1 = _ingress
                       .Where(x => x.DollaDollaBill?.Currency != null && x.DollaDollaBill?.Amount != null)
                       .ObserveOn(_uiThread)
                       .Subscribe(x =>
            {
                _hideTimer.Stop();
                UpdateDebugWindow(x);
                UpdateHighlight(x);
            });

            _subscriptions.Add(sub1);

            var popupOpened = Observable.FromEventPattern <EventHandler, EventArgs>(
                h => _highlight.Opened += h,
                h => _highlight.Opened -= h)
                              .Select(_ => Unit.Default);
            var popupClosed = Observable.FromEventPattern <EventHandler, EventArgs>(
                h => _highlight.Closed += h,
                h => _highlight.Closed += h)
                              .Select(_ => Unit.Default);

            var whenMouseEntered = Observable.FromEventPattern <MouseEventHandler, MouseEventArgs>(
                h => _highlight.MouseEnter += h,
                h => _highlight.MouseEnter -= h)
                                   .Select(_ => CircuitBreaker.Closed);
            var whenMouseLeaves = Observable.FromEventPattern <MouseEventHandler, MouseEventArgs>(
                h => _highlight.MouseLeave += h,
                h => _highlight.MouseLeave -= h)
                                  .Select(_ => CircuitBreaker.Open);

            var circuit = whenMouseEntered
                          .Merge(whenMouseLeaves)
                          // NOTE; Circuit starts off in OPEN state
                          .StartWith(CircuitBreaker.Open)
                          // WARN; Keep circuit condition as state for new subscriptions!
                          .Replay(1);

            var cancelDispatchTimer = whenMouseEntered
                                      .Subscribe(x => { Debug.WriteLine($"cancelDispatchTimer: {x}"); _hideTimer.Stop(); });

            _subscriptions.Add(cancelDispatchTimer);

            var startDispatcherTimer = popupOpened
                                       .Select(_ => _ingressMouseMovements)
                                       .Switch()
                                       // NOTE; Create dead zone to catch mouse drift
                                       .IgnoreDelta(5, 5)
                                       .CombineLatest(circuit)
                                       .Where(x => x.Second == CircuitBreaker.Open)
                                       .TakeUntil(popupClosed)
                                       .Repeat()
                                       .Subscribe(x => { Debug.WriteLine($"startDispatcherTimer: {x}"); _hideTimer.Start(); });

            _subscriptions.Add(startDispatcherTimer);

            _subscriptions.Add(circuit.Connect());
        }