public void Connect(CodeBlock.Connector _A, CodeBlock.Connector _B) { CodeBlock.Connector _In = null; CodeBlock.Connector _Out = null; if (_A is CodeBlock.Input) _In = _A; if (_B is CodeBlock.Input) _In = _B; if (_A is CodeBlock.Output) _Out = _A; if (_B is CodeBlock.Output) _Out = _B; if (_Out is CodeBlock.TriggerOutput && _In is CodeBlock.TriggerInput) { CodeBlock.TriggerOutput Out = (CodeBlock.TriggerOutput)_Out; CodeBlock.TriggerInput In = (CodeBlock.TriggerInput)_In; if (!Out.Connected.Contains(In)) Out.Connected.Add(In); if (!In.Connected.Contains(Out)) In.Connected.Add(Out); if (!codeblocks.Contains(Out.Owner.Owner)) codeblocks.Add(Out.Owner.Owner); if (!codeblocks.Contains(In.Owner.Owner)) codeblocks.Add(In.Owner.Owner); In.Owner.Owner.Sequence = Out.Owner.Owner.Sequence = this; } if (_Out is CodeBlock.DataOutput && _In is CodeBlock.DataInput) { CodeBlock.DataOutput Out = (CodeBlock.DataOutput)_Out; CodeBlock.DataInput In = (CodeBlock.DataInput)_In; if (!Out.Connected.Contains(In)) Out.Connected.Add(In); if (In.Connected != null) In.Connected.Connected.Remove(In);// override connection In.Connected = Out; if (!codeblocks.Contains(Out.Owner.Owner)) codeblocks.Add(Out.Owner.Owner); if (!codeblocks.Contains(In.Owner.Owner)) codeblocks.Add(In.Owner.Owner); In.Owner.Owner.Sequence = Out.Owner.Owner.Sequence = this; //remove any connection that will be overriden //foreach (CodeBlock b in codeblocks) foreach (CodeBlock.DataOutput o in b.DataOutputs) foreach (CodeBlock.DataInput i in o.Connected.ToArray()) if (i == _In) o.Connected.Remove(i); } }
public override byte[] Compile(CodeBlock.TriggerInput _Input) { var v = ((MainStationCodeBlock)DataInputs[0].Connected.Owner.Owner).GetOutput(DataInputs[0].Connected); MemoryStream stream = new MemoryStream(); stream.Write(v.Code, 0, v.Code.Length); byte[] code = CodeInstructions.SetTimer(GetTimerID(), GetEventID(), v.Register.index); stream.Write(code, 0, code.Length); return stream.ToArray(); }
public override void HandleInput(CodeBlock.DataInput _Input, object _Data) { if (!variables.ContainsKey(name))variables.Add(name, (float)_Data); else variables[name] = (float)_Data; }
public override void HandleInput(CodeBlock.DataInput _Input, object _Data) { throw new NotImplementedException(); }
public override void HandleInput(CodeBlock.DataInput _Input, object _Data) { }
public virtual void Trigger(CodeBlock.TriggerOutput _Output) { foreach (CodeBlock.TriggerInput i in _Output.Connected) { ((DesktopCodeBlock)i.Owner).HandleTrigger(i); } }
public abstract void HandleTrigger(CodeBlock.TriggerInput _Input);
public abstract object HandleOutput(CodeBlock.DataOutput _Output);
public virtual void HandleInput(CodeBlock.DataInput _Input, object _Data) { }
public object GetInput(CodeBlock.DataInput _Input) { return ((DesktopCodeBlock)_Input.Connected.Owner).HandleOutput(_Input.Connected); }
public Capability(CodeBlock _Owner) { Owner = _Owner; if (Owner != null) Owner.Capabilities.Add(this); }
public void AddCodeBlock(CodeBlock _CodeBlock) { if (codeblocks.Contains(_CodeBlock))return; codeblocks.Add(_CodeBlock); _CodeBlock.Sequence = this; }
public void RemoveCodeBlock(CodeBlock _CodeBlock) { if (codeblocks.Contains(_CodeBlock)) { _CodeBlock.DisconnectAllInputs(); _CodeBlock.DisconnectAllOutputs(); codeblocks.Remove(_CodeBlock); } }