Initial commit and progress blocking out

This commit is contained in:
Nicholas Novak 2023-09-26 13:26:10 -07:00
commit cef39ef57a
8 changed files with 1602 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/target

1511
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

12
Cargo.toml Normal file
View File

@ -0,0 +1,12 @@
[package]
name = "spatial-db"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
axum = "0.6.20"
clap = { version = "4.4.5", features = ["derive"] }
parquet = "47.0.0"
tokio = { version = "1.32.0", features = ["macros", "rt-multi-thread"] }

22
src/main.rs Normal file
View File

@ -0,0 +1,22 @@
mod storage;
mod storage_server;
use clap::Parser;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
/// `http` starts a build-in http server that listens for reads and writes
/// to the database
#[arg(long)]
http: bool,
}
fn main() {
let args = Args::parse();
if args.http {
println!("Proxy was enabled");
storage_server::main();
}
println!("Hello, world!");
}

11
src/storage/interface.rs Normal file
View File

@ -0,0 +1,11 @@
use crate::storage::world::{BlockID, BlockPos};
enum StorageInterface {
/// `ChangeBlock` changes the block at the world position given by `world_position` to the
/// target block id `BlockID`
ChangeBlock {
target_state: BlockID,
world_position: BlockPos,
},
ChangeBlockRange(BlockID, BlockPos, BlockPos),
}

2
src/storage/mod.rs Normal file
View File

@ -0,0 +1,2 @@
mod interface;
mod world;

32
src/storage/world.rs Normal file
View File

@ -0,0 +1,32 @@
type ChunkCoordinate = isize;
const SECTIONS_PER_CHUNK: usize = 16;
struct ChunkData {
x: ChunkCoordinate,
y: ChunkCoordinate,
sections: [ChunkSection; SECTIONS_PER_CHUNK],
}
// https://wiki.vg/Chunk_Format
struct ChunkSection {
/// The number of non-empty blocks in the section. If completely full, the
/// section contains a 16 x 16 x 16 cube of blocks = 4096 blocks
/// If the section is empty, this is skipped
block_count: u16,
block_states: [BlockID; 4096],
}
/// `BlockPos` represents the location of a block in world space
pub struct BlockPos {
x: isize,
y: isize,
z: isize,
}
/// BlockID represents the type of block stored
#[repr(u8)]
pub enum BlockID {
Empty,
Generic,
}

11
src/storage_server.rs Normal file
View File

@ -0,0 +1,11 @@
use axum::{routing::get, Router};
#[tokio::main]
pub async fn main() {
let app = Router::new().route("/", get(|| async { "Hello World" }));
axum::Server::bind(&"0.0.0.0:5000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}