Example #1
0
        private void button5_Click(object sender, EventArgs e)
        {
            String ex = "";

            if (name.Text == "" && surname.Text == "" && secname.Text == "")
            {
                ex = "У кролика нет имени!\n";
            }
            //if (rab.address == OneRabbit.NullAddress) ex += "У кролика нет места жительства!\n";
            if (gens.Items.Count == 0)
            {
                int level         = 0;
                int rab_gen_depth = Engine.opt().getIntOption(Options.OPT_ID.RAB_GEN_DEPTH);
                RabbitGen.GetFullGenLevels(_rab.RabGenoms, ref level);
                //if (rab_gen_depth > level) {
                //    ex += "У кролика нет ни одного Номера Гена!\n";
                //}
            }
            if (ex != "")
            {
                _can_commit = false;
                MessageBox.Show(this, ex, "Невозможно продолжить", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                _can_commit = true;
                applyData();
                updateData();
            }
        }
Example #2
0
        /// <summary>
        /// Если 7 поколений рожденных прошло через программу, то номера генов отметаются.
        /// </summary>
        /// <returns>Генезис ID</returns>
        private static int bornRabbitGenesis(MySqlConnection sql, OneRabbit fml, OneRabbit ml)
        {
            int fLevel = 0, mLevel = 0;

            fml.RabGenoms = RabbitGenGetter.GetRabGenoms(sql, fml.ID);
            RabbitGen.GetFullGenLevels(fml.RabGenoms, ref fLevel);

            if (ml != null)
            {
                ml.RabGenoms = RabbitGenGetter.GetRabGenoms(sql, ml.ID);
                RabbitGen.GetFullGenLevels(ml.RabGenoms, ref mLevel);
            }

            MySqlCommand cmd = new MySqlCommand("SELECT o_value FROM options WHERE o_name='opt' AND o_subname='rab_gen_depth'", sql);
            object       o   = cmd.ExecuteScalar();

            if (o != null)
            {
                int rab_gen_depth = 0;
                if (int.TryParse(o.ToString(), out rab_gen_depth))
                {
                    if (Math.Min(fLevel, mLevel) >= rab_gen_depth)
                    {
                        return(0);
                    }
                }
            }

            return(RabbitGenGetter.MakeCommonGenesis(sql, fml.Genoms, (ml != null ? ml.Genoms : fml.Genoms), fml.Zone));
        }
Example #3
0
        public RabbitPair GetHalhPairData(RabbitGen rg, ref int pairsCount)
        {
            RabbitGen rabbM = Engine.db().getRabbitGen(rg.MotherId);
            RabbitGen rabbF = Engine.db().getRabbitGen(rg.FatherId);

            if ((rabbM != null) || (rabbF != null))
            {
                pairsCount++;

                RabbitPair rp = new RabbitPair();
                rp._id = pairsCount;
                _RabbitPairs.Add(pairsCount, rp);

                rp.SetParentControl(RabbitsHolder);

                rp.SetMom(rabbM);
                rp.SetDad(rabbF);

                log.Debug(string.Format("Getting parents for rabbit pair #{0:d} mom.", pairsCount));
                GetPairData(rp, ref pairsCount);

                return(rp);
            }
            else
            {
                log.Debug(string.Format("There's no parents :(", pairsCount));
                return(null);
            }
        }
Example #4
0
        public void DrawRabbit(RabbitGen rbt)
        {
            Dictionary <int, Color> b_colors = new Dictionary <int, Color>();

            b_colors = Engine.db().getBreedColors();
            ProgressPanel.Visible = true;
            RabbitsHolder.Visible = false;
            //_rootRabbitData = rbt;
            _rootRabbit = new RabbitBar();
            _rootRabbit.SetRabbit(rbt);
            _rootRabbit.ReplaceGenomeColors(b_colors);
            _rootRabbit.BackColor      = this.BackColor;
            _rootRabbit.WindowRabbitID = rbt.ID;
            RabbitsHolder.Controls.Add(_rootRabbit);
            ///рисуем мать и отца выделенного кролика
            RabbitPair parents = new RabbitPair();

            _rootRabbitPair = parents;
            _rootRabbitPair.WindowRabbitID = rbt.ID;
            _rootRabbitPair.SearchGoingOn += new EvSearchGoingOn(SearchProc);
            parents.Location = new Point(1000, 100);

            int cnt = 0;

            _RabbitPairs.Clear();
            _RabbitPairs.Add(cnt, parents);
            parents.ReplaceGenomeColors(b_colors);

            RabbitGen rabbF = Engine.db().getRabbitGen(rbt.FatherId);
            RabbitGen rabbM = Engine.db().getRabbitGen(rbt.MotherId);

            parents.SetMom(rabbM);
            parents.SetDad(rabbF);
            parents._id = cnt;
            RabbitsHolder.SuspendLayout();
            parents.SetParentControl(RabbitsHolder);
            GetPairData(parents, ref cnt);

            CenterTree();
            CenterHolder();
            ProgressPanel.Visible = false;
            RabbitsHolder.Visible = true;
            RabbitsHolder.ResumeLayout();

            this.ScrollControlIntoView(_rootRabbit);
            this.ActiveControl = _rootRabbit;
            //RabbitsHolder.AutoScrollMinSize
        }
Example #5
0
        public static void getRabbitRodK(MySqlConnection sql, ref RabbitGen rabbit)
        {
            if (rabbit.Sex == Rabbit.SexType.FEMALE)
            {
                MySqlCommand    cmd = new MySqlCommand(String.Format(@"SELECT 
    COALESCE((sum(f_children)-sum(f_killed)+sum(f_added))/(sum(f_children)+sum(f_added)),0) k
FROM f***s 
WHERE f_rabid={0:d};", rabbit.ID), sql);
                MySqlDataReader rd  = cmd.ExecuteReader();
                if (rd.Read())
                {
                    rabbit.RodK = rd.GetFloat("k");
                }
                rd.Close();
            }
            if (rabbit.Sex == Rabbit.SexType.MALE)
            {
                MySqlCommand cmd = new MySqlCommand(String.Format(@"SELECT	
                    (SELECT COUNT(f_state) FROM f***s WHERE f_partner={0:d} AND f_state='okrol' AND f_times=1) o,
					(SELECT COUNT(f_state) FROM f***s WHERE f_partner={0:d} AND f_state='proholost' AND f_times=1) p;"                    ,
                                                                  rabbit.ID), sql
                                                    );
                MySqlDataReader rd = cmd.ExecuteReader();
                if (rd.Read())
                {
                    float o = rd.GetFloat("o");
                    float p = rd.GetFloat("p");
                    if (p + 0 == 0)
                    {
                        rabbit.RodK = 0;
                    }
                    else
                    {
                        rabbit.RodK = o / (o + p);
                    }
                }
                rd.Close();
            }
        }
Example #6
0
        public static void getRabbitPriplodK(MySqlConnection sql, ref RabbitGen rabbit)
        {
            string f = "f_rabid";

            if (rabbit.Sex == Rabbit.SexType.MALE)
            {
                f = "f_partner";
            }


            MySqlCommand    cmd = new MySqlCommand(String.Format(@"	SELECT coalesce(sum(f_children)/(sum(f_times)-(	SELECT count(f_state) 
																													FROM f***s 
																													WHERE	{1}={0:d} 
																															AND f_state='sukrol')),0) k  
																	FROM f***s 
																	WHERE {1}={0:d};"                                                                    , rabbit.ID, f), sql);
            MySqlDataReader rd  = cmd.ExecuteReader();

            if (rd.Read())
            {
                rabbit.PriplodK = rd.GetFloat("k");
            }
            rd.Close();
        }
Example #7
0
        public static RabbitGen GetRabbitGen(MySqlConnection sql, int rid)
        {
            if (rid == 0)
            {
                return(null);
            }

            const string    QUERY  = @"SELECT	
        Coalesce(r_mother,0) AS r_mother,
        Coalesce(r_father,0) AS r_father,
		r_sex, 
		Coalesce(n1.n_name, 0) name, 
		Coalesce(n2.n_surname, 0) surname, 
		Coalesce(n2.n_surname, 0) secname,
		b.b_color,
		r_breed,
		b.b_name
FROM {0:s}
    INNER JOIN breeds b ON b.b_id = r_breed
    LEFT JOIN names n1 ON n1.n_id = r_name
    LEFT JOIN names n2 ON n2.n_id = r_surname
    LEFT JOIN names n3 ON n3.n_id = r_secname
WHERE r_id = {1:d}
LIMIT 1;";
            Boolean         IsDead = false;
            MySqlCommand    cmd    = new MySqlCommand(String.Format(QUERY, "rabbits", rid), sql);
            MySqlDataReader rd     = cmd.ExecuteReader();

            if (!rd.HasRows)
            {
                IsDead = true;
                rd.Close();
                rd.Dispose();
                cmd = new MySqlCommand(String.Format(QUERY, "dead", rid), sql);
                rd  = cmd.ExecuteReader();
            }

            RabbitGen r = new RabbitGen();

            r.ID = rid;

            if (rd.Read())
            {
                r.FatherId = rd.GetInt32("r_father"); //0
                r.MotherId = rd.GetInt32("r_mother"); //1
                //string sx = rd.GetString("r_sex"); //2
                //r.Sex = Rabbit.SexType.VOID;
                //if (sx == "male")
                //{
                //    r.Sex = Rabbit.SexType.MALE;
                //}
                //if (sx == "female")
                //{

                //    r.Sex = Rabbit.SexType.FEMALE;
                //}
                r.Sex = Rabbit.GetSexType(rd.GetString("r_sex"));

                r.Name           = rd.GetString("name");                                                 //3
                r.Surname        = rd.GetString("surname");                                              //4
                r.Secname        = rd.GetString("secname");                                              //5
                r.BreedColorName = rd.IsDBNull(rd.GetOrdinal("b_color")) ? "" : rd.GetString("b_color"); //5

                r.IsDead = IsDead;

                int res;

                if (int.TryParse(r.BreedColorName, System.Globalization.NumberStyles.HexNumber, null, out res))
                {
                    r.BreedColor = Color.FromArgb(res);
                }
                else
                {
                    r.BreedColor = Color.FromName(r.BreedColorName);
                }
                r.BreedId   = rd.GetInt32("r_breed");                                             //6
                r.BreedName = rd.IsDBNull(rd.GetOrdinal("b_name")) ? "" : rd.GetString("b_name"); //7
            }
            else
            {
                r = null;
            }
            //			rd.HasRows
            rd.Close();

            if (r != null)
            {
                getRabbitPriplodK(sql, ref r);
                getRabbitRodK(sql, ref r);
            }
            return(r);
        }
Example #8
0
        private void fillTable()
        {
            cs.PrepareForUpdate();
            Filters flt = new Filters();
            flt[Filters.RAB_ID] = _rabFemale.ID.ToString();
            flt[Filters.HETEROSIS] = chHetererosis.Checked ? "1" : "0";
            flt[Filters.INBREEDING] = chInbreed.Checked ? "1" : "0";
            flt[Filters.MALE_REST] = _opt_malewait.ToString();
            flt[Filters.MAKE_CANDIDATE] = _opt_makeCand.ToString();
            flt[Filters.SHOW_CANDIDATE] = chCandidates.Checked ? "1" : "0";
            flt[Filters.SHOW_REST] = chRest.Checked ? "1" : "0";
            //TODO здесь трахатели идеалогически неверно передаются через объекты Трахов
            FuckPartner[] fs = Engine.db().GetAllFuckers(flt);
            listView1.BeginUpdate();

            foreach (FuckPartner fP in fs) {
                bool heter = (fP.BreedId != _rabFemale.BreedID);
                bool inbr = RabNetEngHelper.inbreeding(_rabFemale.Genoms, fP.OldGenoms);

                ListViewItem li = listView1.Items.Add(fP.FullName);
                li.UseItemStyleForSubItems = false;
                if (fP.LastFuck != DateTime.MinValue && DateTime.Now < fP.LastFuck.Date.AddDays(_opt_malewait)) {
                    li.SubItems[IND_NAME].ForeColor = chRest.ForeColor;
                }
                li.Tag = fP;
                li.SubItems.Add("Мальчик");
                if (fP.Status == 1 || (fP.Status == 0 && fP.Age >= _opt_makeCand)) {
                    li.SubItems[IND_STATE].Text = "Кандидат";
                    li.SubItems[IND_STATE].ForeColor = chCandidates.ForeColor;
                }
                if (fP.Status == 2) {
                    li.SubItems[IND_STATE].Text = "Производитель";
                }
                li.SubItems.Add(_breeds[fP.BreedId]);
                li.SubItems.Add(fP.F***s.ToString());
                li.SubItems.Add(fP.MutualChildren.ToString());
                li.SubItems.Add(inbr ? "ДА" : "-");

                int inbrLevel = 0;
                if (RabbitGen.DetectInbreeding(_rabFemale.RabGenoms, fP.RabGenoms, ref inbrLevel)) {
                    li.SubItems.Add(inbrLevel.ToString() + " поколение");
                } else {
                    li.SubItems.Add("-");
                }

                if (heter) {
                    li.SubItems[IND_BREED].ForeColor = chHetererosis.ForeColor;
                }
                if (inbr) {
                    li.SubItems[IND_INBR].ForeColor = chInbreed.ForeColor;
                }
                if (_rabMaleId == fP.Id) {
                    li.Selected = true;
                    li.EnsureVisible();
                }
            }
            // если был передан партнер, но его нет в списке, то обнуляем его, т.к. он не был выбран
            if (listView1.SelectedItems.Count == 0) {
                _rabMaleId = 0;
            } else {
                listView1_SelectedIndexChanged(null, null);
            }

            listView1.EndUpdate();
            cs.RestoreAfterUpdate();
        }