public void TransmitBit(Glyph7x5 bit) { if (Out.Bits[InNum] == null) { In.Childrens.Remove(bit); Out.Childrens.Add(bit); Out.Bits[InNum] = bit; bit.ClearIndividualMatrix(); bit.Translate = Out.InputPosition(InNum) - Out.Translate + new Vector2(4, 2); Out.Start(); } }
public void CreateBuffer() { Body = new DigitalComponent(Shader) { PinsCount = 1, Delta = Delta, Position = new Vector2(X, Y) }; Body.CreateBuffer(); for (int i = 0; i < Word.Length; i++) { var letter = Word[i]; var glyph = new Glyph7x5(letter, new Vector2(X + Delta * (2 + i), Y + Delta * 0.4f), Shader); GlyphWord.Add(glyph); } MemoryGlyph = new Glyph7x5('0', new Vector2(X + Delta * 2.5f, Y + Delta * 2.0f), Shader); Visuals.Add(MemoryGlyph); Visuals.Add(Body); Visuals.AddRange(GlyphWord); }
public InseparableCode(bool[] gx, SimpleShader simpleShader) : base(simpleShader) { // if (gx.Length != 4) throw new Exception("Неправильный размер массива"); int gCount = gx.Length; streamingSource = new StreamingSource(new[] { 0, 1, 1, 0 }, simpleShader) { Translate = new Vector2(Delta * 1, Delta * 11) }; #region Register int regCount = gx.Length - 1; Registers = new StreamingRegister[regCount]; for (int i = 0; i < regCount; i++) { Registers[i] = new StreamingRegister(simpleShader) { Translate = new Vector2(Delta * 8 + i * Delta * 8, Delta * 10) }; } #endregion #region Sumators int sumCount = gx.Count(x => x) - 1; Splitters = new StreamingSplitter[sumCount]; Splitters[0] = new StreamingSplitter(simpleShader) { Translate = new Vector2(Delta * 7, Delta * 11) }; Summators = new StreamingSummator[sumCount]; for (int i = 1, j = 0; i < gx.Length; i++) { if (!gx[i]) { continue; } Summators[j] = new StreamingSummator(simpleShader, 2) { Up = true, Translate = new Vector2(Delta * 5 + i * Delta * 8, Delta * 3) }; j++; if (j >= sumCount) { continue; } Splitters[j] = new StreamingSplitter(simpleShader) { Translate = new Vector2(Delta * 7 + i * Delta * 8, Delta * 11) }; ConnectWire(Splitters[j], 0, Summators[j - 1], 1); } for (int i = 0; i < sumCount - 1; i++) { ConnectWire(Summators[i], 0, Summators[i + 1], 0); } for (int i = 1, j = 0; i < gx.Length - 1; i++) { if (!gx[i]) { ConnectWire(Registers[i - 1], 0, Registers[i], 0); } else { j++; ConnectWire(Registers[i - 1], 0, Splitters[j], 0); ConnectWire(Splitters[j], 1, Registers[i], 0); } } #endregion streamingReceiver = new StreamingReceiver(simpleShader) { Translate = new Vector2(Delta * 2 + Delta * gx.Length * 8, Delta * 5) }; ConnectWire(streamingSource, 0, Splitters[0], 0); ConnectWire(Splitters[0], 0, Summators[0], 0, new[] { new Vector2(Delta * 7, Delta * 5) }); ConnectWire(Splitters[0], 1, Registers[0], 0); ConnectWire(Registers.Last(), 0, Summators.Last(), 1, new[] { new Vector2(Delta * gx.Length * 8 - Delta * 1, Delta * 11) }); ConnectWire(Summators.Last(), 0, streamingReceiver, 0); foreach (var reg in Registers) { Childrens.Add(reg); } foreach (var spl in Splitters) { Childrens.Add(spl); } foreach (var summ in Summators) { Childrens.Add(summ); } Childrens.Add(streamingSource); Childrens.Add(streamingReceiver); ButtonTickZero = new Button(Delta, simpleShader) { Translate = new Vector2(Delta * 4, Delta * 10) }; Childrens.Add(ButtonTickZero); TestBit = new Glyph7x5('0', new Vector2(Delta * 3, Delta * 3), simpleShader); Childrens.Add(TestBit); ButtonTickZero.Click += (s, e) => { TestBit.Char = TestBit.Char == '0' ? '=' : '0'; }; ButtonTickOne = new Button(Delta, simpleShader) { Translate = new Vector2(Delta * 2, Delta * 10) }; Childrens.Add(ButtonTickOne); ButtonTickOne.Click += (s, e) => { streamingSource.Start(); }; }