public ComplexMoleculeAssembler(ProgramWriter writer, IEnumerable <Molecule> products) : base(writer) { m_products = products; m_assembleCoroutine = new LoopingCoroutine <object>(Assemble); m_area = new AssemblyArea(this, writer, products); m_outputArea = new OutputArea(m_area, writer, products); }
public QuintessenceGenerator(ProgramWriter writer) : base(writer) { m_consumeCoroutine = new LoopingCoroutine <object>(ConsumeCardinals); new Glyph(this, new Vector2(1, -1), Direction.E, GlyphType.Unification); m_leftArm = new Arm(this, new Vector2(0, -1), Direction.NE, MechanismType.Arm1); m_rightArm = new Arm(this, new Vector2(2, 0), Direction.W, MechanismType.Piston, extension: 2); OutputArm = new Arm(this, new Vector2(4, -1), Direction.W, MechanismType.Arm1, extension: 3); }
public MetalPurifier(ProgramWriter writer, int size) : base(writer) { m_size = size; if (size < 1) { throw new ArgumentOutOfRangeException("size", size, "Size must be 1 or greater."); } m_consumeCoroutine = new LoopingCoroutine <object>(ConsumeMetal); CreateObjects(); }
public QuintessenceDisperser(ProgramWriter writer) : base(writer) { m_generateCoroutine = new LoopingCoroutine <Element>(GenerateCardinals); m_inputArm = new Arm(this, new Vector2(2, -2), Direction.NW, MechanismType.Arm1, extension: 2); new Glyph(this, new Vector2(3, 0), Direction.E, GlyphType.Dispersion); m_disperseArm = new Arm(this, new Vector2(2, 1), Direction.SW, MechanismType.Arm1); m_airFireArm = new Arm(this, new Vector2(4, -2), Direction.NW, MechanismType.Piston, extension: 2); m_waterArm = new Arm(this, new Vector2(4, 1), Direction.SW, MechanismType.Piston, extension: 2); OutputArm = new Arm(this, new Vector2(6, -2), Direction.NW, MechanismType.Arm1, extension: 2); }
public MorsVitaeGenerator(ProgramWriter writer) : base(writer) { m_consumeCoroutine = new LoopingCoroutine <object>(ConsumeSalt); m_generateCoroutine = new LoopingCoroutine <Element>(GenerateMorsVitae); m_inputArm = new Arm(this, new Vector2(2, -2), Direction.NW, MechanismType.Arm1, extension: 2); m_saltArm = new Arm(this, new Vector2(1, -1), Direction.NW, MechanismType.Arm1); new Glyph(this, new Vector2(1, 0), Direction.E, GlyphType.Animismus); m_vitaeArm = new Arm(this, new Vector2(2, 1), Direction.W, MechanismType.Arm1); m_morsArm = new Arm(this, new Vector2(3, -1), Direction.W, MechanismType.Arm1); OutputArm = new Arm(this, new Vector2(4, -2), Direction.NW, MechanismType.Arm1, extension: 2); }
public MultiAtomInput(SolverComponent parent, ProgramWriter writer, Vector2 position, Molecule molecule) : base(parent, writer, position, molecule) { m_extractAtomsCoroutine = new LoopingCoroutine <Element>(ExtractAtoms); // The atoms need to be moved at least 3 spaces to fully unbond them m_unbondWidth = Math.Max(3, Molecule.Width); var reagentPos = new Vector2(-Molecule.Width * 2 - m_unbondWidth - 2, -molecule.Height + 1); new Reagent(this, reagentPos.Add(molecule.Origin), molecule.Rotation, molecule.ID); var armPos = AddArms(reagentPos); AddTracks(armPos); AddGlyphs(); }
public LinearMoleculeInput(SolverComponent parent, ProgramWriter writer, Vector2 position, Molecule molecule) : base(parent, writer, position, molecule) { Molecule = molecule; if (molecule.Height != 1) { throw new ArgumentException(Invariant($"Molecule must have height 1. Specified height: {molecule.Height}."), "molecule"); } m_extractAtomsCoroutine = new LoopingCoroutine <Element>(ExtractAtoms); var reagentPos = new Vector2(-Molecule.Width - 2, 1); new Reagent(this, reagentPos.Add(molecule.Origin), molecule.Rotation, molecule.ID); m_grabArm = new Arm(this, reagentPos.Add(0, 1), Direction.SW, MechanismType.Piston); m_outputArm = new Arm(this, new Vector2(-3, 3), Direction.SW, MechanismType.Arm1, extension: 3); new Track(this, m_grabArm.Position, Direction.E, Molecule.Width - 1); new Glyph(this, new Vector2(-4, 0), Direction.E, GlyphType.Unbonding); }