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); } }
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; } }
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; } } }
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"; } } }
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); } }
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; } } }
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); } } } }
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]); } }
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); } } } }
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)); } ); }
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); }
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++; }