Exemple #1
0
        public void Evaluate(int spreadMax)
        {
            if (FEnabled.SliceCount == 0 || FEnabled[0] == false)
            {
                FStructOut.ResizeAndDismiss(0, () => IOManager.CreateStruct(Declaration));
            }

            else if (FEnabled[0])
            {
                spreadMax = IOManager.CalculateSpreadMax();
                FStructOut.ResizeAndDismiss(spreadMax, () => IOManager.CreateStruct(Declaration));

                IOManager.ReadFromIOBins(FStructOut);
            }
        }
Exemple #2
0
        public void Evaluate(int spreadMax)
        {
            if (!FKeyIn.IsChanged && !FCapsIn.IsChanged && !FTimeIn.IsChanged)
            {
                return;
            }

            spreadMax = SpreadUtils.SpreadMax(FKeyIn, FCapsIn, FTimeIn);
            FSubjects.ResizeAndDispose(spreadMax, slice => new Subject <KeyNotification>());
            FOutput.ResizeAndDismiss(spreadMax, slice => new Keyboard(FSubjects[slice], true));
            FKeyboardStates.ResizeAndDismiss(spreadMax, () => KeyboardState.Empty);

            for (int i = 0; i < spreadMax; i++)
            {
                var keyboard              = FOutput[i];
                var keyboardState         = new KeyboardState(FKeyIn[i].Cast <Keys>(), FCapsIn[0], FTimeIn[i]);
                var previousKeyboardState = FKeyboardStates[i];
                if (keyboardState != previousKeyboardState)
                {
                    var subject  = FSubjects[i];
                    var keyDowns = keyboardState.KeyCodes.Except(previousKeyboardState.KeyCodes);
                    foreach (var keyDown in keyDowns)
                    {
                        subject.OnNext(new KeyDownNotification(keyDown, this));
                    }
                    var keyUps = previousKeyboardState.KeyCodes.Except(keyboardState.KeyCodes);
                    foreach (var keyUp in keyUps)
                    {
                        subject.OnNext(new KeyUpNotification(keyUp, this));
                    }
                }
                FKeyboardStates[i] = keyboardState;
            }
        }
Exemple #3
0
        public virtual void Evaluate(int spreadMax)
        {
            FOut.SliceCount = spreadMax;
            FInvOut.ResizeAndDismiss(spreadMax, () => { return(true); });

            FBuffer.SliceCount = spreadMax;
            for (int i = 0; i < spreadMax; i++)
            {
                if (FOut[i])
                {
                    FBuffer[i] += Increment();

                    if (FSet[i] && FReTrig[i])
                    {
                        FBuffer[i] = 0;
                    }

                    if (FBuffer[i] >= Duration(i) || FReset[i])
                    {
                        FBuffer[i] = 0;
                        FOut[i]    = false;
                        FInvOut[i] = true;
                    }
                }
                else if (FSet[i])
                {
                    FOut[i]    = true;
                    FInvOut[i] = false;
                }
            }
        }
Exemple #4
0
 public void Evaluate(int SpreadMax)
 {
     FStructOut.ResizeAndDismiss(FStructIn.SliceCount, (int i) => FStructIn[i]);
     FNames.ResizeAndDismiss(FStructIn.SliceCount, (int i) => "null");
     IOManager.SetLengthAllIOs(FStructIn.SliceCount);
     for (int i = 0; i < FStructIn.SliceCount; i++)
     {
         if (FStructOut[i] != FStructIn[i] || FStructOut[i]?.Name != FStructIn[i]?.Name)
         {
             FStructOut[i] = FStructIn[i];
         }
         if (FStructIn[i] != null)
         {
             var str = FStructIn[i];
             IOManager.WriteToIOBins(ref str, i);
             if (FNames[i] != str.Name)
             {
                 FNames[i] = str.Name;
             }
         }
         else
         {
             IOManager.WriteNilToIOBins(i);
             FNames[i] = "null";
         }
     }
 }
Exemple #5
0
 public void Evaluate(int SpreadMax)
 {
     FStructOut.ResizeAndDismiss(FStructIn.SliceCount,
                                 (int i) => (FStructIn[i] != null) ? IOManager.CreateStruct(FStructIn[i]) : null);
     FLastIn.ResizeAndDismiss(FStructIn.SliceCount, (int i) => FStructIn[i]);
     if (FEnabled[0])
     {
         for (int i = 0; i < FStructIn.SliceCount; i++)
         {
             if (FStructIn[i] != null)
             {
                 if (FStructOut[i] == null || //declaration changed
                     FLastIn[i] != FStructIn[i])    //struct with same layout but different source
                 {
                     FStructOut[i] = IOManager.CreateStruct(FStructIn[i]);
                     FLastIn[i]    = FStructIn[i];
                 }
             }
             else
             {
                 FStructOut[i] = null;
             }
         }
         IOManager.ReadFromIOBins(FStructOut);
     }
 }
Exemple #6
0
        public void Evaluate(int SpreadMax)
        {
            FOnDataOut.SliceCount = SpreadMax;
            FMessageOut.ResizeAndDismiss(SpreadMax, () => new Spread <int>());
            FData1Out.ResizeAndDismiss(SpreadMax, () => new Spread <int>());
            FData2Out.ResizeAndDismiss(SpreadMax, () => new Spread <int>());
            FSampleOffsetOut.ResizeAndDismiss(SpreadMax, () => new Spread <int>());

            if (FEventsIn.IsChanged)
            {
                FEventSources.SliceCount = SpreadMax;

                for (int i = 0; i < SpreadMax; i++)
                {
                    FEventSources[i] = new MidiEventSourceManager(FEventsIn[i]);
                }
            }

            for (int i = 0; i < SpreadMax; i++)
            {
                var eventSource = FEventSources[i];

                var messageSpread      = FMessageOut[i];
                var data1Spread        = FData1Out[i];
                var data2Spread        = FData2Out[i];
                var sampleOffsetSpread = FSampleOffsetOut[i];

                messageSpread.SliceCount    = 0;
                data1Spread.SliceCount      = 0;
                data2Spread.SliceCount      = 0;
                FSampleOffsetOut.SliceCount = 0;

                if (eventSource.MoveNext())
                {
                    var evts = eventSource.Current;
                    if (evts.Count > 0)
                    {
                        FOnDataOut[i] = true;
                        foreach (var evt in evts)
                        {
                            messageSpread.Add(evt.Message.Bytes[0]);
                            data1Spread.Add(evt.Message.Bytes[1]);
                            data2Spread.Add(evt.Message.Bytes[2]);
                            sampleOffsetSpread.Add(evt.Message.DeltaFrames);
                        }
                    }
                    else
                    {
                        FOnDataOut[i] = false;
                    }
                }
                else
                {
                    FOnDataOut[i] = false;
                }
            }
        }
Exemple #7
0
        public void Evaluate(int spreadMax)
        {
            var binCount = BinSizePin.IOObject.Length;

            FSubjects.ResizeAndDispose(binCount);
            MouseOut.ResizeAndDismiss(binCount, slice => new Mouse(FSubjects[slice]));
            for (int bin = 0; bin < binCount; bin++)
            {
                var subject           = FSubjects[bin];
                var notificationCount = EventTypeIn[bin].SliceCount;
                for (int i = 0; i < notificationCount; i++)
                {
                    var position = PositionIn[bin][i].ToMousePoint();
                    MouseNotification notification;
                    switch (EventTypeIn[bin][i])
                    {
                    case MouseNotificationKind.MouseDown:
                        notification = new MouseDownNotification(position, MouseExtensions.ClientArea, GetMouseButtons(bin, i));
                        break;

                    case MouseNotificationKind.MouseUp:
                        notification = new MouseUpNotification(position, MouseExtensions.ClientArea, GetMouseButtons(bin, i));
                        break;

                    case MouseNotificationKind.MouseMove:
                        notification = new MouseMoveNotification(position, MouseExtensions.ClientArea);
                        break;

                    case MouseNotificationKind.MouseWheel:
                        notification = new MouseWheelNotification(position, MouseExtensions.ClientArea, MouseWheelIn[bin][i]);
                        break;

                    case MouseNotificationKind.MouseClick:
                        notification = new MouseClickNotification(position, MouseExtensions.ClientArea, GetMouseButtons(bin, i), Math.Max(ClickCountIn[bin][i], 1));
                        break;

                    default:
                        throw new NotImplementedException();
                    }
                    if (notification != null)
                    {
                        subject.OnNext(notification);
                    }
                }
            }
        }
Exemple #8
0
        public void Evaluate(int SpreadMax)
        {
            FOut.Stream.IsChanged = false;
            var valid = _input != null;

            if (valid)
            {
                valid = _input.Spread.SliceCount > 0;
            }
            if (valid)
            {
                valid = _input[0] != null;
            }
            if (valid)
            {
                RenderRequest?.Invoke(this, FPluginHost);
                if (!_input.Spread.IsChanged && !_typeChanged && !FFlagChanged[0])
                {
                    return;
                }

                FOut.ResizeAndDismiss(_input.Spread.SliceCount, i => null);
                for (int i = 0; i < _input.Spread.SliceCount; i++)
                {
                    if (FOut[i] == null)
                    {
                        FOut[i] = new VAuxObject {
                            Object = _input[i]
                        }
                    }
                    ;
                    var vaux = (VAuxObject)FOut[i];
                    vaux.Object = _input[i];
                }

                _typeChanged          = false;
                FOut.Stream.IsChanged = FFlagChanged[0];
            }
            else
            {
                FOut.Stream.IsChanged = _prevvalid;
                FOut.SliceCount       = 0;
            }
            _prevvalid = valid;
        }
        public void Evaluate(int SpreadMax)
        {
            if (!Input.IsConnected)
            {
                Output.SliceCount   = 0;
                ErrorOut.SliceCount = 0;
                return;
            }

            Output.ResizeAndDismiss(Input.SliceCount, () => new HidSteamController());
            Output.Stream.IsChanged = true;
            ErrorOut.SliceCount     = Output.SliceCount;

            for (int i = 0; i < Output.SliceCount; i++)
            {
                ErrorOut[i] = Output[i].Update(Input[i]);
            }
        }
Exemple #10
0
        public void Evaluate(int spreadMax)
        {
            var binCount = BinSizePin.IOObject.Length;

            FSubjects.ResizeAndDispose(binCount);
            KeyboardOut.ResizeAndDismiss(binCount, slice => new Keyboard(FSubjects[slice]));
            for (int bin = 0; bin < binCount; bin++)
            {
                var subject           = FSubjects[bin];
                var notificationCount = EventTypeIn[bin].SliceCount;
                for (int i = 0; i < notificationCount; i++)
                {
                    KeyNotification notification;
                    switch (EventTypeIn[bin][i])
                    {
                    case KeyNotificationKind.KeyDown:
                        notification = new KeyDownNotification((Keys)KeyCodeIn[bin][i], this);
                        break;

                    case KeyNotificationKind.KeyPress:
                        var s = KeyCharIn[bin][i];
                        notification = s.Length > 0
                                ? new KeyPressNotification(s[0], this)
                                : null;
                        break;

                    case KeyNotificationKind.KeyUp:
                        notification = new KeyUpNotification((Keys)KeyCodeIn[bin][i], this);
                        break;

                    case KeyNotificationKind.DeviceLost:
                        notification = new KeyboardLostNotification(this);
                        break;

                    default:
                        throw new NotImplementedException();
                    }
                    if (notification != null)
                    {
                        subject.OnNext(notification);
                    }
                }
            }
        }
Exemple #11
0
        public void Evaluate(int spreadMax)
        {
            FBuffer.ResizeAndDismiss(FInput.SliceCount, (slice) => { return(FInput[slice].DeepCopy()); });
            FOutput.ResizeAndDismiss(FInput.SliceCount, (slice) => { return(FInput[slice].DeepCopy()); });
            for (int i = 0; i < FInput.SliceCount; i++)
            {
                if (FBuffer[i] == null)
                {
                    FOutput[i] = null;
                }
                else if (FOutput[i] == null || FOutput[i].Key != FBuffer[i].Key)
                {
                    FOutput[i] = FBuffer[i].DeepCopy();
                }
                else
                {
                    foreach (var e in FBuffer[i].Data)
                    {
                        FOutput[i].Data[e.Key] = (e.Value as ISpread).Clone();
                    }
                }

                if (FInput[i] == null)
                {
                    FBuffer[i] = null;
                }
                else if (FBuffer[i] == null || FBuffer[i].Key != FInput[i].Key)
                {
                    FBuffer[i] = FInput[i].DeepCopy();
                }
                else
                {
                    foreach (var e in FInput[i].Data)
                    {
                        FBuffer[i].Data[e.Key] = (e.Value as ISpread).Clone();
                    }
                }
            }
        }
 public void Evaluate(int spreadMax)
 {
     MouseOut.ResizeAndDismiss(
         spreadMax,
         slice =>
     {
         var mouseMoves = XIn.ToObservable(slice)
                          .CombineLatest(YIn.ToObservable(slice), (x, y) => new Vector2D(x, y))
                          .Select(v => new MouseMoveNotification(ToMousePoint(v), FClientArea, this));
         var mouseButtons = Observable.Merge(
             LeftButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.Left)),
             MiddleButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.Middle)),
             RightButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.Right)),
             X1ButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.XButton1)),
             X2ButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.XButton2))
             );
         var mouseDowns = mouseButtons.Where(x => x.Item1)
                          .Select(x => x.Item2)
                          .Select(x => new MouseDownNotification(ToMousePoint(new Vector2D(XIn[slice], YIn[slice])), FClientArea, x, this));
         var mouseUps = mouseButtons.Where(x => !x.Item1)
                        .Select(x => x.Item2)
                        .Select(x => new MouseUpNotification(ToMousePoint(new Vector2D(XIn[slice], YIn[slice])), FClientArea, x, this));
         var mouseWheelDeltas = MouseWheelIn.ToObservable(0)
                                .StartWith(0)
                                .Buffer(2, 1)
                                .Select(b => b[1] - b[0])
                                .Select(d => new MouseWheelNotification(ToMousePoint(new Vector2D(XIn[slice], YIn[slice])), FClientArea, d * Const.WHEEL_DELTA, this))
                                .Cast <MouseNotification>();
         var notifications = Observable.Merge <MouseNotification>(
             mouseMoves,
             mouseDowns,
             mouseUps,
             mouseWheelDeltas);
         return(new Mouse(notifications));
     }
         );
 }
Exemple #13
0
 public void Evaluate(int spreadMax)
 {
     FLastSet.ResizeAndDismiss(FSet.SliceCount, (int i) => !FSet[i]);
     if (FSet.SliceCount == 1)
     {
         if (FSet[0])
         {
             FInput.Sync();
             FOutput.ResizeAndDismiss(spreadMax, (int i) => FInput[i]);
             FBuffer.ResizeAndDismiss(spreadMax, (int i) => FInput[i] == null ? null : new StructType(FInput[i]));
             for (int i = 0; i < FInput.SliceCount; i++)
             {
                 if (FOutput[i] != FInput[i])
                 {
                     FOutput[i] = FInput[i];
                     if (FInput[i] != null)
                     {
                         FBuffer[i] = new StructType(FInput[i]);
                     }
                 }
             }
         }
         else if ((FSet[0] != FLastSet[0]) && (!FSet[0]))
         {
             FOutput.SliceCount = FBuffer.SliceCount;
             for (int i = 0; i < FInput.SliceCount; i++)
             {
                 if (FBuffer[i] != null)
                 {
                     FOutput[i] = new StructType(FBuffer[i]);
                     foreach (var f in FBuffer[i].Fields)
                     {
                         FOutput[i][f] = FBuffer[i].GetClonedData(f);
                     }
                 }
                 else
                 {
                     FOutput[i] = null;
                 }
             }
         }
     }
     else
     {
         FInput.Sync();
         FOutput.ResizeAndDismiss(spreadMax, (int i) => null);
         FBuffer.ResizeAndDismiss(spreadMax, (int i) => null);
         for (int i = 0; i < spreadMax; i++)
         {
             if (FSet[i])
             {
                 if (FOutput[i] != FInput[i])
                 {
                     FOutput[i] = FInput[i];
                     if (FInput[i] != null)
                     {
                         FBuffer[i] = new StructType(FInput[i]);
                     }
                 }
             }
             else if ((FSet[i] != FLastSet[i]) && (!FSet[i]))
             {
                 if (FBuffer[i] == null)
                 {
                     FOutput[i] = null;
                 }
                 else
                 {
                     FOutput[i] = new StructType(FBuffer[i]);
                     foreach (var f in FBuffer[i].Fields)
                     {
                         FOutput[i][f] = FBuffer[i].GetClonedData(f);
                     }
                 }
             }
         }
     }
     FLastSet.AssignFrom(FSet);
 }
Exemple #14
0
 public static void ResizeAndDismiss <T>(this ISpread <T> spread, int sliceCount)
     where T : new()
 {
     spread.ResizeAndDismiss(sliceCount, () => new T());
 }
        public void Evaluate(int SpreadMax)
        {
            bool changewochildren = (SpreadUtils.AnyChanged(
                                         NameIn,
                                         ManIdIn,
                                         IdIn,
                                         FadeInIn,
                                         FadeOutIn,
                                         FadeInDelIn,
                                         FadeOutDelIn,
                                         TransFollowTimeIn,
                                         BehaviorsIn,
                                         TransparentIn,
                                         ActiveIn,
                                         DispTrIn,
                                         TrUpdateModeIn,
                                         ClipParentHittingIn,
                                         SubContextIn,
                                         SetAttValsIn
                                         ) || AttachedChanged() || AuxDataChanged()) && AutoUpdateIn.TryGetSlice(0) || ForceUpdateIn.TryGetSlice(0);

            bool childrenchanged = AutoUpdateIn.TryGetSlice(0) && ChildrenIn.IsChanged || ForceUpdateIn.TryGetSlice(0);

            bool changed = childrenchanged || changewochildren || SetAttValsIn.TryGetSlice(0);

            int sprmax = SpreadUtils.SpreadMax(
                ChildrenIn,
                NameIn,
                BehaviorsIn,
                DispTrIn,
                ActiveIn,
                AttAuxKeysIn,
                AttTextsIn,
                AttValsIn,
                IdIn
                );

            ElementProtOut.Stream.IsChanged = false;

            for (int i = 0; i < ElementProtOut.SliceCount; i++)
            {
                if (ElementProtOut[i] == null)
                {
                    continue;
                }
                ElementProtOut[i].IsChanged--;
            }
            if (changed || init < 2)
            {
                if (ExternalIn.IsChanged)
                {
                    ElementProtOut.SliceCount = 0;
                }

                ElementProtOut.ResizeAndDismiss(sprmax, i => FillElement(ProvidePrototype(i, null), i, true));
                ElementIdOut.SliceCount = ElementProtOut.SliceCount;
                var gchildrenchanged = false;

                for (int i = 0; i < ElementProtOut.SliceCount; i++)
                {
                    var isnew = false;
                    if (ElementProtOut[i] == null)
                    {
                        ElementProtOut[i] = ProvidePrototype(i, ManIdIn[i] ? IdIn[i] : null);
                        isnew             = true;
                    }

                    bool lchildrenchanged = false;
                    if (!changewochildren && childrenchanged)
                    {
                        if (ChildrenIn[i].SliceCount > 0)
                        {
                            for (int j = 0; j < ChildrenIn[i].SliceCount; j++)
                            {
                                if (ChildrenIn[i][j] == null)
                                {
                                    continue;
                                }
                                if (ChildrenIn[i][j].IsChanged > 0)
                                {
                                    lchildrenchanged = gchildrenchanged = true;
                                }
                                if (ElementProtOut[i].Children.ContainsKey(ChildrenIn[i][j].Id))
                                {
                                    continue;
                                }
                                ChildrenIn[i][j].IsChanged = ElementNodeUtils.ChangedFrames;
                                lchildrenchanged           = gchildrenchanged = true;
                            }
                        }
                        else
                        {
                            lchildrenchanged = ElementProtOut[i].Children.Count > 0;
                            gchildrenchanged = gchildrenchanged || lchildrenchanged;
                        }
                    }

                    if (changewochildren || lchildrenchanged)
                    {
                        FillElement(ElementProtOut[i], i, isnew || init < 2);
                    }

                    if (!UseExternal(i, out var tprot))
                    {
                        if (ManIdIn[i])
                        {
                            ElementProtOut[i].Id = IdIn[i];
                        }
                    }
                    ElementIdOut[i] = ElementProtOut[i].Id;
                }
                //FElementProt.Flush();
                if (changewochildren || gchildrenchanged)
                {
                    ElementProtOut.Stream.IsChanged = true;
                }
            }
            init++;
        }