コード例 #1
0
        public void DeadListenersRemovedRightAway()
        {
            var slot = new EventSlot();

            bool called = false;
            bool dead   = false;
            int  count  = 0;

            IEventListener listener = new DelegateEventListener(() => { if (count == 0)
                                                                        {
                                                                            dead = true;
                                                                        }
                                                                        else
                                                                        {
                                                                            called = true;
                                                                        } ++count; }, () => dead);

            slot.Register(listener);

            slot.Trigger();
            dead = false;

            slot.Trigger();

            Assert.That(!called);
        }
コード例 #2
0
        public void ExceptionsDuringTriggerDontEraseSlot()
        {
            var slot = new EventSlot();

            bool called = false;

            IEventListener listener2 = new DelegateEventListener(() => called = true);

            bool           dead     = false;
            IEventListener listener = new DelegateEventListener(() => { dead = true; throw new Exception(); }, () => dead);


            slot.Register(listener);

            slot.Register(listener2);

            try
            {
                slot.Trigger();
            }
            catch (Exception) {}

            slot.Trigger();

            Assert.That(called);
        }
コード例 #3
0
ファイル: Semaphore.cs プロジェクト: k10czar/K10
    public void Release(object obj)
    {
        if (Free || obj == null)
        {
            return;
        }

        SemaphoreObject s;

        if (_semaphores.TryGetValue(obj, out s))
        {
            s.Value--;
            if (s.Value == 0)
            {
                _semaphores.Remove(obj);
            }
        }

        if (Free)
        {
            _releaseEvent.Trigger();
            _changeStateEvent.Trigger(true);
        }

        _onInteraction.Trigger();
    }
コード例 #4
0
ファイル: CachedDictionary.cs プロジェクト: k10czar/K10
    public void Remove(K key, T value)
    {
        List <T> list;

        if (!_dictionary.TryGetValue(key, out list))
        {
            return;
        }

        var deleted = list.Remove(value);

        if (!deleted)
        {
            return;
        }

        var count = list.Count;

        GetEventDrivenCountEditor(key).Setter(count);
        if (list.Count == 0)
        {
            _dictionary.Remove(key);
            GetEventDrivenContainsEditor(key).SetFalse();
        }

        _onElementRemoved.Trigger(value);
        _onChange.Trigger();
        // if( value != null )_ onNotNullElementRemoved.Trigger( value );
    }
コード例 #5
0
ファイル: Semaphore.cs プロジェクト: k10czar/K10
    public bool Block(object obj, bool increaseBlock = true)
    {
        if (obj == null)
        {
            return(false);
        }

        bool trigger = Free;

        SemaphoreObject s;
        bool            newKey = !_semaphores.TryGetValue(obj, out s);

        if (newKey || increaseBlock)
        {
            if (newKey)
            {
                s = new SemaphoreObject();
                _semaphores.Add(obj, s);
            }
            s.Value++;
        }

        if (trigger)
        {
            _blockEvent.Trigger();
            _changeStateEvent.Trigger(false);
        }

        _onInteraction.Trigger();

        return(newKey);
    }
コード例 #6
0
 public void Start()
 {
     _r.Start(_cachedColor.r);
     _g.Start(_cachedColor.g);
     _b.Start(_cachedColor.b);
     _a.Start(_cachedColor.a);
     _colorUpdate.Trigger(_cachedColor);
 }
コード例 #7
0
 public void AddEntry(Key key, Value t)
 {
     if (_dict.ContainsKey(key))
     {
         _dict.Remove(key);
     }
     _dict.Add(key, t);
     t.IsValid.RegisterOnFalse(() => RemoveEntry(key));
     _onEntriesChanged.Trigger();
 }
コード例 #8
0
ファイル: CachedCollection.cs プロジェクト: k10czar/K10
    public T this[int id]
    {
        get { return(_list[id]); }

        set
        {
            TriggerRemoveEvents(_list[id]);
            _list[id] = value;
            _onElementAdded.Trigger(value);
        }
    }
コード例 #9
0
ファイル: FloatAnimator.cs プロジェクト: k10czar/K10
    public void Force(float value)
    {
        var val = Mathf.Clamp(value, _min, _max);

        if (Mathf.Approximately(_current, val))
        {
            return;
        }

        _current = val;

        _onValueUpdate.Trigger(_current);
        CheckDesired();
    }
コード例 #10
0
        public void Once()
        {
            var slot = new EventSlot();

            int count = 0;

            IEventListener listener = DelegateEventListeners.Once(() => { ++count; });

            slot.Register(listener);

            slot.Trigger();
            slot.Trigger();

            Assert.AreEqual(1, count);
        }
コード例 #11
0
ファイル: BoolStateRelay.cs プロジェクト: k10czar/K10
    public void ChangeSource(IBoolStateObserver newSource)
    {
        if (newSource == _currentSource)
        {
            return;
        }

        var oldValue = Value;

        _events.Void();

        _currentSource = newSource;
        var newValue = Value;

        if (oldValue != newValue)
        {
            _onChange.Trigger(newValue);
            if (newValue)
            {
                _onTrueState.Trigger();
            }
            else
            {
                _onFalseState.Trigger();
            }
        }

        if (_currentSource != null)
        {
            _currentSource.OnChange.Register(_events.Validated <bool>(_onChange));
            _currentSource.OnTrueState.Register(_events.Validated(_onTrueState));
            _currentSource.OnFalseState.Register(_events.Validated(_onFalseState));
        }
    }
コード例 #12
0
        public void DeadListenerRemoved()
        {
            var slot = new EventSlot();

            bool called = false;
            bool dead   = true;

            IEventListener listener = new DelegateEventListener(() => called = true, () => dead);

            slot.Register(listener);
            slot.Trigger();
            dead = false;
            slot.Trigger();

            Assert.That(!called);
        }
コード例 #13
0
ファイル: CachedDictionary.cs プロジェクト: k10czar/K10
    public void Add(K key, T value)
    {
        List <T> list;

        if (!_dictionary.TryGetValue(key, out list))
        {
            list = new List <T>();
            _dictionary.Add(key, list);
            GetEventDrivenContainsEditor(key).SetTrue();
        }

        list.Add(value);
        GetEventDrivenCountEditor(key).Setter(list.Count);
        _onElementAdded.Trigger(value);
        _onChange.Trigger();
    }
コード例 #14
0
ファイル: DragManager.cs プロジェクト: k10czar/K10
    public void Update()
    {
        if (!_valid)
        {
            return;
        }

        var angle    = CalculateAngle();
        var distance = CalculateDistance();

        if (_lastAngle != angle)
        {
            _angleChange = angle - _lastAngle;
            if (_angleChange > Mathf.PI)
            {
                _angleChange = _angleChange - 2 * Mathf.PI;
            }
            if (_angleChange < -Mathf.PI)
            {
                _angleChange = _angleChange + 2 * Mathf.PI;
            }

            _lastAngle = angle;
//			_onPinchAngleChanged.Trigger( angle );
        }

        if (_lastDistance != distance)
        {
            _distanceChange = distance - _lastDistance;
            _lastDistance   = distance;
//			_onPinchDistanceChanged.Trigger( _distanceChange );
        }

        _onPinch.Trigger(this);
    }
コード例 #15
0
ファイル: DragManager.cs プロジェクト: k10czar/K10
 internal void AddPoint(Vector2 point)
 {
     if (point != LastPoint)
     {
         _points.Add(new TimedPosition(point));
         _onDrag.Trigger(this);
     }
 }
コード例 #16
0
ファイル: DragManager.cs プロジェクト: k10czar/K10
 public void TryDestroy()
 {
     if (_valid)
     {
         _valid = false;
         _onPinchComplete.Trigger(this);
     }
 }
コード例 #17
0
ファイル: CachedCollection.cs プロジェクト: k10czar/K10
 void TriggerRemoveEvents(T t)
 {
     _onElementRemoved.Trigger(t);
     if (t != null)
     {
         _onNotNullElementRemoved.Trigger(t);
     }
     _onChange.Trigger();
 }
コード例 #18
0
 public void Setter(T value)
 {
     if (_value.Equals(value))
     {
         return;
     }
     _value = value;
     _onChange.Trigger(value);
 }
コード例 #19
0
ファイル: Vector3State.cs プロジェクト: k10czar/K10
 public void Setter(Vector3 value)
 {
     if (Mathf.Approximately(_value.x, value.x) && Mathf.Approximately(_value.y, value.y) && Mathf.Approximately(_value.z, value.z))
     {
         return;
     }
     _value = value;
     _onChange.Trigger(value);
 }
コード例 #20
0
 public void Setter(Quaternion value)
 {
     if (_value == value)
     {
         return;
     }
     _value = value;
     _onChange.Trigger(value);
 }
コード例 #21
0
 public void Setter(float value)
 {
     if (Mathf.Approximately(_value, value))
     {
         return;
     }
     _value = value;
     _onChange.Trigger(value);
 }
コード例 #22
0
 public void Setter(byte value)
 {
     if (_value == value)
     {
         return;
     }
     _value = value;
     _onChange.Trigger(value);
 }
コード例 #23
0
 public void Setter(double value)
 {
     if (_value - value < double.Epsilon)
     {
         return;
     }
     _value = value;
     _onChange.Trigger(value);
 }
コード例 #24
0
    public void CompleteWarning(float seconds)
    {
        if (_isWarned)
        {
            return;
        }

        _isWarned = true;
        _warning.Trigger(seconds);
    }
コード例 #25
0
ファイル: Future.cs プロジェクト: k10czar/K10
    public void ForceComplete()
    {
        if (_isComplete)
        {
            return;
        }

        _isComplete = true;
        _completion.Trigger();
    }
コード例 #26
0
 public void Setter(Guid value)
 {
     if (_value.Value == value)
     {
         return;
     }
     _value.SetGuid(value);
     _isEmpty.Setter(value == Guid.Empty);
     _onChange.Trigger(value);
 }
コード例 #27
0
 public void Void()
 {
     if (!_isValid)
     {
         return;
     }
     _isValid = false;
     _onFalseState.Trigger();
     _onChange.Trigger(false);
 }
コード例 #28
0
 private void OnValueChange(bool value)
 {
     if (value)
     {
         _onTrueState.Trigger();
     }
     else
     {
         _onFalseState.Trigger();
     }
 }
コード例 #29
0
    public void Lock(string lockName, object activator)
    {
        List <object> acts;

        if (!_activators.TryGetValue(lockName, out acts))
        {
            acts = new List <object>();
            _activators[lockName] = acts;
        }

        if (!acts.Contains(activator))
        {
            if (acts.Count == 0)
            {
                _changeStateEvent.Trigger(lockName, true);
            }

            acts.Add(activator);
        }
    }
コード例 #30
0
        public void EventCallOrder()
        {
            var        slot = new EventSlot();
            List <int> ints = new List <int>();

            slot.Register(() => ints.Add(0));
            slot.Register(() => ints.Add(1));
            slot.Trigger();

            Assert.That(ints[0].Equals(0) && ints[1].Equals(1));
        }