From f194b131e0cac55d1937e75c98edf62ba04e1df4 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 12 Aug 2013 15:44:06 +0200 Subject: Added Iter function to Chunk --- mcmap/chunk.go | 11 +++++++++++ mcmap/examples/emeraldfinder/main.go | 15 +++++---------- mcmap/examples/replace/main.go | 15 +++++---------- 3 files changed, 21 insertions(+), 20 deletions(-) (limited to 'mcmap') diff --git a/mcmap/chunk.go b/mcmap/chunk.go index 3241d82..9cf2dc7 100644 --- a/mcmap/chunk.go +++ b/mcmap/chunk.go @@ -86,6 +86,17 @@ func (c *Chunk) Height(x, z int) int { return int(c.heightMap[z*ChunkSizeXZ+x]) } +// Iter iterates ofer all blocks of this chunk and calls the function fx with the coords (x,y,z) and a pointer to the block. +func (c *Chunk) Iter(fx func(int, int, int, *Block)) { + for x := 0; x < ChunkSizeXZ; x++ { + for y := 0; y < ChunkSizeY; y++ { + for z := 0; z < ChunkSizeXZ; z++ { + fx(x, y, z, &(c.blocks[calcBlockOffset(x, y, z)])) + } + } + } +} + // Biome gets the Biome at x,z. func (c *Chunk) Biome(x, z int) Biome { return c.biomes[x*ChunkSizeXZ+z] } diff --git a/mcmap/examples/emeraldfinder/main.go b/mcmap/examples/emeraldfinder/main.go index 3249a35..ea22624 100644 --- a/mcmap/examples/emeraldfinder/main.go +++ b/mcmap/examples/emeraldfinder/main.go @@ -36,17 +36,12 @@ chunkLoop: os.Exit(1) } - for y := 0; y < mcmap.ChunkSizeY; y++ { - for x := 0; x < mcmap.ChunkSizeXZ; x++ { - for z := 0; z < mcmap.ChunkSizeXZ; z++ { - blk := chunk.Block(x, y, z) - if blk.ID == mcmap.BlkEmeraldOre { - absx, absz := mcmap.ChunkToBlock(cx, cz, x, z) - fmt.Printf("%d, %d, %d\n", absx, y, absz) - } - } + chunk.Iter(func(x, y, z int, blk *mcmap.Block) { + if blk.ID == mcmap.BlkEmeraldOre { + absx, absz := mcmap.ChunkToBlock(cx, cz, x, z) + fmt.Printf("%d, %d, %d\n", absx, y, absz) } - } + }) chunk.MarkUnused() } diff --git a/mcmap/examples/replace/main.go b/mcmap/examples/replace/main.go index 87dd677..d289522 100644 --- a/mcmap/examples/replace/main.go +++ b/mcmap/examples/replace/main.go @@ -37,17 +37,12 @@ chunkLoop: } modified := false - for y := 0; y < mcmap.ChunkSizeY; y++ { - for x := 0; x < mcmap.ChunkSizeXZ; x++ { - for z := 0; z < mcmap.ChunkSizeXZ; z++ { - blk := chunk.Block(x, y, z) - if blk.ID == mcmap.BlkBlockOfIron { - blk.ID = mcmap.BlkBlockOfDiamond - modified = true - } - } + chunk.Iter(func(x, y, z int, blk *mcmap.Block) { + if blk.ID == mcmap.BlkBlockOfIron { + blk.ID = mcmap.BlkBlockOfDiamond + modified = true } - } + }) if modified { fmt.Printf("Modified chunk %d, %d.\n", cx, cz) -- cgit v1.2.3-54-g00ecf