Пример #1
0
 public void CheckComplete(int divisor = 2)
 {
     cycle++;
     if (cycle == max / divisor)
     {
         whoAmI++;
         if (whoAmI < mDen.Length)
         {
             mDen[whoAmI]    = new SkyDen(position, range);
             mDen[whoAmI].id = whoAmI;
             if (miniBiome)
             {
                 if (whoAmI % iterate == 0)
                 {
                     mDen[whoAmI].center = NewPosition(mDen[whoAmI - 1].center);
                 }
                 else
                 {
                     mDen[whoAmI].center = mDen[whoAmI - 1].center;
                 }
             }
             else
             {
                 mDen[whoAmI].center = mDen[whoAmI - 1].center;
             }
         }
     }
 }
Пример #2
0
 public void Update()
 {
     if (den == mDen[0])
     {
         while (whoAmI < max - 1)
         {
             foreach (SkyDen s in mDen.Where(t => t != null && Vector2.Distance(position - t.center, Vector2.Zero) > range))
             {
                 MoveBackInRange(s);
             }
             SkyDen m = mDen[whoAmI];
             if (m == null)
             {
                 whoAmI++;
                 continue;
             }
             m.CheckComplete(2);
             while (!m.StandardMove())
             {
                 ;
             }
             m.lookFurther = 0;
             m.points      = 0;
             if (m.center.Y > m.maxY)
             {
                 int  block = -200;
                 bool bRand = WorldGen.genRand.Next(2) == 0;
                 m.center += new Vector2(bRand ? block / 4 : block * -1 / 4, block);
             }
         }
     }
     den.GetBounds();
     den.FinalDig();
     den.Terminate();
 }
Пример #3
0
 public void MoveBackInRange(SkyDen den)
 {
     Action method = delegate()
     {
         Vector2 newPosition = Vector2.Zero;
         do
         {
             newPosition = new Vector2(WorldGen.genRand.NextFloat(position.X - range / 2, position.X + range / 2), WorldGen.genRand.NextFloat(position.Y - range / 2, position.Y + range / 2));
         } while ((position - newPosition).Length() > range);
         den.center = newPosition;
     };
 }
Пример #4
0
 public void Start(SkyDen den, bool miniBiome = true, int iterate = 8)
 {
     active       = true;
     this.iterate = iterate;
     mDen         = new SkyDen[max];
     bounds       = new Rectangle[max / iterate];
     for (int i = 0; i < bounds.Length; i++)
     {
         bounds[i] = Rectangle.Empty;
     }
     mDen[whoAmI]        = den;
     mDen[whoAmI].id     = whoAmI;
     mDen[whoAmI].center = center;
     this.den            = mDen[whoAmI];
 }
Пример #5
0
 public SkyDen GenerateNewMiner()
 {
     if (this == mDen[0])
     {
         whoAmI++;
         if (whoAmI == max)
         {
             FinalDig();
         }
         if (whoAmI < max)
         {
             mDen[whoAmI]        = new SkyDen(position, range);
             mDen[whoAmI].center = NewPosition(mDen[whoAmI - 1].center);
         }
         else
         {
             Terminate();
         }
     }
     return(mDen[Math.Min(whoAmI, max - 1)]);
 }