refactor: Changed some file names and moved some files around
This commit is contained in:
		@@ -4,13 +4,55 @@ import (
 | 
				
			|||||||
	"github.com/Tnze/go-mc/save"
 | 
						"github.com/Tnze/go-mc/save"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ChunkSectionCount = 16
 | 
					const (
 | 
				
			||||||
 | 
						// The number of sections per chunk. This determines the total height of the
 | 
				
			||||||
 | 
						// chunk
 | 
				
			||||||
 | 
						ChunkSectionCount = 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// The number of blocks in a horizontal slice of a chunk
 | 
				
			||||||
 | 
						chunkSliceSize = 16 * 16
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// `ChunkData` represents the contents of a "chunk", which is a column of voxels
 | 
				
			||||||
 | 
					// in world space
 | 
				
			||||||
type ChunkData struct {
 | 
					type ChunkData struct {
 | 
				
			||||||
	Pos      ChunkPos                        `json:"pos"`
 | 
						Pos      ChunkPos                        `json:"pos"`
 | 
				
			||||||
	Sections [ChunkSectionCount]ChunkSection `json:"sections"`
 | 
						Sections [ChunkSectionCount]ChunkSection `json:"sections"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// `ChunkSection' is a fixed-size cube that stores the data in a chunk
 | 
				
			||||||
 | 
					type ChunkSection struct {
 | 
				
			||||||
 | 
						// The count of full blocks in the chunk
 | 
				
			||||||
 | 
						BlockCount  uint                  `json:"block_count"`
 | 
				
			||||||
 | 
						BlockStates [16 * 16 * 16]BlockID `json:"block_states"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func rem_euclid(a, b int) int {
 | 
				
			||||||
 | 
						return (a%b + b) % b
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func IndexOfBlock(pos BlockPos) int {
 | 
				
			||||||
 | 
						baseX := rem_euclid(pos.X, 16)
 | 
				
			||||||
 | 
						baseY := rem_euclid(int(pos.Y), 16)
 | 
				
			||||||
 | 
						baseZ := rem_euclid(pos.Z, 16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return (baseY * chunkSliceSize) + (baseZ * 16) + baseX
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (cs *ChunkSection) UpdateBlockAtIndex(index int, targetState BlockID) {
 | 
				
			||||||
 | 
						// TODO: Keep track of the block count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cs.BlockStates[index] = targetState
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (cs *ChunkSection) UpdateBlock(pos BlockPos, targetState BlockID) {
 | 
				
			||||||
 | 
						cs.BlockStates[IndexOfBlock(pos)] = targetState
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (cs *ChunkSection) FetchBlock(pos BlockPos) BlockID {
 | 
				
			||||||
 | 
						return cs.BlockStates[IndexOfBlock(pos)]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (cd *ChunkData) SectionFor(pos BlockPos) *ChunkSection {
 | 
					func (cd *ChunkData) SectionFor(pos BlockPos) *ChunkSection {
 | 
				
			||||||
	return &cd.Sections[pos.Y%ChunkSectionCount]
 | 
						return &cd.Sections[pos.Y%ChunkSectionCount]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,88 +0,0 @@
 | 
				
			|||||||
package world
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"math/rand"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	// Slice size is the total number of blocks in a horizontal slice of a chunk
 | 
					 | 
				
			||||||
	sliceSize = 16 * 16
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type BlockPos struct {
 | 
					 | 
				
			||||||
	X int  `json:"x"`
 | 
					 | 
				
			||||||
	Y uint `json:"y"`
 | 
					 | 
				
			||||||
	Z int  `json:"z"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (b BlockPos) String() string {
 | 
					 | 
				
			||||||
	return fmt.Sprintf("BlockPos { X: %v, Y: %v, Z: %v }", b.X, b.Y, b.Z)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func RandomBlockPosWithRange(maxRange float64) BlockPos {
 | 
					 | 
				
			||||||
	return BlockPos{
 | 
					 | 
				
			||||||
		X: int(rand.NormFloat64() * maxRange),
 | 
					 | 
				
			||||||
		Y: uint(rand.NormFloat64() * maxRange),
 | 
					 | 
				
			||||||
		Z: int(rand.NormFloat64() * maxRange),
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (b BlockPos) ToChunkPos() ChunkPos {
 | 
					 | 
				
			||||||
	return ChunkPos{
 | 
					 | 
				
			||||||
		X: b.X / 16,
 | 
					 | 
				
			||||||
		Z: b.Z / 16,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type ChunkPos struct {
 | 
					 | 
				
			||||||
	X int `json:"x"`
 | 
					 | 
				
			||||||
	Z int `json:"z"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (cp ChunkPos) ToFileName() string {
 | 
					 | 
				
			||||||
	return fmt.Sprintf("p.%d.%d.chunk", cp.X, cp.Z)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (cp ChunkPos) StringCoords() string {
 | 
					 | 
				
			||||||
	return fmt.Sprintf("%d, %d", cp.X, cp.Z)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type ChunkSection struct {
 | 
					 | 
				
			||||||
	// The count of full blocks in the chunk
 | 
					 | 
				
			||||||
	BlockCount  uint                  `json:"block_count"`
 | 
					 | 
				
			||||||
	BlockStates [16 * 16 * 16]BlockID `json:"block_states"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func rem_euclid(a, b int) int {
 | 
					 | 
				
			||||||
	return (a%b + b) % b
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func IndexOfBlock(pos BlockPos) int {
 | 
					 | 
				
			||||||
	baseX := rem_euclid(pos.X, 16)
 | 
					 | 
				
			||||||
	baseY := rem_euclid(int(pos.Y), 16)
 | 
					 | 
				
			||||||
	baseZ := rem_euclid(pos.Z, 16)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return (baseY * sliceSize) + (baseZ * 16) + baseX
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (cs *ChunkSection) UpdateBlockAtIndex(index int, targetState BlockID) {
 | 
					 | 
				
			||||||
	// TODO: Keep track of the block count
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cs.BlockStates[index] = targetState
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (cs *ChunkSection) UpdateBlock(pos BlockPos, targetState BlockID) {
 | 
					 | 
				
			||||||
	cs.BlockStates[IndexOfBlock(pos)] = targetState
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (cs *ChunkSection) FetchBlock(pos BlockPos) BlockID {
 | 
					 | 
				
			||||||
	return cs.BlockStates[IndexOfBlock(pos)]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type BlockID uint8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	Empty BlockID = iota
 | 
					 | 
				
			||||||
	Generic
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
							
								
								
									
										51
									
								
								world/world_position.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								world/world_position.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					package world
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"math/rand"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type BlockPos struct {
 | 
				
			||||||
 | 
						X int  `json:"x"`
 | 
				
			||||||
 | 
						Y uint `json:"y"`
 | 
				
			||||||
 | 
						Z int  `json:"z"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (b BlockPos) String() string {
 | 
				
			||||||
 | 
						return fmt.Sprintf("BlockPos { X: %v, Y: %v, Z: %v }", b.X, b.Y, b.Z)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func RandomBlockPosWithRange(maxRange float64) BlockPos {
 | 
				
			||||||
 | 
						return BlockPos{
 | 
				
			||||||
 | 
							X: int(rand.NormFloat64() * maxRange),
 | 
				
			||||||
 | 
							Y: uint(rand.NormFloat64() * maxRange),
 | 
				
			||||||
 | 
							Z: int(rand.NormFloat64() * maxRange),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (b BlockPos) ToChunkPos() ChunkPos {
 | 
				
			||||||
 | 
						return ChunkPos{
 | 
				
			||||||
 | 
							X: b.X / 16,
 | 
				
			||||||
 | 
							Z: b.Z / 16,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ChunkPos struct {
 | 
				
			||||||
 | 
						X int `json:"x"`
 | 
				
			||||||
 | 
						Z int `json:"z"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (cp ChunkPos) ToFileName() string {
 | 
				
			||||||
 | 
						return fmt.Sprintf("p.%d.%d.chunk", cp.X, cp.Z)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (cp ChunkPos) StringCoords() string {
 | 
				
			||||||
 | 
						return fmt.Sprintf("%d, %d", cp.X, cp.Z)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type BlockID uint8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						Empty BlockID = iota
 | 
				
			||||||
 | 
						Generic
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
		Reference in New Issue
	
	Block a user