Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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();
        }
Ejemplo n.º 7
0
        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);
        }