Add fence to static worldgen #4
7 changed files with 242 additions and 23 deletions
21
assets/overworld/fence-bottom-left.svg
Normal file
21
assets/overworld/fence-bottom-left.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<svg version="1.1" width="512" height="512" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
stroke="black" stroke-width="1" fill="none">
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="grass.svg"/>
|
||||||
|
|
||||||
|
<!-- continuous upper line of the fence -->
|
||||||
|
<path d="M0,26 v4 h32 v-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M0,26 h32 m-32,4 h32"/>
|
||||||
|
|
||||||
|
<!-- continuous lower line of the fence -->
|
||||||
|
<path d="M0,34 v4 h32 v-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M0,34 h32 m-32,4 h32"/>
|
||||||
|
|
||||||
|
<!-- continuous upper line of the fence, vertical this time -->
|
||||||
|
<path d="M30,32 h4 v32 h-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M30,32 v32 M34,32 v32"/>
|
||||||
|
|
||||||
|
<!-- fence post -->
|
||||||
|
<path d="M28,40 v-16 l4,-4 l4,4 v16 z" fill="saddlebrown"/>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 757 B |
9
assets/overworld/fence-bottom-right.svg
Normal file
9
assets/overworld/fence-bottom-right.svg
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<svg version="1.1" width="512" height="512" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
stroke="black" stroke-width="1" fill="none">
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="grass.svg"/>
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="fence-bottom-left.svg"
|
||||||
|
transform="translate(32,0) scale(-1,1) translate(-32,0)"/>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 351 B |
20
assets/overworld/fence-horiz.svg
Normal file
20
assets/overworld/fence-horiz.svg
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<svg version="1.1" width="512" height="512" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
stroke="black" stroke-width="1" fill="none">
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="grass.svg"/>
|
||||||
|
|
||||||
|
<!-- continuous upper line of the fence -->
|
||||||
|
<path d="M0,26 v4 h64 v-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M0,26 h64 m-64,4 h64"/>
|
||||||
|
|
||||||
|
<!-- continuous lower line of the fence -->
|
||||||
|
<path d="M0,34 v4 h64 v-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M0,34 h64 m-64,4 h64"/>
|
||||||
|
|
||||||
|
<!-- left fence post -->
|
||||||
|
<path d="M12,40 v-16 l4,-4 l4,4 v16 z" fill="saddlebrown"/>
|
||||||
|
|
||||||
|
<!-- right fence post -->
|
||||||
|
<path d="M44,40 v-16 l4,-4 l4,4 v16 z" fill="saddlebrown"/>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 684 B |
21
assets/overworld/fence-top-left.svg
Normal file
21
assets/overworld/fence-top-left.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<svg version="1.1" width="512" height="512" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
stroke="black" stroke-width="1" fill="none">
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="grass.svg"/>
|
||||||
|
|
||||||
|
<!-- continuous upper line of the fence -->
|
||||||
|
<path d="M0,26 v4 h32 v-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M0,26 h32 m-32,4 h32"/>
|
||||||
|
|
||||||
|
<!-- continuous lower line of the fence -->
|
||||||
|
<path d="M0,34 v4 h32 v-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M0,34 h32 m-32,4 h32"/>
|
||||||
|
|
||||||
|
<!-- continuous upper line of the fence, vertical this time -->
|
||||||
|
<path d="M30,0 h4 v32 h-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M30,0 v32 M34,0 v32"/>
|
||||||
|
|
||||||
|
<!-- fence post -->
|
||||||
|
<path d="M28,40 v-16 l4,-4 l4,4 v16 z" fill="saddlebrown"/>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 754 B |
9
assets/overworld/fence-top-right.svg
Normal file
9
assets/overworld/fence-top-right.svg
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<svg version="1.1" width="512" height="512" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
stroke="black" stroke-width="1" fill="none">
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="grass.svg"/>
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="fence-top-left.svg"
|
||||||
|
transform="translate(32,0) scale(-1,1) translate(-32,0)"/>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 348 B |
18
assets/overworld/fence-vert.svg
Normal file
18
assets/overworld/fence-vert.svg
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<svg version="1.1" width="512" height="512" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
stroke="black" stroke-width="1" fill="none">
|
||||||
|
|
||||||
|
<image x="0" y="0" width="64" height="64" href="grass.svg"/>
|
||||||
|
|
||||||
|
<!-- continuous upper line of the fence -->
|
||||||
|
<path d="M30,0 h4 v64 h-4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M30,0 v64 M34,0 v64"/>
|
||||||
|
|
||||||
|
<!-- upper fence post -->
|
||||||
|
<path d="M28,24 h8 v-12 l-4,-4 l-4,4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M30,16 v8 h-2 v-12 l4,-4 l4,4 v12 h-2 v-8 z"/>
|
||||||
|
|
||||||
|
<!-- lower fence post -->
|
||||||
|
<path d="M28,56 h8 v-12 l-4,-4 l-4,4 z" stroke="none" fill="saddlebrown"/>
|
||||||
|
<path d="M30,48 v8 h-2 v-12 l4,-4 l4,4 v12 h-2 v-8 z"/>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 683 B |
|
@ -28,6 +28,13 @@ pub enum Tile {
|
||||||
bottom: bool
|
bottom: bool
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Fence {
|
||||||
|
left: bool,
|
||||||
|
right: bool,
|
||||||
|
top: bool,
|
||||||
|
bottom: bool
|
||||||
|
},
|
||||||
|
|
||||||
House {
|
House {
|
||||||
texture: TextureHandle,
|
texture: TextureHandle,
|
||||||
door: bool
|
door: bool
|
||||||
|
@ -71,6 +78,38 @@ impl Tile {
|
||||||
vec![ASSETS.overworld.grass, path_texture]
|
vec![ASSETS.overworld.grass, path_texture]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Self::Fence {
|
||||||
|
left,
|
||||||
|
right,
|
||||||
|
top,
|
||||||
|
bottom
|
||||||
|
} => {
|
||||||
|
let path_texture = match (left, right, top, bottom) {
|
||||||
|
(true, true, false, false) => ASSETS.overworld.fence_horiz,
|
||||||
|
(false, false, true, true) => ASSETS.overworld.fence_vert,
|
||||||
|
|
||||||
|
(true, false, true, false) => ASSETS.overworld.fence_top_left,
|
||||||
|
(true, false, false, true) => ASSETS.overworld.fence_bottom_left,
|
||||||
|
(false, true, true, false) => ASSETS.overworld.fence_top_right,
|
||||||
|
(false, true, false, true) => ASSETS.overworld.fence_bottom_right,
|
||||||
|
|
||||||
|
(true, true, true, false)
|
||||||
|
| (true, true, false, true)
|
||||||
|
| (true, false, true, true)
|
||||||
|
| (false, true, true, true) => unimplemented!(),
|
||||||
|
|
||||||
|
(true, true, true, true) => unimplemented!(),
|
||||||
|
|
||||||
|
(true, false, false, false)
|
||||||
|
| (false, true, false, false)
|
||||||
|
| (false, false, true, false)
|
||||||
|
| (false, false, false, true) => panic!("We don't have no dead ends"),
|
||||||
|
(false, false, false, false) => panic!("I think you meant grass?!?")
|
||||||
|
};
|
||||||
|
|
||||||
|
vec![ASSETS.overworld.grass, path_texture]
|
||||||
|
},
|
||||||
|
|
||||||
Self::House { texture, .. } => {
|
Self::House { texture, .. } => {
|
||||||
vec![ASSETS.overworld.grass, *texture]
|
vec![ASSETS.overworld.grass, *texture]
|
||||||
}
|
}
|
||||||
|
@ -123,15 +162,6 @@ impl Chunk {
|
||||||
// TODO real worldgen
|
// TODO real worldgen
|
||||||
// for the time being we just copy this pre-made house block into the chunk
|
// for the time being we just copy this pre-made house block into the chunk
|
||||||
|
|
||||||
fn path(left: bool, right: bool, top: bool, bottom: bool) -> Tile {
|
|
||||||
Tile::Path {
|
|
||||||
left,
|
|
||||||
right,
|
|
||||||
top,
|
|
||||||
bottom
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn house(texture: TextureHandle) -> Tile {
|
fn house(texture: TextureHandle) -> Tile {
|
||||||
Tile::House {
|
Tile::House {
|
||||||
texture,
|
texture,
|
||||||
|
@ -139,14 +169,42 @@ impl Chunk {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let path_horiz = path(true, true, false, false);
|
let path_horiz = Tile::Path {
|
||||||
let path_vert = path(false, false, true, true);
|
left: true,
|
||||||
let path_crossing = path(true, true, true, true);
|
right: true,
|
||||||
|
top: false,
|
||||||
|
bottom: false
|
||||||
|
};
|
||||||
|
let path_vert = Tile::Path {
|
||||||
|
left: false,
|
||||||
|
right: false,
|
||||||
|
top: true,
|
||||||
|
bottom: true
|
||||||
|
};
|
||||||
|
let path_crossing = Tile::Path {
|
||||||
|
left: true,
|
||||||
|
right: true,
|
||||||
|
top: true,
|
||||||
|
bottom: true
|
||||||
|
};
|
||||||
|
let fence_horiz = Tile::Fence {
|
||||||
|
left: true,
|
||||||
|
right: true,
|
||||||
|
top: false,
|
||||||
|
bottom: false
|
||||||
|
};
|
||||||
|
let fence_vert = Tile::Fence {
|
||||||
|
left: false,
|
||||||
|
right: false,
|
||||||
|
top: true,
|
||||||
|
bottom: true
|
||||||
|
};
|
||||||
let grass = Tile::Grass;
|
let grass = Tile::Grass;
|
||||||
|
|
||||||
let block = [
|
let block = [
|
||||||
[
|
[
|
||||||
path_crossing,
|
path_horiz,
|
||||||
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
|
@ -159,7 +217,31 @@ impl Chunk {
|
||||||
path_crossing
|
path_crossing
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
path_vert,
|
Tile::Fence {
|
||||||
|
left: false,
|
||||||
|
right: true,
|
||||||
|
top: false,
|
||||||
|
bottom: true
|
||||||
|
},
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
Tile::Fence {
|
||||||
|
left: true,
|
||||||
|
right: false,
|
||||||
|
top: false,
|
||||||
|
bottom: true
|
||||||
|
},
|
||||||
|
path_vert
|
||||||
|
],
|
||||||
|
[
|
||||||
|
fence_vert,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
|
@ -169,10 +251,11 @@ impl Chunk {
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
|
fence_vert,
|
||||||
path_vert
|
path_vert
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
path_vert,
|
fence_vert,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
house(ASSETS.overworld.house_roof_mid_left),
|
house(ASSETS.overworld.house_roof_mid_left),
|
||||||
|
@ -182,10 +265,11 @@ impl Chunk {
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
|
fence_vert,
|
||||||
path_vert
|
path_vert
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
path_vert,
|
fence_vert,
|
||||||
grass,
|
grass,
|
||||||
house(ASSETS.overworld.house_roof_left),
|
house(ASSETS.overworld.house_roof_left),
|
||||||
house(ASSETS.overworld.house_mid_window),
|
house(ASSETS.overworld.house_mid_window),
|
||||||
|
@ -195,10 +279,11 @@ impl Chunk {
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
|
fence_vert,
|
||||||
path_vert
|
path_vert
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
path_vert,
|
fence_vert,
|
||||||
grass,
|
grass,
|
||||||
house(ASSETS.overworld.house_bottom_left),
|
house(ASSETS.overworld.house_bottom_left),
|
||||||
house(ASSETS.overworld.house_bottom_door),
|
house(ASSETS.overworld.house_bottom_door),
|
||||||
|
@ -208,27 +293,63 @@ impl Chunk {
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
|
fence_vert,
|
||||||
path_vert
|
path_vert
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
path_vert,
|
fence_vert,
|
||||||
grass,
|
grass,
|
||||||
grass,
|
grass,
|
||||||
path(false, true, true, false),
|
Tile::Path {
|
||||||
|
left: false,
|
||||||
|
right: true,
|
||||||
|
top: true,
|
||||||
|
bottom: false
|
||||||
|
},
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path_horiz,
|
path_horiz,
|
||||||
path(true, false, true, true)
|
fence_vert,
|
||||||
|
Tile::Path {
|
||||||
|
left: true,
|
||||||
|
right: false,
|
||||||
|
top: true,
|
||||||
|
bottom: true
|
||||||
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
path_vert, grass, grass, grass, grass, grass, grass, grass, grass, grass,
|
fence_vert, grass, grass, grass, grass, grass, grass, grass, grass,
|
||||||
path_vert
|
grass, fence_vert, path_vert
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
path_vert, grass, grass, grass, grass, grass, grass, grass, grass, grass,
|
fence_vert, grass, grass, grass, grass, grass, grass, grass, grass,
|
||||||
|
grass, fence_vert, path_vert
|
||||||
|
],
|
||||||
|
[
|
||||||
|
Tile::Fence {
|
||||||
|
left: false,
|
||||||
|
right: true,
|
||||||
|
top: true,
|
||||||
|
bottom: false
|
||||||
|
},
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
fence_horiz,
|
||||||
|
Tile::Fence {
|
||||||
|
left: true,
|
||||||
|
right: false,
|
||||||
|
top: true,
|
||||||
|
bottom: false
|
||||||
|
},
|
||||||
path_vert
|
path_vert
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue