protected override void Run(string[] args) { var waiter = new AutoResetEvent(false); int data = 0; var clay1 = new Starter(); var f1 = new SignalFilter(new FilterAgr { Weight = 2 }); var f2 = new SignalFilter(new FilterAgr { Weight = 3 }); var f3 = new SignalFilter(new FilterAgr { Weight = 4 }); var clayx = new RClay(new RAgreement { SensorPoints = new List <object> { "A", "B", "C" }, Response = (center, clay, cp) => { var A = center.GetSignal <int>("A"); var B = center.GetSignal <int>("B"); var C = center.GetSignal <int>("C"); data = A + B + C; waiter.Set(); } }); Conduit.CreateLink( new LinkDef(clay1, "OUT"), new LinkDef(f1, "IN"), new LinkDef(f2, "IN"), new LinkDef(f3, "IN") ); Conduit.CreateLink(new LinkDef[] { new LinkDef(f1, "OUT"), new LinkDef(clayx, "A") }); Conduit.CreateLink(new LinkDef[] { new LinkDef(f2, "OUT"), new LinkDef(clayx, "B") }); Conduit.CreateLink(new LinkDef[] { new LinkDef(f3, "OUT"), new LinkDef(clayx, "C") }); clay1.Test(5); waiter.WaitOne(); Assert(data == 45, "Supposed to be 45"); }
public static Blueprint Generate(DemuxConfiguration configuration) { var signalCount = configuration.SignalCount ?? ComputerSignals.OrderedSignals.Count; var width = configuration.Width ?? 1; var addressSignal = configuration.AddressSignal ?? VirtualSignalNames.Dot; var outputSignal = configuration.OutputSignal ?? VirtualSignalNames.LetterOrDigit('A'); var entities = new List <Entity>(); var signalFilters = new SignalFilter[signalCount]; for (int index = 0; index < signalCount; index++) { var filterX = index % width * 4; var filterY = index / width; var addressChecker = new Entity { Name = ItemNames.DeciderCombinator, Position = new Position { X = 0.5 + filterX, Y = filterY }, Direction = Direction.Right, Control_behavior = new ControlBehavior { Decider_conditions = new DeciderConditions { First_signal = SignalID.Create(addressSignal), Constant = index + 1, Comparator = Comparators.IsEqual, Output_signal = SignalID.Create(VirtualSignalNames.Dot), Copy_count_from_input = false } } }; entities.Add(addressChecker); var signalRenamer = new Entity { Name = ItemNames.ArithmeticCombinator, Position = new Position { X = 2.5 + filterX, Y = filterY }, Direction = Direction.Right, Control_behavior = new ControlBehavior { Arithmetic_conditions = new ArithmeticConditions { First_signal = SignalID.Create(ComputerSignals.OrderedSignals[index]), Second_signal = SignalID.Create(VirtualSignalNames.Dot), Operation = ArithmeticOperations.Multiplication, Output_signal = SignalID.Create(outputSignal) } } }; entities.Add(signalRenamer); signalFilters[index] = new SignalFilter { AddressChecker = addressChecker, SignalRenamer = signalRenamer }; } BlueprintUtil.PopulateEntityNumbers(entities); for (var index = 0; index < signalCount; index++) { var signalFilter = signalFilters[index]; AddConnection(CircuitColor.Red, signalFilter.AddressChecker, CircuitId.Output, signalFilter.SignalRenamer, CircuitId.Input); if (index > 0) { var adjacentSignalFilterIndex = index / width == 0 ? index - 1 : index - width; var adjacentSignalFilter = signalFilters[adjacentSignalFilterIndex]; AddConnection(CircuitColor.Red, signalFilter.AddressChecker, CircuitId.Input, adjacentSignalFilter.AddressChecker, CircuitId.Input); AddConnection(CircuitColor.Green, signalFilter.SignalRenamer, CircuitId.Input, adjacentSignalFilter.SignalRenamer, CircuitId.Input); AddConnection(CircuitColor.Red, signalFilter.SignalRenamer, CircuitId.Output, adjacentSignalFilter.SignalRenamer, CircuitId.Output); } } return(new Blueprint { Label = $"Demultiplexer", Icons = new List <Icon> { Icon.Create(ItemNames.DeciderCombinator), Icon.Create(ItemNames.ArithmeticCombinator) }, Entities = entities, Item = ItemNames.Blueprint, Version = BlueprintVersions.CurrentVersion }); }