Example #1
0
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    depth = op.options['Depth']
    blocktype = op.options['Block']

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow'])

    if op.options['Only Change Natural Earth']:
        try:
            # try to get the block mask from the topsoil filter
            import topsoil  # @UnresolvedImport
            blockmask = topsoil.naturalBlockmask()
            blockmask[blocktype.ID] = True
            blocktypeMask = blockmask[blocks]

        except Exception as e:
            print(repr(e), " while using blockmask from filters.topsoil")
            blocktypeMask = blocks != 0

    else:
        # topsoil any block
        blocktypeMask = blocks != 0

    if depth < 0:
        blocktypeMask &= (blocks != blocktype.ID)

    if len(blocktypeMask) == 0:
        return
    heightmap = extractHeights(blocktypeMask)

    for x, z in itertools.product(*list(map(xrange, heightmap.shape))):
        h = heightmap[x, z]
        if h >= brushBoxThisChunk.height:
            continue
        if depth > 0:
            idx = x, z, slice(max(0, h - depth), h)
        else:
            # negative depth values mean to put a layer above the surface
            idx = x, z, slice(h, min(blocks.shape[2], h - depth))
        mask = brushMask[idx]
        blocks[idx][mask] = blocktype.ID
        data[idx][mask] = blocktype.blockData

    createTileEntities(blocktype, brushBoxThisChunk, chunk)
Example #2
0
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow'])

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    airFill = op.options['Fill Air']

    if not airFill:
        airtable = numpy.zeros((materials.id_limit, 16), dtype='bool')
        airtable[0] = True
        replaceMaskAir = airtable[blocks, data]
        brushMask &= ~replaceMaskAir

    chunk.Blocks[slices][brushMask] = op.options['Block'].ID
    chunk.Data[slices][brushMask] = op.options['Block'].blockData

    createTileEntities(op.options['Block'], brushBoxThisChunk, chunk)
Example #3
0
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'],
                                brushBox.origin, brushBoxThisChunk,
                                op.options['Noise'], op.options['Hollow'])

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    airFill = op.options['Fill Air']

    if not airFill:
        airtable = numpy.zeros((materials.id_limit, 16), dtype='bool')
        airtable[0] = True
        replaceMaskAir = airtable[blocks, data]
        brushMask &= ~replaceMaskAir

    chunk.Blocks[slices][brushMask] = op.options['Block'].ID
    chunk.Data[slices][brushMask] = op.options['Block'].blockData

    createTileEntities(op.options['Block'], brushBoxThisChunk, chunk)
Example #4
0
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow'])

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    if op.options['Block'].wildcard:
        print("Wildcard replace")
        blocksToReplace = []
        for i in range(16):
            blocksToReplace.append(op.editor.level.materials.blockWithID(op.options['Block'].ID, i))
    else:
        blocksToReplace = [op.options['Block']]

    replaceTable = block_fill.blockReplaceTable(blocksToReplace)
    replaceMask = replaceTable[blocks, data]
    brushMask &= replaceMask

    chunk.Blocks[slices][brushMask] = op.options['Block To Replace With'].ID
    chunk.Data[slices][brushMask] = op.options['Block To Replace With'].blockData

    createTileEntities(op.options['Block To Replace With'], brushBoxThisChunk, chunk)
Example #5
0
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow'])

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    if op.options['Block'].wildcard:
        print "Wildcard replace"
        blocksToReplace = []
        for i in range(16):
            blocksToReplace.append(op.editor.level.materials.blockWithID(op.options['Block'].ID, i))
    else:
        blocksToReplace = [op.options['Block']]

    replaceTable = block_fill.blockReplaceTable(blocksToReplace)
    replaceMask = replaceTable[blocks, data]
    brushMask &= replaceMask

    chunk.Blocks[slices][brushMask] = op.options['Block To Replace With'].ID
    chunk.Data[slices][brushMask] = op.options['Block To Replace With'].blockData

    createTileEntities(op.options['Block To Replace With'], brushBoxThisChunk, chunk)
Example #6
0
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'],
                                brushBox.origin, brushBoxThisChunk,
                                op.options['Noise'], op.options['Hollow'])

    replaceWith1 = op.options['Block 1']
    chanceA = op.options['Weight 1']
    replaceWith2 = op.options['Block 2']
    chanceB = op.options['Weight 2']
    replaceWith3 = op.options['Block 3']
    chanceC = op.options['Weight 3']
    replaceWith4 = op.options['Block 4']
    chanceD = op.options['Weight 4']

    totalChance = chanceA + chanceB + chanceC + chanceD

    if totalChance == 0:
        print "Total Chance value can't be 0."
        return

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    if op.options['Block'].wildcard:
        print "Wildcard replace"
        blocksToReplace = []
        for i in range(16):
            blocksToReplace.append(
                op.editor.level.materials.blockWithID(op.options['Block'].ID,
                                                      i))
    else:
        blocksToReplace = [op.options['Block']]

    replaceTable = block_fill.blockReplaceTable(blocksToReplace)
    replaceMask = replaceTable[blocks, data]
    brushMask &= replaceMask

    brushMaskOption1 = numpy.copy(brushMask)
    brushMaskOption2 = numpy.copy(brushMask)
    brushMaskOption3 = numpy.copy(brushMask)
    brushMaskOption4 = numpy.copy(brushMask)

    x = -1

    for _ in brushMask:
        x += 1
        y = -1
        for _ in brushMask[x]:
            y += 1
            z = -1
            for _ in brushMask[x][y]:
                z += 1
                if brushMask[x][y][z]:
                    randomChance = random.randint(1, totalChance)
                    if chanceA >= randomChance:
                        brushMaskOption1[x][y][z] = True
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = True
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = True
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC + chanceD >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = True
                        continue

    blocks[brushMaskOption1] = replaceWith1.ID
    data[brushMaskOption1] = replaceWith1.blockData
    blocks[brushMaskOption2] = replaceWith2.ID
    data[brushMaskOption2] = replaceWith2.blockData
    blocks[brushMaskOption3] = replaceWith3.ID
    data[brushMaskOption3] = replaceWith3.blockData
    blocks[brushMaskOption4] = replaceWith4.ID
    data[brushMaskOption4] = replaceWith4.blockData

    UsedAlready = []
    createTileEntities(replaceWith1, brushBoxThisChunk, chunk)
    UsedAlready.append(replaceWith1.ID)
    if replaceWith2.ID not in UsedAlready:
        createTileEntities(replaceWith2, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith2.ID)
    if replaceWith3.ID not in UsedAlready:
        createTileEntities(replaceWith3, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith3.ID)
    if replaceWith4.ID not in UsedAlready:
        createTileEntities(replaceWith4, brushBoxThisChunk, chunk)
Example #7
0
        except Exception, e:
            print repr(e), " while using blockmask from filters.topsoil"
            blocktypeMask = blocks != 0

    else:
        # topsoil any block
        blocktypeMask = blocks != 0

    if depth < 0:
        blocktypeMask &= (blocks != blocktype.ID)
    
    if len(blocktypeMask) == 0:
        return
    heightmap = extractHeights(blocktypeMask)

    for x, z in itertools.product(*map(xrange, heightmap.shape)):
        h = heightmap[x, z]
        if h >= brushBoxThisChunk.height:
            continue
        if depth > 0:
            idx = x, z, slice(max(0, h - depth), h)
        else:
            # negative depth values mean to put a layer above the surface
            idx = x, z, slice(h, min(blocks.shape[2], h - depth))
        mask = brushMask[idx]
        blocks[idx][mask] = blocktype.ID
        data[idx][mask] = blocktype.blockData

    createTileEntities(blocktype, brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow'])

    replaceWith1 = op.options['Block 1']
    chanceA = op.options['Weight 1']
    replaceWith2 = op.options['Block 2']
    chanceB = op.options['Weight 2']
    replaceWith3 = op.options['Block 3']
    chanceC = op.options['Weight 3']
    replaceWith4 = op.options['Block 4']
    chanceD = op.options['Weight 4']

    totalChance = chanceA + chanceB + chanceC + chanceD

    if totalChance == 0:
        print "Total Chance value can't be 0."
        return

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    if op.options['Block'].wildcard:
        print "Wildcard replace"
        blocksToReplace = []
        for i in range(16):
            blocksToReplace.append(op.editor.level.materials.blockWithID(op.options['Block'].ID, i))
    else:
        blocksToReplace = [op.options['Block']]

    replaceTable = block_fill.blockReplaceTable(blocksToReplace)
    replaceMask = replaceTable[blocks, data]
    brushMask &= replaceMask

    brushMaskOption1 = numpy.copy(brushMask)
    brushMaskOption2 = numpy.copy(brushMask)
    brushMaskOption3 = numpy.copy(brushMask)
    brushMaskOption4 = numpy.copy(brushMask)

    x = -1

    for _ in brushMask:
        x += 1
        y = -1
        for _ in brushMask[x]:
            y += 1
            z = -1
            for _ in brushMask[x][y]:
                z += 1
                if brushMask[x][y][z]:
                    randomChance = random.randint(1, totalChance)
                    if chanceA >= randomChance:
                        brushMaskOption1[x][y][z] = True
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = True
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = True
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC + chanceD >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = True
                        continue

    blocks[brushMaskOption1] = replaceWith1.ID
    data[brushMaskOption1] = replaceWith1.blockData
    blocks[brushMaskOption2] = replaceWith2.ID
    data[brushMaskOption2] = replaceWith2.blockData
    blocks[brushMaskOption3] = replaceWith3.ID
    data[brushMaskOption3] = replaceWith3.blockData
    blocks[brushMaskOption4] = replaceWith4.ID
    data[brushMaskOption4] = replaceWith4.blockData

    UsedAlready = []
    createTileEntities(replaceWith1, brushBoxThisChunk, chunk)
    UsedAlready.append(replaceWith1.ID)
    if replaceWith2.ID not in UsedAlready:
        createTileEntities(replaceWith2, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith2.ID)
    if replaceWith3.ID not in UsedAlready:
        createTileEntities(replaceWith3, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith3.ID)
    if replaceWith4.ID not in UsedAlready:
        createTileEntities(replaceWith4, brushBoxThisChunk, chunk)
Example #9
0
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'],
                                brushBox.origin, brushBoxThisChunk,
                                op.options['Noise'], op.options['Hollow'])

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    airFill = op.options['Fill Air']
    replaceWith1 = op.options['Block 1']
    chanceA = op.options['Weight 1']
    replaceWith2 = op.options['Block 2']
    chanceB = op.options['Weight 2']
    replaceWith3 = op.options['Block 3']
    chanceC = op.options['Weight 3']
    replaceWith4 = op.options['Block 4']
    chanceD = op.options['Weight 4']

    totalChance = chanceA + chanceB + chanceC + chanceD

    if totalChance == 0:
        print("Total Chance value can't be 0.")
        return

    if not airFill:
        airtable = numpy.zeros((materials.id_limit, 16), dtype='bool')
        airtable[0] = True
        replaceMaskAir = airtable[blocks, data]
        brushMask &= ~replaceMaskAir

    brushMaskOption1 = numpy.copy(brushMask)
    brushMaskOption2 = numpy.copy(brushMask)
    brushMaskOption3 = numpy.copy(brushMask)
    brushMaskOption4 = numpy.copy(brushMask)

    x = -1

    for _ in brushMask:
        x += 1
        y = -1
        for _ in brushMask[x]:
            y += 1
            z = -1
            for _ in brushMask[x][y]:
                z += 1
                if brushMask[x][y][z]:
                    randomChance = random.randint(1, totalChance)
                    if chanceA >= randomChance:
                        brushMaskOption1[x][y][z] = True
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = True
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = True
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC + chanceD >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = True
                        continue

    blocks[brushMaskOption1] = replaceWith1.ID
    data[brushMaskOption1] = replaceWith1.blockData
    blocks[brushMaskOption2] = replaceWith2.ID
    data[brushMaskOption2] = replaceWith2.blockData
    blocks[brushMaskOption3] = replaceWith3.ID
    data[brushMaskOption3] = replaceWith3.blockData
    blocks[brushMaskOption4] = replaceWith4.ID
    data[brushMaskOption4] = replaceWith4.blockData

    UsedAlready = []
    createTileEntities(replaceWith1, brushBoxThisChunk, chunk)
    UsedAlready.append(replaceWith1.ID)
    if replaceWith2.ID not in UsedAlready:
        createTileEntities(replaceWith2, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith2.ID)
    if replaceWith3.ID not in UsedAlready:
        createTileEntities(replaceWith3, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith3.ID)
    if replaceWith4.ID not in UsedAlready:
        createTileEntities(replaceWith4, brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk):
    brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow'])

    blocks = chunk.Blocks[slices]
    data = chunk.Data[slices]

    airFill = op.options['Fill Air']
    replaceWith1 = op.options['Block 1']
    chanceA = op.options['Weight 1']
    replaceWith2 = op.options['Block 2']
    chanceB = op.options['Weight 2']
    replaceWith3 = op.options['Block 3']
    chanceC = op.options['Weight 3']
    replaceWith4 = op.options['Block 4']
    chanceD = op.options['Weight 4']

    totalChance = chanceA + chanceB + chanceC + chanceD

    if totalChance == 0:
        print "Total Chance value can't be 0."
        return

    if not airFill:
        airtable = numpy.zeros((materials.id_limit, 16), dtype='bool')
        airtable[0] = True
        replaceMaskAir = airtable[blocks, data]
        brushMask &= ~replaceMaskAir

    brushMaskOption1 = numpy.copy(brushMask)
    brushMaskOption2 = numpy.copy(brushMask)
    brushMaskOption3 = numpy.copy(brushMask)
    brushMaskOption4 = numpy.copy(brushMask)

    x = -1

    for _ in brushMask:
        x += 1
        y = -1
        for _ in brushMask[x]:
            y += 1
            z = -1
            for _ in brushMask[x][y]:
                z += 1
                if brushMask[x][y][z]:
                    randomChance = random.randint(1, totalChance)
                    if chanceA >= randomChance:
                        brushMaskOption1[x][y][z] = True
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = True
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = True
                        brushMaskOption4[x][y][z] = False
                        continue
                    if chanceA + chanceB + chanceC + chanceD >= randomChance:
                        brushMaskOption1[x][y][z] = False
                        brushMaskOption2[x][y][z] = False
                        brushMaskOption3[x][y][z] = False
                        brushMaskOption4[x][y][z] = True
                        continue

    blocks[brushMaskOption1] = replaceWith1.ID
    data[brushMaskOption1] = replaceWith1.blockData
    blocks[brushMaskOption2] = replaceWith2.ID
    data[brushMaskOption2] = replaceWith2.blockData
    blocks[brushMaskOption3] = replaceWith3.ID
    data[brushMaskOption3] = replaceWith3.blockData
    blocks[brushMaskOption4] = replaceWith4.ID
    data[brushMaskOption4] = replaceWith4.blockData

    UsedAlready = []
    createTileEntities(replaceWith1, brushBoxThisChunk, chunk)
    UsedAlready.append(replaceWith1.ID)
    if replaceWith2.ID not in UsedAlready:
        createTileEntities(replaceWith2, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith2.ID)
    if replaceWith3.ID not in UsedAlready:
        createTileEntities(replaceWith3, brushBoxThisChunk, chunk)
        UsedAlready.append(replaceWith3.ID)
    if replaceWith4.ID not in UsedAlready:
        createTileEntities(replaceWith4, brushBoxThisChunk, chunk)