public override void GeneratePartial(IServerChunk[] chunks, int chunkX, int chunkZ, int chunkdX, int chunkdZ) { int fromChunkx = chunkX + chunkdX; int fromChunkz = chunkZ + chunkdZ; int fromBaseX = fromChunkx * chunksize; int fromBaseZ = fromChunkz * chunksize; subDepositsToPlace.Clear(); float qfac = 1f;// chunks.Length / 8f; for (int i = 0; i < Deposits.Length; i++) { DepositVariant variant = Deposits[i]; /*if (variant.Code != "sphalerite" || chunkdX != 0 || chunkdZ != 0) * { * continue; * }*/ float quantityFactor = variant.WithOreMap ? variant.GetOreMapFactor(fromChunkx, fromChunkz) : 1; float qModified = qfac * variant.TriesPerChunk * quantityFactor * chanceMultiplier; int quantity = (int)qModified; quantity += chunkRand.NextInt(100) < 100 * (qModified - quantity) ? 1 : 0; while (quantity-- > 0) { tmpPos.Set(fromBaseX + chunkRand.NextInt(chunksize), -99, fromBaseZ + chunkRand.NextInt(chunksize)); long crseed = chunkRand.NextInt(10000000); depositRand.SetWorldSeed(crseed); depositRand.InitPositionSeed(fromChunkx, fromChunkz); GenDeposit(chunks, chunkX, chunkZ, tmpPos, variant); } } foreach (var val in subDepositsToPlace) { depositRand.SetWorldSeed(chunkRand.NextInt(10000000)); depositRand.InitPositionSeed(fromChunkx, fromChunkz); val.Value.GeneratorInst.GenDeposit(blockAccessor, chunks, chunkX, chunkZ, val.Key, ref subDepositsToPlace); } }
private bool ShouldPlaceAdjustedForOreMap(DepositVariant variant, int posX, int posZ, float quantity, float rndVal) { return(!variant.WithOreMap || (variant.GetOreMapFactor(posX / chunksize, posZ / chunksize) * quantity > rndVal)); }