mirror of
https://git.kittycat.homes/zoe/codename-routes.git
synced 2024-08-15 03:18:26 +00:00
seeding! hooray!
This commit is contained in:
parent
817f6898be
commit
d742c9d4cd
8 changed files with 68 additions and 20 deletions
|
@ -1,3 +1,3 @@
|
||||||
source_md5="d864960022980c4270042a1ed80b9ac4"
|
source_md5="30885b768ea8e61f6f1072099ba8c3af"
|
||||||
dest_md5="5f766eea69301dc969f05fac899cb4cb"
|
dest_md5="3858a5d8c4a4ecf0f3bd148fa4d0440a"
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 7 KiB |
|
@ -2,8 +2,8 @@ extends Node
|
||||||
|
|
||||||
export var xsize = 64
|
export var xsize = 64
|
||||||
export var ysize = 64
|
export var ysize = 64
|
||||||
export var zsize = 8
|
export var zsize = 6
|
||||||
export var cityname = "cool city"
|
export var cityname = "night city"
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
StateServer.generate_world(xsize, ysize, zsize, cityname)
|
StateServer.generate_world(xsize, ysize, zsize, cityname)
|
||||||
|
|
Binary file not shown.
|
@ -1,9 +1,8 @@
|
||||||
use gdnative::prelude::*;
|
use gdnative::prelude::*;
|
||||||
use rand::{prelude::StdRng, SeedableRng};
|
use rand::prelude::StdRng;
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use rand_seeder::Seeder;
|
use rand_seeder::Seeder;
|
||||||
use strum::{EnumCount, IntoEnumIterator};
|
use strum::EnumCount;
|
||||||
|
|
||||||
|
|
||||||
mod tiles;
|
mod tiles;
|
||||||
|
|
||||||
|
@ -13,6 +12,7 @@ pub struct World {
|
||||||
pub zsize: usize,
|
pub zsize: usize,
|
||||||
tiles: Vec<Vec<Vec<tiles::Tiletypes>>>,
|
tiles: Vec<Vec<Vec<tiles::Tiletypes>>>,
|
||||||
seed: String,
|
seed: String,
|
||||||
|
tileattributes: tiles::Attributelists,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl World {
|
impl World {
|
||||||
|
@ -40,17 +40,35 @@ impl World {
|
||||||
for y in 0..self.ysize {
|
for y in 0..self.ysize {
|
||||||
for z in 0..self.zsize {
|
for z in 0..self.zsize {
|
||||||
ret.push(Vector3::new(x as f32, y as f32, z as f32));
|
ret.push(Vector3::new(x as f32, y as f32, z as f32));
|
||||||
self.tiles[x][y][z] = tiles::Tiletypes::from_repr(
|
self.tiles[x][y][z] = self.new_tile_init_step(x, y, z, &mut rng)
|
||||||
rng.gen_range(0..tiles::Tiletypes::COUNT) as u8,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tile_at(&self, x: usize, y: usize, z:usize) -> tiles::Tiletypes {
|
fn new_tile_init_step(&self, x: usize, y: usize, z: usize, rng: &mut StdRng) -> tiles::Tiletypes {
|
||||||
|
// first generate bedrock
|
||||||
|
if z == 0 {
|
||||||
|
if y == 0 || x == 0 || y == self.ysize - 1 || x == self.xsize - 1{
|
||||||
|
return tiles::Tiletypes::Water;
|
||||||
|
}
|
||||||
|
let random = rng.gen_range(0..3) as u8;
|
||||||
|
match random {
|
||||||
|
0 => return tiles::Tiletypes::Grass,
|
||||||
|
_ => return self.tileattributes.bedrock.choose(rng).unwrap().to_owned(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// then make sure the top row of tiles is air
|
||||||
|
if z == self.zsize - 1
|
||||||
|
|| !tiles::Tile::new(self.tiles[x][y][z - 1]).is_support
|
||||||
|
|| tiles::Tile::new(self.tiles[x][y][z - 1]).must_be_on_top
|
||||||
|
{
|
||||||
|
return tiles::Tiletypes::Air;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no tile fits, then return air
|
||||||
tiles::Tiletypes::Air
|
tiles::Tiletypes::Air
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +79,7 @@ impl World {
|
||||||
zsize,
|
zsize,
|
||||||
tiles: get_vec3(xsize, ysize, zsize),
|
tiles: get_vec3(xsize, ysize, zsize),
|
||||||
seed,
|
seed,
|
||||||
|
tileattributes: tiles::Attributelists::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use derive_builder::Builder;
|
use derive_builder::Builder;
|
||||||
use strum::{AsRefStr, EnumCount, EnumDiscriminants, EnumIter, FromRepr};
|
use strum::{AsRefStr, EnumCount, EnumDiscriminants, EnumIter, FromRepr, IntoEnumIterator};
|
||||||
|
|
||||||
#[derive(AsRefStr, EnumIter, FromRepr, EnumDiscriminants, Clone, Copy, PartialEq, EnumCount)]
|
#[derive(AsRefStr, EnumIter, FromRepr, EnumDiscriminants, Clone, Copy, PartialEq, EnumCount)]
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
|
@ -9,6 +9,7 @@ pub enum Tiletypes {
|
||||||
Grass,
|
Grass,
|
||||||
Dirt,
|
Dirt,
|
||||||
Sand,
|
Sand,
|
||||||
|
Rock,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
@ -16,19 +17,17 @@ pub enum Tiletypes {
|
||||||
pub struct Tile {
|
pub struct Tile {
|
||||||
kind: Tiletypes,
|
kind: Tiletypes,
|
||||||
#[builder(default = "true")]
|
#[builder(default = "true")]
|
||||||
is_support: bool,
|
pub is_support: bool,
|
||||||
#[builder(default = "true")]
|
|
||||||
needs_support: bool,
|
|
||||||
#[builder(default = "vec![]")]
|
|
||||||
can_be_above: Vec<Tiletypes>,
|
|
||||||
#[builder(default = "vec![]")]
|
|
||||||
can_be_next_to: Vec<Tiletypes>,
|
|
||||||
#[builder(default = "true")]
|
#[builder(default = "true")]
|
||||||
pub hide_top_left: bool,
|
pub hide_top_left: bool,
|
||||||
#[builder(default = "true")]
|
#[builder(default = "true")]
|
||||||
pub hide_top_right: bool,
|
pub hide_top_right: bool,
|
||||||
#[builder(default = "true")]
|
#[builder(default = "true")]
|
||||||
pub hide_below: bool,
|
pub hide_below: bool,
|
||||||
|
#[builder(default = "false")]
|
||||||
|
pub must_be_on_top: bool,
|
||||||
|
#[builder(default = "true")]
|
||||||
|
pub can_be_bedrock: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Tile {
|
impl Tile {
|
||||||
|
@ -42,6 +41,21 @@ impl Tile {
|
||||||
.hide_below(false)
|
.hide_below(false)
|
||||||
.hide_top_right(false)
|
.hide_top_right(false)
|
||||||
.hide_top_left(false)
|
.hide_top_left(false)
|
||||||
|
.can_be_bedrock(false)
|
||||||
|
.build()
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
Tiletypes::Water => {
|
||||||
|
tile = TileBuilder::default()
|
||||||
|
.kind(kind)
|
||||||
|
.is_support(false)
|
||||||
|
.build()
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
Tiletypes::Grass => {
|
||||||
|
tile = TileBuilder::default()
|
||||||
|
.kind(kind)
|
||||||
|
.must_be_on_top(true)
|
||||||
.build()
|
.build()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
@ -53,3 +67,18 @@ impl Tile {
|
||||||
self.kind.as_ref().to_string()
|
self.kind.as_ref().to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct Attributelists {
|
||||||
|
pub bedrock: Vec<Tiletypes>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Attributelists {
|
||||||
|
pub fn new() -> Attributelists{
|
||||||
|
let mut bedrock: Vec<Tiletypes> = vec![];
|
||||||
|
for tiletype in Tiletypes::iter(){
|
||||||
|
let tile = Tile::new(tiletype);
|
||||||
|
if tile.can_be_bedrock { bedrock.push(tiletype); }
|
||||||
|
}
|
||||||
|
Attributelists { bedrock }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue