Exemplo n.º 1
0
 protected CrestLayer(CrestLayer other)
 {
     this.Image   = (other.Image == null)?null:(Bitmap)other.Image.Clone();
     this.MaxCres = other.MaxCres;
     this.Mirror  = other.Mirror;
     this.Flip    = other.Flip;
     this.Prob    = other.Prob;
 }
Exemplo n.º 2
0
        public Flag Generate(int seed = 0x7777777)
        {
            try
            {
                Random r = new Random(seed);
                //setup
                int numLayers = layerDistrib.GetRandomItem(r);

                Flag flag = new Flag();
                flag.FieldCol = Color.FromArgb(flagCols.GetRandomItem(r));
                //generate layers
                for (int i = 0; i < numLayers; i++)
                {
                    int           layer = pickRandomLayer(flag.FlagLayers, r);
                    int           color = flagCols.GetRandomItem(r);
                    LayerSettings ls    = new LayerSettings(color);
                    flag.FlagLayers.Add(new Tuple <FlagLayer, LayerSettings>(Layers[layer], ls));
                }

                flag.FlagLayers = (from L in flag.FlagLayers
                                   orderby L.Item1.Priority ascending
                                   select L).ToList();

                //draw crest
                if (r.Next(100) < 50)
                {
                    CrestLayer cl = (CrestLayer)Layers.Where(L => L is CrestLayer).ToList().GetRandomItem(r);

                    if (cl == null)
                    {
                        return(null);
                    }
                    //is ther a graphic that accomidates a crest
                    var crestsHolders = (from L in flag.FlagLayers
                                         where (L.Item1.CanHoldCrest)
                                         select L).ToList();

                    if (crestsHolders.Count > 0)
                    {
                        //crest in middle
                        int crestSize   = crestsHolders.Min(L => L.Item1.MaxCres);
                        var crestHolder = flag.FlagLayers.FirstOrDefault(L => L.Item1.MaxCres == crestSize);
                        //move the crest holder to the end
                        flag.FlagLayers.Remove(crestHolder);
                        flag.FlagLayers.Add(crestHolder);

                        LayerSettings ls = new LayerSettings(crestCols.GetRandomItem(r));
                        ls.nominalSize   = crestSize;
                        ls.crestPosition = CrestPositions.Central;
                        if (r.Next(100) < 50)
                        {
                            //paint the back
                            ls.BackColor = crestBackCols.GetRandomItem();
                        }
                        flag.FlagLayers.Add(new Tuple <FlagLayer, LayerSettings>(cl, ls));
                    }
                    else
                    {
                        //crest in top left
                        LayerSettings ls = new LayerSettings(crestCols.GetRandomItem(r));
                        ls.nominalSize   = 0;
                        ls.crestPosition = (r.Next(100) < 50) ? CrestPositions.TopLeft : CrestPositions.Left;
                        flag.FlagLayers.Add(new Tuple <FlagLayer, LayerSettings>(cl, ls));
                    }
                }

                return(flag);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }