feat: Added the generate command to load existing world saves
This commit is contained in:
		
							
								
								
									
										47
									
								
								storage/hashserver.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								storage/hashserver.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
package storage
 | 
			
		||||
 | 
			
		||||
import "git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
			
		||||
 | 
			
		||||
type HashServer struct {
 | 
			
		||||
	blocks map[world.BlockPos]world.BlockID
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hs *HashServer) SetStorageRoot(path string) {
 | 
			
		||||
	hs.blocks = make(map[world.BlockPos]world.BlockID)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hs *HashServer) FetchChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
	panic("Unimplemented")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hs *HashServer) ChangeBlock(
 | 
			
		||||
	worldPosition world.BlockPos,
 | 
			
		||||
	targetState world.BlockID,
 | 
			
		||||
) error {
 | 
			
		||||
	hs.blocks[worldPosition] = targetState
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hs *HashServer) ChangeBlockRange(
 | 
			
		||||
	targetState world.BlockID,
 | 
			
		||||
	start, end world.BlockPos,
 | 
			
		||||
) error {
 | 
			
		||||
	panic("Unimplemented")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hs *HashServer) ReadBlockAt(pos world.BlockPos) (world.BlockID, error) {
 | 
			
		||||
	panic("Unimplemented")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hs *HashServer) ReadChunkAt(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
	var data world.ChunkData
 | 
			
		||||
	data.Pos = pos
 | 
			
		||||
	for blockPos, state := range hs.blocks {
 | 
			
		||||
		if blockPos.ToChunkPos() == pos {
 | 
			
		||||
			sec := data.SectionFor(blockPos)
 | 
			
		||||
			sec.UpdateBlock(blockPos, state)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return data, nil
 | 
			
		||||
}
 | 
			
		||||
@@ -20,6 +20,10 @@ type SimpleServer struct {
 | 
			
		||||
	StorageDir string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SimpleServer) SetStorageRoot(path string) {
 | 
			
		||||
	s.StorageDir = path
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Filesystem operations
 | 
			
		||||
 | 
			
		||||
func (s *SimpleServer) FetchOrCreateChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,9 @@ package storage
 | 
			
		||||
import "git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
			
		||||
 | 
			
		||||
type StorageServer interface {
 | 
			
		||||
	// Individual operations
 | 
			
		||||
	SetStorageRoot(path string)
 | 
			
		||||
 | 
			
		||||
	// Individual block-level interactions
 | 
			
		||||
	ChangeBlock(targetState world.BlockID, world_position world.BlockPos) error
 | 
			
		||||
	ChangeBlockRange(targetState world.BlockID, start, end world.BlockPos) error
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user