// Start is called before the first frame update
    void Start()
    {
        model_system = GetComponent<Parametric_L_System>();
        turtle = GetComponent<Parametric_Turtle>();

        LineModule ln = new LineModule('F', 0, 1, GrowthList.LINEAR);
        ln.LineWidth = 0.1f;
        ln.LineLength = 0.5f;
        List<SystemModule> lm = new List<SystemModule>();
        lm.Add(ln);
        lm.Add(new SystemModule('[', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm.Add(new RotationModule('+', 0, 1, GrowthList.LINEAR, new Vector3(0, 0, 1), 45f));
        lm.Add(ln.CopyModule());
        lm.Add(new SystemModule(']', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm.Add(new SystemModule('2', 0, 1, GrowthList.NON_DEVELOPMENTAL));

        List<SystemModule> lm2 = new List<SystemModule>();
        lm2.Add(ln.CopyModule());
        lm2.Add(new SystemModule('[', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm2.Add(new RotationModule('+', 0, 1, GrowthList.LINEAR, new Vector3(0, 0, 1), -45f));
        lm2.Add(ln.CopyModule());
        lm2.Add(new SystemModule(']', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm2.Add(new SystemModule('1', 0, 1, GrowthList.NON_DEVELOPMENTAL));

        model_system.Productions.Add('1', lm);
        model_system.Productions.Add('2', lm2);
    }
Пример #2
0
    // Update is called once per frame
    void Update()
    {
        if (player_triggered)
        {
            float phyto_velocity = 1.01f - (phyto.Motor.Velocity.y / peak_time);
            float jump_age       = Mathf.Lerp(0, 1f, phyto_velocity);
            foreach (SystemModule m in ProximalModules)
            {
                if (m is RotationModule)
                {
                    RotationModule rm = m as RotationModule;
                    rm.RotationAxis   = Vector3.Cross(phyto.transform.position - this.transform.position, Vector3.up).normalized;
                    rm.RotationScalar = -Vector3.Angle(phyto.transform.position - this.transform.position, Vector3.up);
                }
                else if (m is LineModule)
                {
                    LineModule lm = m as LineModule;
                    lm.LineLength = Vector3.Distance(phyto.transform.position, this.transform.position);
                }

                if (m.Age < m.TerminalAge)
                {
                    m.Age = jump_age;
                }
            }
            MainAxis.Age = jump_age;

            Turtle.TurtleAnalysis(0f);
            if (phyto_velocity >= 1)
            {
                player_triggered = false;
                phyto.DoubleJump.RemoveListener(DerivePlatform);
            }
        }
    }
Пример #3
0
 public void SetUI(LineModule lm)
 {
     currentModule             = lm;
     jointToggle.isOn          = lm.jointed;
     widthSlider.Slider.value  = lm.LineWidth;
     lengthSlider.Slider.value = lm.LineLength;
     colorPicker.CurrentColor  = lm.DrawColor;
 }
Пример #4
0
 public void Init(LineModule lm)
 {
     currentModule = lm;
     ToggleJointed();
     SetColor();
     SetInitialWidth();
     SetInitialLength();
 }
Пример #5
0
    // Start is called before the first frame update
    void Start()
    {
        LineModule stem_module = new LineModule('F', 0, 1, GrowthList.LINEAR);

        stem_module.LineWidth  = 0.5f;
        stem_module.LineLength = 5.0f;
        //MeshModule stem_module = new MeshModule('M', 0, 1, GrowthList.LINEAR);
        //stem_module.x = 0.1f;
        //stem_module.y = 1f;
        //stem_module.z = 0.1f;

        RotationModule rotation_module     = new RotationModule('+', 0, 1, GrowthList.NON_DEVELOPMENTAL, new Vector3(0, 0, 1), 0f, true);
        SystemModule   branch_open_module  = new BranchModule('[', 0, 1, GrowthList.NON_DEVELOPMENTAL, true);
        SystemModule   branch_close_module = new BranchModule(']', 0, 1, GrowthList.NON_DEVELOPMENTAL, false);

        ObjectModule leaf_module = new ObjectModule('O', 0, 1, GrowthList.LOGISTIC, "Prefabs/ModuleObjects/ManilkaraLeaf");

        leaf_module.scale = Vector3.one * 2.5f;

        List <SystemModule> main_axis = new List <SystemModule>();

        //main_axis.Add(branch_open_module);
        main_axis.Add(rotation_module);
        main_axis.Add(stem_module);
        main_axis.Add(new ApexModule('2', 0, 1, GrowthList.LINEAR, "Prefabs/ModuleObjects/PlatformApex"));
        //main_axis.Add(branch_close_module);
        main_axis.Add(new ApexModule('1', 0, 1, GrowthList.LINEAR, "Prefabs/ModuleObjects/Apex"));
        system.Productions.Add('1', main_axis);

        List <SystemModule> platform_axis = new List <SystemModule>();

        platform_axis.Add(branch_open_module);
        platform_axis.Add(rotation_module);
        platform_axis.Add(stem_module);
        platform_axis.Add(new PhysicsMoverModule('3', 0, 1, GrowthList.LINEAR, "Prefabs/ModuleObjects/LeafWhorlMover"));
        platform_axis.Add(branch_close_module);
        system.Productions.Add('2', platform_axis);

        List <SystemModule> leaf_whorl = new List <SystemModule>();

        leaf_whorl.Add(branch_open_module);
        for (int i = 0; i < 4; i++)
        {
            leaf_whorl.Add(branch_open_module.CopyModule());
            leaf_whorl.Add(new RotationModule('+', 0, 1, GrowthList.LINEAR, Vector3.right, -45f, false));
            leaf_whorl.Add(leaf_module.CopyModule());
            leaf_whorl.Add(branch_close_module.CopyModule());
            leaf_whorl.Add(new RotationModule('+', 0, 1, GrowthList.NON_DEVELOPMENTAL, Vector3.up, 90f, false));
        }
        leaf_whorl.Add(branch_close_module);
        system.Productions.Add('3', leaf_whorl);

        ApexModule axiom_apex = system.Axiom as ApexModule;

        turtle.TurtleAnalysis(0f);
        axiom_apex.Apex.ActivateApex();
    }
Пример #6
0
        private void LineListView_SelectedIndexChanged(object sender, EventArgs e)
        {
            LineSelectedIndex  = LineListView.FocusedItem.Index;
            module             = _lineModule[LineSelectedIndex];
            LineStartPxTB.Text = module._centerP.X + "";
            LineStartPyTB.Text = module._centerP.Y + "";
            LineEndPxTB.Text   = module._endP.X + "";
            LineEndPyTB.Text   = module._endP.Y + "";

            LineSiteListViewRefresh();
            LineSelectedLab.Text = LineSelectedIndex + "";
        }
Пример #7
0
        /// <summary>
        /// 曲線圖初始
        /// </summary>
        /// <returns></returns>
        public List <LineModule> Create_Line()
        {
            List <LineModule> line = new List <LineModule>();

            for (int i = 0; i < 1440; i++)
            {
                if ((i / 60).ToString().Length > 1)
                {
                    if ((i % 60).ToString().Length > 1)
                    {
                        LineModule lineModule = new LineModule()
                        {
                            Argument = Convert.ToDateTime($"{DateTime.Now:yyyy-MM-dd} {i / 60}:{i % 60}:00"),
                            Value    = rnd.Next(200, 400)
                        };
                        line.Add(lineModule);
                    }
                    else
                    {
                        LineModule lineModule = new LineModule()
                        {
                            Argument = Convert.ToDateTime($"{DateTime.Now:yyyy-MM-dd} {i / 60}:0{i % 60}:00"),
                            Value    = rnd.Next(200, 400)
                        };
                        line.Add(lineModule);
                    }
                }
                else
                {
                    if ((i % 60).ToString().Length > 1)
                    {
                        LineModule lineModule = new LineModule()
                        {
                            Argument = Convert.ToDateTime($"{DateTime.Now:yyyy-MM-dd} 0{i / 60}:{i % 60}:00"),
                            Value    = rnd.Next(200, 400)
                        };
                        line.Add(lineModule);
                    }
                    else
                    {
                        LineModule lineModule = new LineModule()
                        {
                            Argument = Convert.ToDateTime($"{DateTime.Now:yyyy-MM-dd} 0{i / 60}:0{i % 60}:00"),
                            Value    = rnd.Next(200, 400)
                        };
                        line.Add(lineModule);
                    }
                }
            }
            return(line);
        }
Пример #8
0
    public override SystemModule CopyModule()
    {
        LineModule lm = LineModule.CreateInstance <LineModule>();

        lm.Symbol      = Symbol;
        lm.Age         = Age;
        lm.TerminalAge = TerminalAge;
        lm.Growth      = Growth;

        lm.DrawColor  = DrawColor;
        lm.LineWidth  = LineWidth;
        lm.LineLength = LineLength;
        lm.jointed    = jointed;
        return(lm);
    }
Пример #9
0
        private void LineDownBtn_Click(object sender, EventArgs e)
        {
            if (LineSelectedIndex == -1)
            {
                MessageBox.Show("请选择线路!");
                return;
            }
            if (LineSelectedIndex == _lineModule.Count - 1)
            {
                return;
            }
            LineModule line = _lineModule[LineSelectedIndex + 1];

            _lineModule[LineSelectedIndex + 1] = _lineModule[LineSelectedIndex];
            _lineModule[LineSelectedIndex]     = line;
            LineListViewRefresh();
        }
Пример #10
0
        private void SearchsimpleButton_Click(object sender, EventArgs e)
        {
            if (gridView1.Columns.Count > 0)
            {
                gridView1.Columns.Clear();
            }
            if (chartControl.Series.Count > 0)
            {
                chartControl.Series.Clear();
            }

            ReportSearchEnumType = (ReportSearchEnumType)SearchTypecomboBoxEdit.SelectedIndex;
            switch (ReportSearchEnumType)
            {
            case ReportSearchEnumType.kW:
            {
                if (Form1.ConnectionFlag)
                {
                    if (ElectricConfigs.Count > 0)
                    {
                        var ElectricConfig = ElectricConfigs.Where(g => g.DeviceName == SearchDevicecomboBoxEdit.Text).Single();
                        var data           = SqlMethod.Search_ThreePhaseElectricMeter_Log(Convert.ToDateTime(StartdateEdit.EditValue).ToString("yyyyMMdd"), Convert.ToDateTime(EnddateEdit.EditValue).ToString("yyyyMMdd"), ElectricConfig.GatewayIndex, ElectricConfig.DeviceIndex);
                        if (data != null)
                        {
                            gridControl.DataSource  = data;
                            chartControl.DataSource = data;
                            #region 報表
                            for (int i = 0; i < gridView1.Columns.Count; i++)
                            {
                                if (gridView1.Columns[i].FieldName == "ttimen")
                                {
                                    gridView1.Columns[i].Caption = "時間";
                                    gridView1.Columns[i].DisplayFormat.FormatString = "yyyy/MM/dd HH:mm";
                                    gridView1.Columns[i].BestFit();
                                }
                                else if (gridView1.Columns[i].FieldName == "kw")
                                {
                                    gridView1.Columns[i].Caption = "即時用電";
                                    gridView1.Columns[i].BestFit();
                                }
                                else
                                {
                                    gridView1.Columns[i].Visible = false;
                                }
                            }
                            #endregion
                            #region 圖表
                            Series series = new Series($"{SearchDevicecomboBoxEdit.Text}", ViewType.Line);
                            series.ArgumentDataMember = "ttimen";
                            series.ValueDataMembers.AddRange(new string[] { "kw" });
                            series.CrosshairLabelPattern = "{S} \r時間 : {A:yyyy-MM-dd HH:mm}\r{V:0.##} kW";
                            series.LabelsVisibility      = DevExpress.Utils.DefaultBoolean.False;
                            chartControl.Series.Add(series);
                            if (chartControl.DataSource != null && chartControl.Series.Count > 0)
                            {
                                XYDiagram diagram = (XYDiagram)chartControl.Diagram;
                                if (diagram != null)
                                {
                                    diagram.EnableAxisXZooming   = true;                                             //放大縮小
                                    diagram.EnableAxisXScrolling = true;                                             //拖曳
                                    diagram.AxisX.DateTimeScaleOptions.MeasureUnit   = DateTimeMeasureUnit.Minute;   // 顯示設定
                                    diagram.AxisX.DateTimeScaleOptions.GridAlignment = DateTimeGridAlignment.Minute; // 刻度設定
                                    diagram.AxisX.Label.Angle                 = 90;
                                    diagram.AxisX.Label.TextPattern           = "{A:yyyy-MM-dd HH:mm}";              //X軸顯示
                                    diagram.AxisX.WholeRange.SideMarginsValue = 0;                                   //不需要邊寬
                                }
                                chartControl.CrosshairOptions.ShowArgumentLabels = false;                            //是否顯示Y軸垂直線
                                chartControl.CrosshairOptions.ShowArgumentLine   = false;                            //是否顯示Y軸垂直線
                                                                                                                     //chartControl.CrosshairOptions.ShowCrosshairLabels = false;//是否顯示Y軸垂直線
                            }
                            #endregion
                        }
                    }
                }
                else
                {
                    TimeSpan          timeSpan = Convert.ToDateTime(EnddateEdit.EditValue).Subtract(Convert.ToDateTime(StartdateEdit.EditValue));
                    List <LineModule> Data     = new List <LineModule>();
                    for (int day = 0; day < timeSpan.TotalDays + 1; day++)
                    {
                        var data = Create_Line(Convert.ToDateTime(StartdateEdit.EditValue).AddDays(day));
                        Data.AddRange(data);
                    }
                    gridControl.DataSource  = Data;
                    chartControl.DataSource = Data;
                    #region 報表
                    for (int i = 0; i < gridView1.Columns.Count; i++)
                    {
                        if (gridView1.Columns[i].FieldName == "Argument")
                        {
                            gridView1.Columns[i].Caption = "時間";
                            gridView1.Columns[i].DisplayFormat.FormatString = "yyyy/MM/dd HH:mm";
                            gridView1.Columns[i].BestFit();
                        }
                        else if (gridView1.Columns[i].FieldName == "Value")
                        {
                            gridView1.Columns[i].Caption = "即時用電";
                            gridView1.Columns[i].BestFit();
                        }
                        else
                        {
                            gridView1.Columns[i].Visible = false;
                        }
                    }
                    #endregion
                    #region 圖表
                    Series series = new Series($"{SearchDevicecomboBoxEdit.Text}", ViewType.Line);
                    series.ArgumentDataMember = "Argument";
                    series.ValueDataMembers.AddRange(new string[] { "Value" });
                    series.CrosshairLabelPattern = "{S} \r時間 : {A:yyyy-MM-dd HH:mm}\r{V:0.##} kW";
                    series.LabelsVisibility      = DevExpress.Utils.DefaultBoolean.False;
                    chartControl.Series.Add(series);
                    if (chartControl.DataSource != null && chartControl.Series.Count > 0)
                    {
                        XYDiagram diagram = (XYDiagram)chartControl.Diagram;
                        if (diagram != null)
                        {
                            diagram.EnableAxisXZooming   = true;                                             //放大縮小
                            diagram.EnableAxisXScrolling = true;                                             //拖曳
                            diagram.AxisX.DateTimeScaleOptions.MeasureUnit   = DateTimeMeasureUnit.Minute;   // 顯示設定
                            diagram.AxisX.DateTimeScaleOptions.GridAlignment = DateTimeGridAlignment.Minute; // 刻度設定
                            diagram.AxisX.Label.Angle                 = 90;
                            diagram.AxisX.Label.TextPattern           = "{A:yyyy-MM-dd HH:mm}";              //X軸顯示
                            diagram.AxisX.WholeRange.SideMarginsValue = 0;                                   //不需要邊寬
                        }
                        chartControl.CrosshairOptions.ShowArgumentLabels = false;                            //是否顯示Y軸垂直線
                        chartControl.CrosshairOptions.ShowArgumentLine   = false;                            //是否顯示Y軸垂直線
                                                                                                             //chartControl.CrosshairOptions.ShowCrosshairLabels = false;//是否顯示Y軸垂直線
                    }
                    #endregion
                }
            }
            break;

            case ReportSearchEnumType.kWh:
            {
                if (Form1.ConnectionFlag)
                {
                    if (ElectricConfigs.Count > 0)
                    {
                        var ElectricConfig = ElectricConfigs.Where(g => g.DeviceName == SearchDevicecomboBoxEdit.Text).Single();
                        var data           = SqlMethod.Search_ElectricTotalPrice(Convert.ToDateTime(StartdateEdit.EditValue).ToString("yyyyMMdd"), Convert.ToDateTime(EnddateEdit.EditValue).ToString("yyyyMMdd"), ElectricConfig.GatewayIndex, ElectricConfig.DeviceIndex);
                        if (data != null)
                        {
                            gridControl.DataSource  = data;
                            chartControl.DataSource = data;
                            #region 報表
                            for (int i = 0; i < gridView1.Columns.Count; i++)
                            {
                                if (gridView1.Columns[i].FieldName == "ttimen")
                                {
                                    gridView1.Columns[i].Caption = "時間";
                                    gridView1.Columns[i].DisplayFormat.FormatString = "yyyy/MM/dd";
                                    gridView1.Columns[i].BestFit();
                                }
                                else if (gridView1.Columns[i].FieldName == "KwhTotal")
                                {
                                    gridView1.Columns[i].Caption = "累積用電";
                                    gridView1.Columns[i].BestFit();
                                }
                                else
                                {
                                    gridView1.Columns[i].Visible = false;
                                }
                            }
                            #endregion
                            #region 圖表
                            Series series = new Series($"{SearchDevicecomboBoxEdit.Text}", ViewType.Bar);
                            series.ArgumentDataMember = "ttimen";
                            series.ValueDataMembers.AddRange(new string[] { "KwhTotal" });
                            series.CrosshairLabelPattern = "{S} \r時間 : {A:yyyy-MM-dd HH:mm}\r{V:0.##} kWh";
                            series.LabelsVisibility      = DevExpress.Utils.DefaultBoolean.False;
                            chartControl.Series.Add(series);
                            if (chartControl.DataSource != null && chartControl.Series.Count > 0)
                            {
                                XYDiagram diagram = (XYDiagram)chartControl.Diagram;
                                if (diagram != null)
                                {
                                    diagram.AxisX.DateTimeScaleOptions.MeasureUnit   = DateTimeMeasureUnit.Day;   // 顯示設定
                                    diagram.AxisX.DateTimeScaleOptions.GridAlignment = DateTimeGridAlignment.Day; // 刻度設定
                                    diagram.AxisX.Label.Angle                 = 90;
                                    diagram.AxisX.Label.TextPattern           = "{A:yyyy-MM-dd}";                 //X軸顯示
                                    diagram.AxisX.WholeRange.SideMarginsValue = 0;                                //不需要邊寬
                                }
                                chartControl.CrosshairOptions.ShowArgumentLabels = false;                         //是否顯示Y軸垂直線
                                chartControl.CrosshairOptions.ShowArgumentLine   = false;                         //是否顯示Y軸垂直線
                                                                                                                  //chartControl.CrosshairOptions.ShowCrosshairLabels = false;//是否顯示Y軸垂直線
                            }
                            #endregion
                        }
                    }
                }
                else
                {
                    TimeSpan          timeSpan = Convert.ToDateTime(EnddateEdit.EditValue).Subtract(Convert.ToDateTime(StartdateEdit.EditValue));
                    List <LineModule> Data     = new List <LineModule>();
                    for (int day = 0; day < timeSpan.TotalDays + 1; day++)
                    {
                        var data = new LineModule()
                        {
                            Argument = Convert.ToDateTime($"{Convert.ToDateTime(StartdateEdit.EditValue).AddDays(day):yyyy-MM-dd} 00:00:00"),
                            Value    = rnd.Next(200, 400)
                        };;
                        Data.Add(data);
                    }
                    gridControl.DataSource  = Data;
                    chartControl.DataSource = Data;
                    #region 報表
                    for (int i = 0; i < gridView1.Columns.Count; i++)
                    {
                        if (gridView1.Columns[i].FieldName == "Argument")
                        {
                            gridView1.Columns[i].Caption = "時間";
                            gridView1.Columns[i].DisplayFormat.FormatString = "yyyy/MM/dd";
                            gridView1.Columns[i].BestFit();
                        }
                        else if (gridView1.Columns[i].FieldName == "Value")
                        {
                            gridView1.Columns[i].Caption = "累積用電";
                            gridView1.Columns[i].BestFit();
                        }
                        else
                        {
                            gridView1.Columns[i].Visible = false;
                        }
                    }
                    #endregion
                    #region 圖表
                    Series series = new Series($"{SearchDevicecomboBoxEdit.Text}", ViewType.Bar);
                    series.ArgumentDataMember = "Argument";
                    series.ValueDataMembers.AddRange(new string[] { "Value" });
                    series.CrosshairLabelPattern = "{S} \r時間 : {A:yyyy-MM-dd HH:mm}\r{V:0.##} kWh";
                    series.LabelsVisibility      = DevExpress.Utils.DefaultBoolean.False;
                    chartControl.Series.Add(series);
                    if (chartControl.DataSource != null && chartControl.Series.Count > 0)
                    {
                        XYDiagram diagram = (XYDiagram)chartControl.Diagram;
                        if (diagram != null)
                        {
                            diagram.AxisX.DateTimeScaleOptions.MeasureUnit   = DateTimeMeasureUnit.Day;   // 顯示設定
                            diagram.AxisX.DateTimeScaleOptions.GridAlignment = DateTimeGridAlignment.Day; // 刻度設定
                            diagram.AxisX.Label.Angle                 = 90;
                            diagram.AxisX.Label.TextPattern           = "{A:yyyy-MM-dd}";                 //X軸顯示
                            diagram.AxisX.WholeRange.SideMarginsValue = 0;                                //不需要邊寬
                        }
                        chartControl.CrosshairOptions.ShowArgumentLabels = false;                         //是否顯示Y軸垂直線
                        chartControl.CrosshairOptions.ShowArgumentLine   = false;                         //是否顯示Y軸垂直線
                                                                                                          //chartControl.CrosshairOptions.ShowCrosshairLabels = false;//是否顯示Y軸垂直線
                    }
                    #endregion
                }
            }
            break;
            }
        }
    public void BuildDefaultSystem()
    {
        ObjectModule om = new ObjectModule('O', 0, 1, GrowthList.LINEAR, ObjectBuilder.OBJECT_PATH + ObjectList.SIMPLE_LEAF);

        om.scale    = Vector3.one * 0.1f;
        om.rotation = new Vector3(90, 0, 0);

        ObjectModule om_right = new ObjectModule('O', 0, 1, GrowthList.LINEAR, ObjectBuilder.OBJECT_PATH + ObjectList.SIMPLE_LEAF);

        om_right.scale    = Vector3.one * 0.1f;
        om_right.rotation = new Vector3(90, 180, 0);
        om_right.jointed  = true;

        JointModule jm = new JointModule('{', 0, 1, GrowthList.LINEAR, JointBuilder.JOINT_PATH + JointModule.HINGE_JOINT);

        jm.jointSpringSpring = 10f;
        jm.jointSpringDamper = 99f;

        jm.jointLimitMin = -10;
        jm.jointLimitMax = 10;

        ObjectModule om_right_z = new ObjectModule('O', 0, 1, GrowthList.LOGISTIC, ObjectBuilder.OBJECT_PATH + ObjectList.SIMPLE_LEAF);

        om_right_z.scale    = Vector3.one * 0.1f;
        om_right_z.rotation = new Vector3(90, 90, 0);

        JointModule jmc = new JointModule('{', 0, 1, GrowthList.LINEAR, JointBuilder.JOINT_PATH + JointModule.CHARACTER_JOINT);

        jmc.mass = 1;

        jmc.jointSpringSpring = 10f;
        jmc.jointSpringDamper = 99f;

        jmc.jointLimitMin = -10;
        jmc.jointLimitMax = 10;

        jmc.twistLimit1 = -10;
        jmc.twistLimit2 = 10;

        jmc.twistSpringSpring = 10f;
        jmc.twistSpringDamper = 99f;

        LineModule ln = new LineModule('F', 0, 1, GrowthList.EXPONENTIAL);

        ln.LineWidth  = 0.1f;
        ln.LineLength = 0.1f;
        ln.jointed    = true;

        ObjectModule om_z = new ObjectModule('O', 0, 1, GrowthList.LINEAR, ObjectBuilder.OBJECT_PATH + ObjectList.SIMPLE_LEAF);

        om_z.scale    = Vector3.one * 0.1f;
        om_z.rotation = new Vector3(90, -90, 0);

        List <SystemModule> lm = new List <SystemModule>();

        lm.Add(jmc.CopyModule());
        lm.Add(ln.CopyModule());
        lm.Add(new SystemModule('[', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm.Add(jm.CopyModule());
        lm.Add(new RotationModule('+', 0, 1, GrowthList.LINEAR, new Vector3(1, 0, 0), 45f));
        lm.Add(om_right.CopyModule());
        lm.Add(new SystemModule('}', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm.Add(new SystemModule(']', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm.Add(new SystemModule('1', 0, 1, GrowthList.NON_DEVELOPMENTAL));
        lm.Add(new SystemModule('}', 0, 1, GrowthList.NON_DEVELOPMENTAL));

        Productions.Add('1', lm);
    }