Simpler cliffs, camera tilt

This commit is contained in:
Joshua Barretto 2019-06-10 11:50:48 +01:00
parent bac7bad9f7
commit 38c836d6c5
5 changed files with 37 additions and 17 deletions

View File

@ -106,6 +106,11 @@ impl Camera {
self.tgt_dist = (self.tgt_dist + delta).max(0.0);
}
/// Get the distance of the camera from the target
pub fn get_distance(&self) -> f32 {
self.tgt_dist
}
/// Set the distance of the camera from the target (i.e., zoom).
pub fn set_distance(&mut self, dist: f32) {
self.tgt_dist = dist;

View File

@ -115,7 +115,9 @@ impl Scene {
.map_or(Vec3::zero(), |pos| pos.0);
// Alter camera position to match player.
self.camera.set_focus_pos(player_pos + Vec3::unit_z() * 2.1);
let tilt = self.camera.get_orientation().y;
let dist = self.camera.get_distance();
self.camera.set_focus_pos(player_pos + Vec3::unit_z() * (2.1 - tilt.min(0.0) * dist * 0.5));
// Tick camera for interpolation.
self.camera.update(client.state().get_time());

View File

@ -66,19 +66,25 @@ impl<'a> Sampler for BlockGen<'a> {
.mul((chaos - 0.1).max(0.0))
.mul(90.0);
let cliff = (self.world.sim()
.gen_ctx
.warp_nz
.get((wposf.div(Vec3::new(150.0, 150.0, 150.0))).into_array())
as f32)
//.add(0.6)
.mul(130.0);
let cliff = (0.0
+ (self.world.sim()
.gen_ctx
.warp_nz
.get((wposf.div(Vec3::new(350.0, 350.0, 800.0))).into_array())
as f32) * 0.8
+ (self.world.sim()
.gen_ctx
.warp_nz
.get((wposf.div(Vec3::new(100.0, 100.0, 100.0))).into_array())
as f32) * 0.2)
.add(0.6)
.mul(64.0);
let is_cliff = (self.world.sim()
.gen_ctx
.warp_nz
.get((wposf.div(Vec3::new(100.0, 100.0, 100.0))).into_array())
as f32) > 0.0;//4;
.get((wposf.div(Vec3::new(300.0, 300.0, 800.0))).into_array())
as f32) > 0.25;//4;
let height = alt + warp + if is_cliff { cliff } else { 0.0 };
@ -86,6 +92,7 @@ impl<'a> Sampler for BlockGen<'a> {
let air = Block::empty();
let stone = Block::new(2, Rgb::new(200, 220, 255));
let surface_stone = Block::new(1, Rgb::new(200, 220, 255));
let dirt = Block::new(1, Rgb::new(128, 90, 0));
let sand = Block::new(1, Rgb::new(180, 150, 50));
let water = Block::new(1, Rgb::new(100, 150, 255));
@ -93,7 +100,11 @@ impl<'a> Sampler for BlockGen<'a> {
let block = if (wposf.z as f32) < height - 4.0 {
// Underground
Some(stone)
if (wposf.z as f32) > alt {
Some(surface_stone)
} else {
Some(stone)
}
} else if (wposf.z as f32) < height {
// Surface
Some(Block::new(1, surface_color.map(|e| (e * 255.0) as u8)))

View File

@ -4,7 +4,7 @@ use std::sync::Arc;
use vek::*;
lazy_static! {
pub static ref TREES: [Arc<Structure>; 61] = [
pub static ref TREES: [Arc<Structure>; 9] = [
// green oaks
assets::load_map("world/tree/oak_green/1.vox", |s: Structure| s
.with_center(Vec3::new(15, 18, 14)))
@ -34,7 +34,7 @@ lazy_static! {
.with_center(Vec3::new(26, 26, 14)))
.unwrap(),
// green pines
assets::load_map("world/tree/pine_green/1.vox", |s: Structure| s
/*assets::load_map("world/tree/pine_green/1.vox", |s: Structure| s
.with_center(Vec3::new(15, 15, 14)))
.unwrap(),
assets::load_map("world/tree/pine_green/2.vox", |s: Structure| s
@ -196,7 +196,7 @@ lazy_static! {
.with_center(Vec3::new(7, 7, 10)))
.unwrap(),
// palm trees
/*assets::load_map("world/tree/desert_palm/1.vox", |s: Structure| s
assets::load_map("world/tree/desert_palm/1.vox", |s: Structure| s
.with_center(Vec3::new(12, 12, 10)))
.unwrap(),
assets::load_map("world/tree/desert_palm/2.vox", |s: Structure| s

View File

@ -45,13 +45,15 @@ impl<'a> Sampler for ColumnGen<'a> {
let rock = (sim.gen_ctx.small_nz.get(Vec3::new(wposf.x, wposf.y, alt as f64).div(100.0).into_array()) as f32)
.mul(rockiness)
.sub(0.35)
.sub(0.4)
.max(0.0)
.mul(6.0);
.mul(8.0);
let wposf3d = Vec3::new(wposf.x, wposf.y, alt as f64);
let marble = (sim.gen_ctx.hill_nz.get((wposf3d.div(48.0)).into_array()) as f32)
let marble = (0.0
+ (sim.gen_ctx.hill_nz.get((wposf3d.div(48.0)).into_array()) as f32).mul(0.75)
+ (sim.gen_ctx.hill_nz.get((wposf3d.div(3.0)).into_array()) as f32).mul(0.5))
.add(1.0)
.mul(0.5);