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; } } } }
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(); }
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; }; }
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]; }
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)]); }