progress: Finished the chunk-level ui for the visualization
This commit is contained in:
		@@ -12,12 +12,16 @@ import (
 | 
			
		||||
 | 
			
		||||
const fileCacheSize = 8
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	ChunkNotFoundError = errors.New("chunk was not found in storage")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SimpleServer struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Filesystem operations
 | 
			
		||||
 | 
			
		||||
func (s *SimpleServer) FetchChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
func (s *SimpleServer) FetchOrCreateChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
	chunkFileName := filepath.Join(ChunkFileDirectory, pos.ToFileName())
 | 
			
		||||
 | 
			
		||||
	var chunkData world.ChunkData
 | 
			
		||||
@@ -43,6 +47,25 @@ func (s *SimpleServer) FetchChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
			return chunkData, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	defer chunkFile.Close()
 | 
			
		||||
 | 
			
		||||
	return ReadChunkFromFile(chunkFile)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SimpleServer) FetchChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
	chunkFileName := filepath.Join(ChunkFileDirectory, pos.ToFileName())
 | 
			
		||||
 | 
			
		||||
	var chunkData world.ChunkData
 | 
			
		||||
 | 
			
		||||
	chunkFile, err := os.Open(chunkFileName)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if errors.Is(err, fs.ErrNotExist) {
 | 
			
		||||
			return chunkData, ChunkNotFoundError
 | 
			
		||||
		} else {
 | 
			
		||||
			return chunkData, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	defer chunkFile.Close()
 | 
			
		||||
 | 
			
		||||
	return ReadChunkFromFile(chunkFile)
 | 
			
		||||
}
 | 
			
		||||
@@ -53,7 +76,7 @@ func (s *SimpleServer) ChangeBlock(
 | 
			
		||||
	worldPosition world.BlockPos,
 | 
			
		||||
	targetState world.BlockID,
 | 
			
		||||
) error {
 | 
			
		||||
	chunk, err := s.FetchChunk(worldPosition.ToChunkPos())
 | 
			
		||||
	chunk, err := s.FetchOrCreateChunk(worldPosition.ToChunkPos())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
@@ -71,7 +94,7 @@ func (s *SimpleServer) ChangeBlockRange(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SimpleServer) ReadBlockAt(pos world.BlockPos) (world.BlockID, error) {
 | 
			
		||||
	chunk, err := s.FetchChunk(pos.ToChunkPos())
 | 
			
		||||
	chunk, err := s.FetchOrCreateChunk(pos.ToChunkPos())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return world.Empty, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -80,5 +103,5 @@ func (s *SimpleServer) ReadBlockAt(pos world.BlockPos) (world.BlockID, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SimpleServer) ReadChunkAt(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
	return s.FetchChunk(pos)
 | 
			
		||||
	return s.FetchOrCreateChunk(pos)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user