2019-01-15 15:13:11 +00:00
|
|
|
use crate::{
|
2019-01-23 20:01:58 +00:00
|
|
|
mesh::Meshable,
|
2019-08-14 21:28:37 +00:00
|
|
|
render::{
|
2019-09-25 12:00:00 +00:00
|
|
|
Consts, FluidPipeline, Globals, Instances, Light, Mesh, Model, Renderer, Shadow,
|
2019-10-17 16:11:55 +00:00
|
|
|
SpriteInstance, SpritePipeline, TerrainLocals, TerrainPipeline, Texture,
|
2019-08-14 21:28:37 +00:00
|
|
|
},
|
2019-01-15 15:13:11 +00:00
|
|
|
};
|
2019-09-01 19:04:03 +00:00
|
|
|
|
2020-02-29 03:59:11 +00:00
|
|
|
use super::SceneData;
|
2019-06-06 07:13:58 +00:00
|
|
|
use common::{
|
2019-08-19 20:09:35 +00:00
|
|
|
assets,
|
|
|
|
figure::Segment,
|
2020-02-07 22:19:25 +00:00
|
|
|
spiral::Spiral2d,
|
2019-10-16 09:57:43 +00:00
|
|
|
terrain::{Block, BlockKind, TerrainChunk},
|
2019-09-03 22:57:25 +00:00
|
|
|
vol::{BaseVol, ReadVol, RectRasterableVol, SampleVol, Vox},
|
|
|
|
volumes::vol_grid_2d::{VolGrid2d, VolGrid2dError},
|
2019-06-06 07:13:58 +00:00
|
|
|
};
|
2019-08-15 22:07:09 +00:00
|
|
|
use crossbeam::channel;
|
2019-08-19 20:09:35 +00:00
|
|
|
use dot_vox::DotVoxData;
|
2020-01-18 04:05:26 +00:00
|
|
|
use hashbrown::HashMap;
|
2020-01-07 16:40:06 +00:00
|
|
|
use std::{f32, fmt::Debug, i32, marker::PhantomData, time::Duration};
|
2020-08-09 16:34:48 +00:00
|
|
|
use tracing::warn;
|
2020-08-10 07:57:01 +00:00
|
|
|
use treeculler::{BVol, Frustum, AABB};
|
2019-05-17 17:54:56 +00:00
|
|
|
use vek::*;
|
2019-01-15 15:13:11 +00:00
|
|
|
|
2019-10-16 09:57:43 +00:00
|
|
|
struct TerrainChunkData {
|
2019-01-15 15:13:11 +00:00
|
|
|
// GPU data
|
2019-09-24 15:43:51 +00:00
|
|
|
load_time: f32,
|
2019-08-14 21:28:37 +00:00
|
|
|
opaque_model: Model<TerrainPipeline>,
|
2019-10-16 09:57:43 +00:00
|
|
|
fluid_model: Option<Model<FluidPipeline>>,
|
2019-08-21 17:22:05 +00:00
|
|
|
sprite_instances: HashMap<(BlockKind, usize), Instances<SpriteInstance>>,
|
2019-01-15 15:13:11 +00:00
|
|
|
locals: Consts<TerrainLocals>,
|
2019-08-19 20:09:35 +00:00
|
|
|
|
2019-06-06 09:04:37 +00:00
|
|
|
visible: bool,
|
|
|
|
z_bounds: (f32, f32),
|
2019-11-19 19:43:30 +00:00
|
|
|
frustum_last_plane_index: u8,
|
2019-01-15 15:13:11 +00:00
|
|
|
}
|
|
|
|
|
2019-01-23 20:01:58 +00:00
|
|
|
struct ChunkMeshState {
|
2019-05-17 17:44:30 +00:00
|
|
|
pos: Vec2<i32>,
|
2019-01-23 20:01:58 +00:00
|
|
|
started_tick: u64,
|
2019-07-04 14:38:55 +00:00
|
|
|
active_worker: Option<u64>,
|
2019-01-23 20:01:58 +00:00
|
|
|
}
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
/// A type produced by mesh worker threads corresponding to the position and
|
|
|
|
/// mesh of a chunk.
|
2019-01-23 20:01:58 +00:00
|
|
|
struct MeshWorkerResponse {
|
2019-05-17 17:44:30 +00:00
|
|
|
pos: Vec2<i32>,
|
2019-06-06 09:04:37 +00:00
|
|
|
z_bounds: (f32, f32),
|
2019-08-14 21:28:37 +00:00
|
|
|
opaque_mesh: Mesh<TerrainPipeline>,
|
|
|
|
fluid_mesh: Mesh<FluidPipeline>,
|
2019-08-21 17:22:05 +00:00
|
|
|
sprite_instances: HashMap<(BlockKind, usize), Vec<SpriteInstance>>,
|
2019-01-23 20:01:58 +00:00
|
|
|
started_tick: u64,
|
|
|
|
}
|
|
|
|
|
2019-08-21 12:47:29 +00:00
|
|
|
struct SpriteConfig {
|
2019-08-21 17:22:05 +00:00
|
|
|
variations: usize,
|
2019-08-21 12:47:29 +00:00
|
|
|
wind_sway: f32, // 1.0 is normal
|
|
|
|
}
|
|
|
|
|
|
|
|
fn sprite_config_for(kind: BlockKind) -> Option<SpriteConfig> {
|
|
|
|
match kind {
|
2020-04-18 18:28:19 +00:00
|
|
|
BlockKind::Window1 => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Window2 => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Window3 => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Window4 => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2019-08-21 17:22:05 +00:00
|
|
|
BlockKind::LargeCactus => Some(SpriteConfig {
|
2020-01-25 11:14:02 +00:00
|
|
|
variations: 2,
|
2019-08-21 17:22:05 +00:00
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::BarrelCactus => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2019-09-01 19:04:03 +00:00
|
|
|
BlockKind::RoundCactus => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::ShortCactus => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::MedFlatCactus => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::ShortFlatCactus => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2019-08-21 17:22:05 +00:00
|
|
|
|
|
|
|
BlockKind::BlueFlower => Some(SpriteConfig {
|
2020-06-15 16:39:21 +00:00
|
|
|
variations: 10,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.1,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
|
|
|
BlockKind::PinkFlower => Some(SpriteConfig {
|
2019-09-01 19:04:03 +00:00
|
|
|
variations: 4,
|
|
|
|
wind_sway: 0.1,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
2020-06-15 16:39:21 +00:00
|
|
|
BlockKind::PurpleFlower => Some(SpriteConfig {
|
2020-06-25 21:12:31 +00:00
|
|
|
variations: 8,
|
2020-06-15 16:39:21 +00:00
|
|
|
wind_sway: 0.1,
|
|
|
|
}),
|
2019-08-21 17:22:05 +00:00
|
|
|
BlockKind::RedFlower => Some(SpriteConfig {
|
2020-06-25 21:12:31 +00:00
|
|
|
variations: 5,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.1,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
|
|
|
BlockKind::WhiteFlower => Some(SpriteConfig {
|
2020-06-15 16:39:21 +00:00
|
|
|
variations: 5,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.1,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
|
|
|
BlockKind::YellowFlower => Some(SpriteConfig {
|
2020-06-15 16:39:21 +00:00
|
|
|
variations: 2,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.1,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
|
|
|
BlockKind::Sunflower => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.1,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
|
|
|
|
|
|
|
BlockKind::LongGrass => Some(SpriteConfig {
|
2019-09-01 19:04:03 +00:00
|
|
|
variations: 7,
|
|
|
|
wind_sway: 0.8,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
|
|
|
BlockKind::MediumGrass => Some(SpriteConfig {
|
|
|
|
variations: 5,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.5,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
|
|
|
BlockKind::ShortGrass => Some(SpriteConfig {
|
|
|
|
variations: 5,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.1,
|
2019-08-21 17:22:05 +00:00
|
|
|
}),
|
2020-06-25 21:12:31 +00:00
|
|
|
BlockKind::LargeGrass => Some(SpriteConfig {
|
2020-08-09 16:34:48 +00:00
|
|
|
variations: 1,
|
2020-06-25 21:12:31 +00:00
|
|
|
wind_sway: 0.5,
|
|
|
|
}),
|
2019-08-21 17:22:05 +00:00
|
|
|
|
|
|
|
BlockKind::Apple => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2019-09-01 19:04:03 +00:00
|
|
|
BlockKind::Mushroom => Some(SpriteConfig {
|
2020-06-25 21:12:31 +00:00
|
|
|
variations: 17,
|
2019-09-01 19:04:03 +00:00
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Liana => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.05,
|
|
|
|
}),
|
2019-09-25 20:22:39 +00:00
|
|
|
BlockKind::Velorite => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2019-10-17 20:59:36 +00:00
|
|
|
BlockKind::VeloriteFrag => Some(SpriteConfig {
|
|
|
|
variations: 10,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2019-10-09 19:28:05 +00:00
|
|
|
BlockKind::Chest => Some(SpriteConfig {
|
|
|
|
variations: 4,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-01-25 11:14:02 +00:00
|
|
|
BlockKind::Welwitch => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.1,
|
|
|
|
}),
|
|
|
|
BlockKind::Pumpkin => Some(SpriteConfig {
|
2020-04-20 19:52:46 +00:00
|
|
|
variations: 7,
|
2020-01-25 11:14:02 +00:00
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::LingonBerry => Some(SpriteConfig {
|
|
|
|
variations: 3,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::LeafyPlant => Some(SpriteConfig {
|
|
|
|
variations: 10,
|
|
|
|
wind_sway: 0.4,
|
|
|
|
}),
|
|
|
|
BlockKind::Fern => Some(SpriteConfig {
|
2020-06-15 16:39:21 +00:00
|
|
|
variations: 13,
|
2020-01-25 11:14:02 +00:00
|
|
|
wind_sway: 0.4,
|
|
|
|
}),
|
|
|
|
BlockKind::DeadBush => Some(SpriteConfig {
|
|
|
|
variations: 4,
|
|
|
|
wind_sway: 0.1,
|
|
|
|
}),
|
2020-04-10 19:08:21 +00:00
|
|
|
BlockKind::Ember => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
2020-04-11 00:13:48 +00:00
|
|
|
wind_sway: 0.8,
|
2020-04-10 19:08:21 +00:00
|
|
|
}),
|
2020-04-13 23:13:03 +00:00
|
|
|
BlockKind::Corn => Some(SpriteConfig {
|
|
|
|
variations: 6,
|
|
|
|
wind_sway: 0.4,
|
|
|
|
}),
|
|
|
|
BlockKind::WheatYellow => Some(SpriteConfig {
|
|
|
|
variations: 10,
|
|
|
|
wind_sway: 0.4,
|
|
|
|
}),
|
|
|
|
BlockKind::WheatGreen => Some(SpriteConfig {
|
|
|
|
variations: 10,
|
|
|
|
wind_sway: 0.4,
|
|
|
|
}),
|
|
|
|
BlockKind::Cabbage => Some(SpriteConfig {
|
|
|
|
variations: 3,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-04-17 23:29:01 +00:00
|
|
|
BlockKind::Flax => Some(SpriteConfig {
|
|
|
|
variations: 6,
|
|
|
|
wind_sway: 0.4,
|
|
|
|
}),
|
|
|
|
BlockKind::Carrot => Some(SpriteConfig {
|
|
|
|
variations: 6,
|
|
|
|
wind_sway: 0.1,
|
|
|
|
}),
|
|
|
|
BlockKind::Tomato => Some(SpriteConfig {
|
|
|
|
variations: 5,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Radish => Some(SpriteConfig {
|
|
|
|
variations: 5,
|
|
|
|
wind_sway: 0.1,
|
|
|
|
}),
|
2020-04-18 18:28:19 +00:00
|
|
|
BlockKind::Turnip => Some(SpriteConfig {
|
|
|
|
variations: 6,
|
|
|
|
wind_sway: 0.1,
|
|
|
|
}),
|
2020-04-13 23:13:03 +00:00
|
|
|
BlockKind::Coconut => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-04-19 17:59:59 +00:00
|
|
|
BlockKind::Scarecrow => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-04-20 19:52:46 +00:00
|
|
|
BlockKind::StreetLamp => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-06-27 21:08:21 +00:00
|
|
|
BlockKind::StreetLampTall => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-04-20 19:52:46 +00:00
|
|
|
BlockKind::Door => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-06-27 21:08:21 +00:00
|
|
|
BlockKind::Bed => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Bench => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::ChairSingle => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::ChairDouble => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::CoatRack => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Crate => Some(SpriteConfig {
|
|
|
|
variations: 7,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::DrawerLarge => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::DrawerMedium => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::DrawerSmall => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::DungeonWallDecor => Some(SpriteConfig {
|
|
|
|
variations: 10,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::HangingBasket => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::HangingSign => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::WallLamp => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Planter => Some(SpriteConfig {
|
|
|
|
variations: 7,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Shelf => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::TableSide => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::TableDining => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::TableDouble => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::WardrobeDouble => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::WardrobeSingle => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Pot => Some(SpriteConfig {
|
|
|
|
variations: 2,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-07-14 20:11:39 +00:00
|
|
|
BlockKind::Stones => Some(SpriteConfig {
|
|
|
|
variations: 3,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::Twigs => Some(SpriteConfig {
|
|
|
|
variations: 3,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::ShinyGem => Some(SpriteConfig {
|
|
|
|
variations: 3,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-07-30 23:18:33 +00:00
|
|
|
BlockKind::DropGate => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
|
|
|
BlockKind::DropGateBottom => Some(SpriteConfig {
|
|
|
|
variations: 1,
|
|
|
|
wind_sway: 0.0,
|
|
|
|
}),
|
2020-08-10 07:57:01 +00:00
|
|
|
BlockKind::GrassSnow => Some(SpriteConfig {
|
|
|
|
variations: 10,
|
|
|
|
wind_sway: 0.2,
|
|
|
|
}),
|
2019-08-21 12:47:29 +00:00
|
|
|
_ => None,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-17 09:22:32 +00:00
|
|
|
/// Function executed by worker threads dedicated to chunk meshing.
|
2020-06-10 19:47:36 +00:00
|
|
|
#[allow(clippy::or_fun_call)] // TODO: Pending review in #587
|
2020-06-11 18:44:03 +00:00
|
|
|
|
2019-09-03 22:57:25 +00:00
|
|
|
fn mesh_worker<V: BaseVol<Vox = Block> + RectRasterableVol + ReadVol + Debug>(
|
2019-05-17 17:44:30 +00:00
|
|
|
pos: Vec2<i32>,
|
2019-06-06 09:04:37 +00:00
|
|
|
z_bounds: (f32, f32),
|
2019-01-23 20:01:58 +00:00
|
|
|
started_tick: u64,
|
2019-09-03 22:57:25 +00:00
|
|
|
volume: <VolGrid2d<V> as SampleVol<Aabr<i32>>>::Sample,
|
2019-05-17 17:44:30 +00:00
|
|
|
range: Aabb<i32>,
|
2019-01-23 20:01:58 +00:00
|
|
|
) -> MeshWorkerResponse {
|
2019-08-14 21:28:37 +00:00
|
|
|
let (opaque_mesh, fluid_mesh) = volume.generate_mesh(range);
|
2019-01-23 20:01:58 +00:00
|
|
|
MeshWorkerResponse {
|
|
|
|
pos,
|
2019-06-06 09:04:37 +00:00
|
|
|
z_bounds,
|
2019-08-14 21:28:37 +00:00
|
|
|
opaque_mesh,
|
|
|
|
fluid_mesh,
|
2019-08-19 20:09:35 +00:00
|
|
|
// Extract sprite locations from volume
|
|
|
|
sprite_instances: {
|
2019-08-19 23:31:11 +00:00
|
|
|
let mut instances = HashMap::new();
|
2019-08-19 20:09:35 +00:00
|
|
|
|
2019-09-03 22:57:25 +00:00
|
|
|
for x in 0..V::RECT_SIZE.x as i32 {
|
|
|
|
for y in 0..V::RECT_SIZE.y as i32 {
|
2019-08-19 20:09:35 +00:00
|
|
|
for z in z_bounds.0 as i32..z_bounds.1 as i32 + 1 {
|
2019-09-03 22:57:25 +00:00
|
|
|
let wpos = Vec3::from(pos * V::RECT_SIZE.map(|e: u32| e as i32))
|
|
|
|
+ Vec3::new(x, y, z);
|
2019-08-19 20:09:35 +00:00
|
|
|
|
2020-04-20 14:50:33 +00:00
|
|
|
let block = volume.get(wpos).ok().copied().unwrap_or(Block::empty());
|
2019-08-21 12:47:29 +00:00
|
|
|
|
2020-04-20 14:50:33 +00:00
|
|
|
if let Some(cfg) = sprite_config_for(block.kind()) {
|
2020-01-11 20:38:30 +00:00
|
|
|
let seed = wpos.x as u64 * 3
|
|
|
|
+ wpos.y as u64 * 7
|
|
|
|
+ wpos.x as u64 * wpos.y as u64; // Awful PRNG
|
2020-04-23 00:37:16 +00:00
|
|
|
let ori = block.get_ori().unwrap_or((seed % 4) as u8 * 2);
|
2019-08-21 15:22:49 +00:00
|
|
|
|
|
|
|
let instance = SpriteInstance::new(
|
|
|
|
Mat4::identity()
|
2020-04-20 14:50:33 +00:00
|
|
|
.rotated_z(f32::consts::PI * 0.25 * ori as f32)
|
2019-08-21 15:22:49 +00:00
|
|
|
.translated_3d(
|
2019-08-19 23:31:11 +00:00
|
|
|
wpos.map(|e| e as f32) + Vec3::new(0.5, 0.5, 0.0),
|
|
|
|
),
|
2019-08-21 15:22:49 +00:00
|
|
|
Rgb::broadcast(1.0),
|
|
|
|
cfg.wind_sway,
|
2019-08-21 12:47:29 +00:00
|
|
|
);
|
2019-08-21 15:22:49 +00:00
|
|
|
|
|
|
|
instances
|
2020-04-20 14:50:33 +00:00
|
|
|
.entry((block.kind(), seed as usize % cfg.variations))
|
2020-06-11 18:44:03 +00:00
|
|
|
.or_insert_with(Vec::new)
|
2019-08-21 15:22:49 +00:00
|
|
|
.push(instance);
|
2019-08-19 20:09:35 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
instances
|
|
|
|
},
|
2019-01-23 20:01:58 +00:00
|
|
|
started_tick,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-09-03 22:57:25 +00:00
|
|
|
pub struct Terrain<V: RectRasterableVol> {
|
2019-10-16 09:57:43 +00:00
|
|
|
chunks: HashMap<Vec2<i32>, TerrainChunkData>,
|
2019-01-23 20:01:58 +00:00
|
|
|
|
|
|
|
// The mpsc sender and receiver used for talking to meshing worker threads.
|
2020-02-01 20:39:39 +00:00
|
|
|
// We keep the sender component for no reason other than to clone it and send it to new
|
|
|
|
// workers.
|
2019-08-15 22:07:09 +00:00
|
|
|
mesh_send_tmp: channel::Sender<MeshWorkerResponse>,
|
|
|
|
mesh_recv: channel::Receiver<MeshWorkerResponse>,
|
2019-08-11 19:52:23 +00:00
|
|
|
mesh_todo: HashMap<Vec2<i32>, ChunkMeshState>,
|
2019-08-19 20:09:35 +00:00
|
|
|
|
|
|
|
// GPU data
|
2020-04-24 14:20:16 +00:00
|
|
|
sprite_models: HashMap<(BlockKind, usize), Vec<Model<SpritePipeline>>>,
|
2019-11-17 22:41:00 +00:00
|
|
|
waves: Texture,
|
2019-09-03 22:57:25 +00:00
|
|
|
|
|
|
|
phantom: PhantomData<V>,
|
2019-01-15 15:13:11 +00:00
|
|
|
}
|
|
|
|
|
2019-09-03 22:57:25 +00:00
|
|
|
impl<V: RectRasterableVol> Terrain<V> {
|
2020-06-10 19:47:36 +00:00
|
|
|
#[allow(clippy::float_cmp)] // TODO: Pending review in #587
|
2019-08-19 20:09:35 +00:00
|
|
|
pub fn new(renderer: &mut Renderer) -> Self {
|
2020-02-01 20:39:39 +00:00
|
|
|
// Create a new mpsc (Multiple Produced, Single Consumer) pair for communicating
|
|
|
|
// with worker threads that are meshing chunks.
|
2019-08-15 22:07:09 +00:00
|
|
|
let (send, recv) = channel::unbounded();
|
2019-01-23 20:01:58 +00:00
|
|
|
|
2020-04-25 12:26:09 +00:00
|
|
|
let mut make_models = |s, offset, lod_axes: Vec3<f32>| {
|
2020-04-25 14:49:06 +00:00
|
|
|
let scaled = [1.0, 0.8, 0.6, 0.4, 0.2];
|
2020-04-24 14:20:16 +00:00
|
|
|
scaled
|
|
|
|
.iter()
|
2020-04-25 13:04:30 +00:00
|
|
|
.map(|lod_scale| {
|
|
|
|
if *lod_scale == 1.0 {
|
|
|
|
Vec3::broadcast(1.0)
|
|
|
|
} else {
|
|
|
|
lod_axes * *lod_scale + lod_axes.map(|e| if e == 0.0 { 1.0 } else { 0.0 })
|
|
|
|
}
|
2020-04-25 12:26:09 +00:00
|
|
|
})
|
2020-04-24 14:20:16 +00:00
|
|
|
.map(|lod_scale| {
|
|
|
|
renderer
|
|
|
|
.create_model(
|
|
|
|
&Meshable::<SpritePipeline, SpritePipeline>::generate_mesh(
|
|
|
|
&Segment::from(assets::load_expect::<DotVoxData>(s).as_ref())
|
|
|
|
.scaled_by(lod_scale),
|
|
|
|
(offset * lod_scale, Vec3::one() / lod_scale),
|
|
|
|
)
|
|
|
|
.0,
|
|
|
|
)
|
|
|
|
.unwrap()
|
|
|
|
})
|
|
|
|
.collect::<Vec<_>>()
|
2019-08-19 23:31:11 +00:00
|
|
|
};
|
2019-08-19 20:09:35 +00:00
|
|
|
|
2019-01-15 15:13:11 +00:00
|
|
|
Self {
|
2019-08-11 19:52:23 +00:00
|
|
|
chunks: HashMap::default(),
|
2019-01-23 20:01:58 +00:00
|
|
|
mesh_send_tmp: send,
|
|
|
|
mesh_recv: recv,
|
2019-08-11 19:52:23 +00:00
|
|
|
mesh_todo: HashMap::default(),
|
2019-08-19 23:31:11 +00:00
|
|
|
sprite_models: vec![
|
2020-04-18 18:28:19 +00:00
|
|
|
// Windows
|
|
|
|
(
|
|
|
|
(BlockKind::Window1, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.window.window-0",
|
2020-04-20 14:50:33 +00:00
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Window2, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.window.window-1",
|
2020-04-20 14:50:33 +00:00
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Window3, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.window.window-2",
|
2020-04-20 14:50:33 +00:00
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Window4, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.window.window-3",
|
2020-04-20 14:50:33 +00:00
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
// Cacti
|
|
|
|
(
|
|
|
|
(BlockKind::LargeCactus, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.cacti.large_cactus",
|
2019-10-04 18:27:12 +00:00
|
|
|
Vec3::new(-13.5, -5.5, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
(
|
|
|
|
(BlockKind::LargeCactus, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.cacti.tall",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::BarrelCactus, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.cacti.barrel_cactus",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::RoundCactus, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.cacti.cactus_round",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ShortCactus, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.cacti.cactus_short",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::MedFlatCactus, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.cacti.flat_cactus_med",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ShortFlatCactus, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.cacti.flat_cactus_short",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
// Fruit
|
|
|
|
(
|
|
|
|
(BlockKind::Apple, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.fruit.apple",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
// Flowers
|
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue_3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue_4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue_5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
2019-10-04 18:27:12 +00:00
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-04 18:27:12 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue_6",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-04 18:27:12 +00:00
|
|
|
),
|
|
|
|
),
|
2019-10-17 20:59:36 +00:00
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue_7",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
2020-06-15 16:39:21 +00:00
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 7),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue-8",
|
|
|
|
Vec3::new(-5.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 8),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue-9",
|
|
|
|
Vec3::new(-4.0, -3.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::BlueFlower, 9),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_blue-10",
|
|
|
|
Vec3::new(-1.5, -1.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::PinkFlower, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_pink_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PinkFlower, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_pink_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PinkFlower, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_pink_3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PinkFlower, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_pink_4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
2020-06-15 16:39:21 +00:00
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple-2",
|
|
|
|
Vec3::new(-5.0, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple-3",
|
|
|
|
Vec3::new(-3.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 3),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple-4",
|
|
|
|
Vec3::new(-5.0, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2020-06-25 21:12:31 +00:00
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 4),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple-5",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 5),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple-6",
|
|
|
|
Vec3::new(-4.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 6),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple-7",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::PurpleFlower, 7),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_purple-8",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::RedFlower, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_red_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::RedFlower, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_red_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
2019-10-17 20:59:36 +00:00
|
|
|
(
|
|
|
|
(BlockKind::RedFlower, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_red_3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
2020-06-15 16:39:21 +00:00
|
|
|
(
|
|
|
|
(BlockKind::RedFlower, 3),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_red-4",
|
|
|
|
Vec3::new(-6.5, -6.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2020-06-25 21:12:31 +00:00
|
|
|
(
|
|
|
|
(BlockKind::RedFlower, 4),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_red-5",
|
|
|
|
Vec3::new(-3.5, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::WhiteFlower, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_white_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
2019-10-02 10:05:17 +00:00
|
|
|
(
|
|
|
|
(BlockKind::WhiteFlower, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-02 10:05:17 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_white_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-02 10:05:17 +00:00
|
|
|
),
|
|
|
|
),
|
2020-06-15 16:39:21 +00:00
|
|
|
(
|
|
|
|
(BlockKind::WhiteFlower, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_white-3",
|
|
|
|
Vec3::new(-1.5, -1.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WhiteFlower, 3),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_white-4",
|
|
|
|
Vec3::new(-5.0, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WhiteFlower, 4),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_white-5",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::YellowFlower, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-06-15 16:39:21 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.flower_yellow-1",
|
2019-09-01 19:04:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
2020-06-15 16:39:21 +00:00
|
|
|
(
|
|
|
|
(BlockKind::YellowFlower, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.flowers.flower_yellow-0",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Sunflower, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.sunflower_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Sunflower, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.flowers.sunflower_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
// Grass
|
2020-06-25 21:12:31 +00:00
|
|
|
(
|
|
|
|
(BlockKind::LargeGrass, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_large-0",
|
|
|
|
Vec3::new(-2.0, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_large-1",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_large-2",
|
|
|
|
Vec3::new(-5.5, -5.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_long_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_long_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_long_3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_long_4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_long_5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_long_6",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LongGrass, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_long_7",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::MediumGrass, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_med_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::MediumGrass, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_med_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::MediumGrass, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_med_3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::MediumGrass, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_med_4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::MediumGrass, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_med_5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ShortGrass, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_short_1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ShortGrass, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_short_2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ShortGrass, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_short_3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-21 17:22:05 +00:00
|
|
|
),
|
2019-08-19 23:31:11 +00:00
|
|
|
(
|
2019-08-21 17:22:05 +00:00
|
|
|
(BlockKind::ShortGrass, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-05 17:28:33 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_short_4",
|
2019-09-01 19:04:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-19 23:31:11 +00:00
|
|
|
),
|
|
|
|
(
|
2019-08-21 17:22:05 +00:00
|
|
|
(BlockKind::ShortGrass, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.grass.grass_short_5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-0",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-6",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 7),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-7",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 8),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-8",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 9),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-9",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
2019-10-27 22:22:40 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 10),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-27 22:22:40 +00:00
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-10",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-06-25 21:12:31 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 11),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-11",
|
|
|
|
Vec3::new(-8.0, -8.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 12),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-12",
|
|
|
|
Vec3::new(-5.0, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 13),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-13",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 14),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-14",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 15),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-15",
|
|
|
|
Vec3::new(-1.5, -1.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Mushroom, 16),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.mushrooms.mushroom-16",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
2019-10-27 22:22:40 +00:00
|
|
|
),
|
|
|
|
),
|
2019-09-01 19:04:03 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Liana, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.lianas.liana-0",
|
|
|
|
Vec3::new(-1.5, -0.5, -88.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.5,
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Liana, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-09-01 19:04:03 +00:00
|
|
|
"voxygen.voxel.sprite.lianas.liana-1",
|
|
|
|
Vec3::new(-1.0, -0.5, -55.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.5,
|
2019-09-01 19:04:03 +00:00
|
|
|
),
|
2019-08-19 23:31:11 +00:00
|
|
|
),
|
2019-09-25 20:22:39 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Velorite, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-02 10:05:17 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_ore",
|
|
|
|
Vec3::new(-5.0, -5.0, -5.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-09-25 20:22:39 +00:00
|
|
|
),
|
|
|
|
),
|
2019-10-17 20:59:36 +00:00
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_1",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_2",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_3",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_4",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_5",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_6",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_7",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 7),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_8",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 8),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_9",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::VeloriteFrag, 9),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-17 20:59:36 +00:00
|
|
|
"voxygen.voxel.sprite.velorite.velorite_10",
|
|
|
|
Vec3::new(-3.0, -5.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-17 20:59:36 +00:00
|
|
|
),
|
|
|
|
),
|
2019-10-09 19:28:05 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Chest, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-09 19:28:05 +00:00
|
|
|
"voxygen.voxel.sprite.chests.chest",
|
|
|
|
Vec3::new(-7.0, -5.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-09 19:28:05 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Chest, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-09 19:28:05 +00:00
|
|
|
"voxygen.voxel.sprite.chests.chest_gold",
|
|
|
|
Vec3::new(-7.0, -5.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-09 19:28:05 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Chest, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-09 19:28:05 +00:00
|
|
|
"voxygen.voxel.sprite.chests.chest_dark",
|
|
|
|
Vec3::new(-7.0, -5.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-09 19:28:05 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Chest, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2019-10-09 19:28:05 +00:00
|
|
|
"voxygen.voxel.sprite.chests.chest_vines",
|
|
|
|
Vec3::new(-7.0, -5.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2019-10-09 19:28:05 +00:00
|
|
|
),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
//Welwitch
|
|
|
|
(
|
|
|
|
(BlockKind::Welwitch, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.welwitch.1",
|
|
|
|
Vec3::new(-15.0, -17.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
//Pumpkins
|
|
|
|
(
|
|
|
|
(BlockKind::Pumpkin, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.pumpkin.1",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Pumpkin, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.pumpkin.2",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Pumpkin, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.pumpkin.3",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Pumpkin, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.pumpkin.4",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Pumpkin, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.pumpkin.5",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
2020-04-20 19:52:46 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Pumpkin, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-20 19:52:46 +00:00
|
|
|
"voxygen.voxel.sprite.pumpkin.6",
|
|
|
|
Vec3::new(-7.0, -6.5, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-20 19:52:46 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Pumpkin, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-20 19:52:46 +00:00
|
|
|
"voxygen.voxel.sprite.pumpkin.7",
|
|
|
|
Vec3::new(-7.0, -9.5, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-20 19:52:46 +00:00
|
|
|
),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
//Lingonberries
|
|
|
|
(
|
|
|
|
(BlockKind::LingonBerry, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.lingonberry.1",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LingonBerry, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.lingonberry.2",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LingonBerry, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.lingonberry.3",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
// Leafy Plants
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.1",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.2",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.3",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.4",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.5",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.6",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.7",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 7),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.8",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 8),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.9",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::LeafyPlant, 9),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.leafy_plant.10",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
// Ferns
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 0),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.1",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 1),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.2",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 2),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.3",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 3),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.4",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 4),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.5",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 5),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.6",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 6),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.7",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 7),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.8",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 8),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.9",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 9),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.10",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 10),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.11",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Fern, 11),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.12",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
2020-06-15 16:39:21 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Fern, 12),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ferns.fern-0",
|
|
|
|
Vec3::new(-6.5, -11.5, 0.0),
|
|
|
|
Vec3::unit_z(),
|
|
|
|
),
|
|
|
|
),
|
2020-01-25 11:14:02 +00:00
|
|
|
// Dead Bush
|
|
|
|
(
|
|
|
|
(BlockKind::DeadBush, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.dead_bush.1",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DeadBush, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.dead_bush.2",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DeadBush, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.dead_bush.3",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DeadBush, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.dead_bush.4",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
// Blueberries
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.1",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.2",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.3",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.4",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.5",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.6",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.7",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 7),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.8",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Blueberry, 8),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-01-25 11:14:02 +00:00
|
|
|
"voxygen.voxel.sprite.blueberry.9",
|
|
|
|
Vec3::new(-6.0, -6.0, -0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-01-25 11:14:02 +00:00
|
|
|
),
|
|
|
|
),
|
2020-04-10 19:08:21 +00:00
|
|
|
// Ember
|
|
|
|
(
|
|
|
|
(BlockKind::Ember, 0),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.ember.1",
|
|
|
|
Vec3::new(-7.0, -7.0, -2.9),
|
|
|
|
Vec3::new(1.0, 1.0, 0.0),
|
|
|
|
),
|
2020-04-10 19:08:21 +00:00
|
|
|
),
|
2020-04-13 23:13:03 +00:00
|
|
|
// Corn
|
|
|
|
(
|
|
|
|
(BlockKind::Corn, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.corn.corn-0",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Corn, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.corn.corn-1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Corn, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.corn.corn-2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Corn, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.corn.corn-3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Corn, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.corn.corn-4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Corn, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.corn.corn-5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
// Yellow Wheat
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-0",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-6",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 7),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-7",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 8),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-8",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatYellow, 9),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_yellow.wheat-9",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
// Green Wheat
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-0",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-1",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-2",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-3",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-4",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-5",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 6),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-6",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 7),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-7",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 8),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-8",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WheatGreen, 9),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-14 00:50:58 +00:00
|
|
|
"voxygen.voxel.sprite.wheat_green.wheat-9",
|
2020-04-13 23:13:03 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
// Cabbage
|
|
|
|
(
|
2020-04-14 00:50:58 +00:00
|
|
|
(BlockKind::Cabbage, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.cabbage.cabbage-0",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
2020-04-14 00:50:58 +00:00
|
|
|
(BlockKind::Cabbage, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.cabbage.cabbage-1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
2020-04-14 00:50:58 +00:00
|
|
|
(BlockKind::Cabbage, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.cabbage.cabbage-2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
2020-04-17 23:29:01 +00:00
|
|
|
// Flax
|
|
|
|
(
|
|
|
|
(BlockKind::Flax, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.flax.flax-0",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Flax, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.flax.flax-1",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Flax, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.flax.flax-2",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Flax, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.flax.flax-3",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Flax, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.flax.flax-4",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Flax, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.flax.flax-5",
|
|
|
|
Vec3::new(-6.0, -6.0, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z() * 0.7,
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
// Carrot
|
|
|
|
(
|
|
|
|
(BlockKind::Carrot, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.carrot.0",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Carrot, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.carrot.1",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Carrot, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.carrot.2",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Carrot, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.carrot.3",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Carrot, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.carrot.4",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Carrot, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.carrot.5",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Tomato, 0),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.tomato.0",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Tomato, 1),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.tomato.1",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Tomato, 2),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.tomato.2",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Tomato, 3),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.tomato.3",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Tomato, 4),
|
2020-04-25 12:26:09 +00:00
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.tomato.4",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
2020-04-18 18:28:19 +00:00
|
|
|
// Radish
|
2020-04-17 23:29:01 +00:00
|
|
|
(
|
|
|
|
(BlockKind::Radish, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.radish.0",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Radish, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.radish.1",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Radish, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.radish.2",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Radish, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.radish.3",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Radish, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-17 23:29:01 +00:00
|
|
|
"voxygen.voxel.sprite.radish.4",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-17 23:29:01 +00:00
|
|
|
),
|
|
|
|
),
|
2020-04-18 18:28:19 +00:00
|
|
|
// Turnip
|
|
|
|
(
|
|
|
|
(BlockKind::Turnip, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.turnip.turnip-0",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Turnip, 1),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.turnip.turnip-1",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Turnip, 2),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.turnip.turnip-2",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Turnip, 3),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.turnip.turnip-3",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Turnip, 4),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.turnip.turnip-4",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Turnip, 5),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-18 18:28:19 +00:00
|
|
|
"voxygen.voxel.sprite.turnip.turnip-5",
|
|
|
|
Vec3::new(-5.5, -5.5, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-18 18:28:19 +00:00
|
|
|
),
|
|
|
|
),
|
2020-04-13 23:13:03 +00:00
|
|
|
// Coconut
|
|
|
|
(
|
2020-04-14 00:21:35 +00:00
|
|
|
(BlockKind::Coconut, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-13 23:13:03 +00:00
|
|
|
"voxygen.voxel.sprite.fruit.coconut",
|
2020-04-30 20:43:24 +00:00
|
|
|
Vec3::new(-6.0, -6.0, 2.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-13 23:13:03 +00:00
|
|
|
),
|
|
|
|
),
|
2020-04-19 17:59:59 +00:00
|
|
|
// Scarecrow
|
|
|
|
(
|
|
|
|
(BlockKind::Scarecrow, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-19 17:59:59 +00:00
|
|
|
"voxygen.voxel.sprite.misc.scarecrow",
|
|
|
|
Vec3::new(-9.5, -3.0, -0.25),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z(),
|
2020-04-19 17:59:59 +00:00
|
|
|
),
|
|
|
|
),
|
2020-04-20 19:52:46 +00:00
|
|
|
// Street Light
|
|
|
|
(
|
|
|
|
(BlockKind::StreetLamp, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-20 19:52:46 +00:00
|
|
|
"voxygen.voxel.sprite.misc.street_lamp",
|
|
|
|
Vec3::new(-4.5, -4.5, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::unit_z(),
|
2020-04-20 19:52:46 +00:00
|
|
|
),
|
|
|
|
),
|
2020-06-27 21:08:21 +00:00
|
|
|
(
|
|
|
|
(BlockKind::StreetLampTall, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.street_lamp-0",
|
|
|
|
Vec3::new(-10.5, -10.5, 0.0),
|
|
|
|
Vec3::unit_z(),
|
|
|
|
),
|
|
|
|
),
|
2020-04-20 19:52:46 +00:00
|
|
|
// Door
|
|
|
|
(
|
|
|
|
(BlockKind::Door, 0),
|
2020-04-24 14:20:16 +00:00
|
|
|
make_models(
|
2020-04-20 19:52:46 +00:00
|
|
|
"voxygen.voxel.sprite.door.door-0",
|
2020-04-22 09:07:50 +00:00
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
2020-04-25 12:26:09 +00:00
|
|
|
Vec3::one(),
|
2020-04-20 19:52:46 +00:00
|
|
|
),
|
|
|
|
),
|
2020-06-27 21:08:21 +00:00
|
|
|
// Bed
|
|
|
|
(
|
|
|
|
(BlockKind::Bed, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.bed-0",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-9.5, -14.5, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// Bench
|
|
|
|
(
|
|
|
|
(BlockKind::Bench, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.bench-0",
|
|
|
|
Vec3::new(-14.0, -4.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// Chair
|
|
|
|
(
|
|
|
|
(BlockKind::ChairSingle, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.chair_single-0",
|
|
|
|
Vec3::new(-5.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ChairSingle, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.chair_single-1",
|
|
|
|
Vec3::new(-5.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ChairDouble, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.chair_double-0",
|
|
|
|
Vec3::new(-9.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ChairDouble, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.chair_double-1",
|
|
|
|
Vec3::new(-9.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// CoatRack
|
|
|
|
(
|
|
|
|
(BlockKind::CoatRack, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.coatrack-0",
|
|
|
|
Vec3::new(-6.5, -6.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::CoatRack, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.coatrack-1",
|
|
|
|
Vec3::new(-6.5, -6.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// Crate
|
|
|
|
(
|
|
|
|
(BlockKind::Crate, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.crate-0",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Crate, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.crate-1",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Crate, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.crate-2",
|
|
|
|
Vec3::new(-3.0, -3.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Crate, 3),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.crate-3",
|
|
|
|
Vec3::new(-6.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Crate, 4),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.crate-4",
|
|
|
|
Vec3::new(-6.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Crate, 5),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.crate-5",
|
|
|
|
Vec3::new(-5.5, -3.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Crate, 6),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.crate-6",
|
|
|
|
Vec3::new(-4.5, -3.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// DrawerLarge
|
|
|
|
(
|
|
|
|
(BlockKind::DrawerLarge, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.drawer_large-0",
|
|
|
|
Vec3::new(-11.5, -5.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DrawerLarge, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.drawer_large-1",
|
|
|
|
Vec3::new(-11.5, -5.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// DrawerMedium
|
|
|
|
(
|
|
|
|
(BlockKind::DrawerMedium, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.drawer_medium-0",
|
|
|
|
Vec3::new(-11.0, -5.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DrawerMedium, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.drawer_medium-1",
|
|
|
|
Vec3::new(-11.0, -5.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// DrawerSmall
|
|
|
|
(
|
|
|
|
(BlockKind::DrawerSmall, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.drawer_small-0",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DrawerSmall, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.drawer_small-1",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// DungeonWallDecor
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-0",
|
|
|
|
Vec3::new(-5.5, -1.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-1",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-2",
|
|
|
|
Vec3::new(-5.5, -3.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 3),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-3",
|
|
|
|
Vec3::new(-1.5, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 4),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-4",
|
|
|
|
Vec3::new(-5.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 5),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-5",
|
|
|
|
Vec3::new(-5.5, -0.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 6),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-6",
|
|
|
|
Vec3::new(-5.5, -1.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 7),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-7",
|
|
|
|
Vec3::new(-5.5, -1.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 8),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-8",
|
|
|
|
Vec3::new(-5.5, -1.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DungeonWallDecor, 9),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.dungeon_wall-9",
|
|
|
|
Vec3::new(-1.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// HangingBasket
|
|
|
|
(
|
|
|
|
(BlockKind::HangingBasket, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.hanging_basket-0",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-6.5, -3.5, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::HangingBasket, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.hanging_basket-1",
|
|
|
|
Vec3::new(-9.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// HangingSign
|
|
|
|
(
|
|
|
|
(BlockKind::HangingSign, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.hanging_sign-0",
|
2020-08-12 13:19:26 +00:00
|
|
|
Vec3::new(-3.5, -28.0, -4.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// WallLamp
|
|
|
|
(
|
|
|
|
(BlockKind::WallLamp, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.lamp_wall-0",
|
|
|
|
Vec3::new(-5.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WallLamp, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.lamp_wall-1",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-10.5, -9.0, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// Planter
|
|
|
|
(
|
|
|
|
(BlockKind::Planter, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.planter-0",
|
|
|
|
Vec3::new(-6.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Planter, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.planter-1",
|
|
|
|
Vec3::new(-13.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Planter, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.planter-2",
|
|
|
|
Vec3::new(-6.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Planter, 3),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.planter-3",
|
|
|
|
Vec3::new(-6.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Planter, 4),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.planter-4",
|
|
|
|
Vec3::new(-6.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Planter, 5),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.planter-5",
|
|
|
|
Vec3::new(-6.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Planter, 6),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.planter-6",
|
|
|
|
Vec3::new(-7.5, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
//Pot
|
|
|
|
(
|
|
|
|
(BlockKind::Pot, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.pot-0",
|
|
|
|
Vec3::new(-3.5, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Pot, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.pot-1",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// Shelf
|
|
|
|
(
|
|
|
|
(BlockKind::Shelf, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.shelf-0",
|
|
|
|
Vec3::new(-14.5, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Shelf, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.shelf-1",
|
|
|
|
Vec3::new(-13.5, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// TableSide
|
|
|
|
(
|
|
|
|
(BlockKind::TableSide, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.table_side-0",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::TableSide, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.table_side-1",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// TableDining
|
|
|
|
(
|
|
|
|
(BlockKind::TableDining, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.table_dining-0",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-8.5, -8.5, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::TableDining, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.table_dining-1",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-8.5, -8.5, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// TableDouble
|
|
|
|
(
|
|
|
|
(BlockKind::TableDouble, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.table_double-0",
|
|
|
|
Vec3::new(-18.5, -11.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// WardrobeSingle
|
|
|
|
(
|
|
|
|
(BlockKind::WardrobeSingle, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.wardrobe_single-0",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-5.5, -6.0, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WardrobeSingle, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.wardrobe_single-1",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-5.5, -6.5, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
//WardrobeDouble
|
|
|
|
(
|
|
|
|
(BlockKind::WardrobeDouble, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.wardrobe_double-0",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-10.5, -6.5, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::WardrobeDouble, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.furniture.wardrobe_double-1",
|
2020-06-28 18:42:35 +00:00
|
|
|
Vec3::new(-10.5, -6.0, 0.0),
|
2020-06-27 21:08:21 +00:00
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2020-07-14 20:11:39 +00:00
|
|
|
/* Stones */
|
|
|
|
(
|
|
|
|
(BlockKind::Stones, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.rocks.rock-0",
|
|
|
|
Vec3::new(-3.0, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Stones, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.rocks.rock-1",
|
|
|
|
Vec3::new(-4.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Stones, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.rocks.rock-2",
|
|
|
|
Vec3::new(-4.5, -4.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
/* Twigs */
|
|
|
|
(
|
|
|
|
(BlockKind::Twigs, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.twigs.twigs-0",
|
|
|
|
Vec3::new(-3.5, -3.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Twigs, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.twigs.twigs-1",
|
|
|
|
Vec3::new(-2.0, -1.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::Twigs, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.twigs.twigs-2",
|
|
|
|
Vec3::new(-4.0, -4.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// Shiny Gems
|
|
|
|
(
|
|
|
|
(BlockKind::ShinyGem, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.gem.gem_blue",
|
|
|
|
Vec3::new(-2.0, -3.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ShinyGem, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.gem.gem_green",
|
|
|
|
Vec3::new(-2.0, -3.0, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::ShinyGem, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.gem.gem_red",
|
|
|
|
Vec3::new(-3.0, -2.0, -2.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2020-07-30 23:18:33 +00:00
|
|
|
// Drop Gate Parts
|
|
|
|
(
|
|
|
|
(BlockKind::DropGate, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.castle.drop_gate_bars-0",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::DropGateBottom, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.castle.drop_gate_bottom-0",
|
|
|
|
Vec3::new(-5.5, -5.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2020-08-10 07:57:01 +00:00
|
|
|
// Snow covered Grass
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 0),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_0",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 1),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_1",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 2),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_2",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 3),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_3",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 4),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_4",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 5),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_5",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 6),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_6",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 7),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_7",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 8),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_8",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
(BlockKind::GrassSnow, 9),
|
|
|
|
make_models(
|
|
|
|
"voxygen.voxel.sprite.grass.grass_snow_9",
|
|
|
|
Vec3::new(-2.5, -2.5, 0.0),
|
|
|
|
Vec3::one(),
|
|
|
|
),
|
|
|
|
),
|
2019-08-19 23:31:11 +00:00
|
|
|
]
|
|
|
|
.into_iter()
|
|
|
|
.collect(),
|
2019-10-17 16:11:55 +00:00
|
|
|
waves: renderer
|
|
|
|
.create_texture(
|
|
|
|
&assets::load_expect("voxygen.texture.waves"),
|
2019-11-05 15:08:54 +00:00
|
|
|
Some(gfx::texture::FilterMethod::Trilinear),
|
2019-10-17 16:11:55 +00:00
|
|
|
Some(gfx::texture::WrapMode::Tile),
|
|
|
|
)
|
|
|
|
.expect("Failed to create wave texture"),
|
2019-09-03 22:57:25 +00:00
|
|
|
phantom: PhantomData,
|
2019-01-15 15:13:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-01-23 20:01:58 +00:00
|
|
|
/// Maintain terrain data. To be called once per tick.
|
2020-06-23 06:52:04 +00:00
|
|
|
#[allow(clippy::for_loops_over_fallibles)] // TODO: Pending review in #587
|
2020-06-10 19:47:36 +00:00
|
|
|
#[allow(clippy::len_zero)] // TODO: Pending review in #587
|
2019-06-06 09:04:37 +00:00
|
|
|
pub fn maintain(
|
|
|
|
&mut self,
|
|
|
|
renderer: &mut Renderer,
|
2020-02-29 03:59:11 +00:00
|
|
|
scene_data: &SceneData,
|
2019-06-06 09:04:37 +00:00
|
|
|
focus_pos: Vec3<f32>,
|
|
|
|
loaded_distance: f32,
|
|
|
|
view_mat: Mat4<f32>,
|
|
|
|
proj_mat: Mat4<f32>,
|
|
|
|
) {
|
2020-02-29 03:59:11 +00:00
|
|
|
let current_tick = scene_data.tick;
|
|
|
|
let current_time = scene_data.state.get_time();
|
2019-01-23 20:01:58 +00:00
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
// Add any recently created or changed chunks to the list of chunks to be
|
|
|
|
// meshed.
|
2020-02-29 03:59:11 +00:00
|
|
|
for (modified, pos) in scene_data
|
|
|
|
.state
|
2019-07-20 15:37:01 +00:00
|
|
|
.terrain_changes()
|
2019-07-01 13:36:45 +00:00
|
|
|
.modified_chunks
|
2019-04-29 20:37:19 +00:00
|
|
|
.iter()
|
2019-07-01 13:36:45 +00:00
|
|
|
.map(|c| (true, c))
|
2019-07-01 13:38:45 +00:00
|
|
|
.chain(
|
2020-02-29 03:59:11 +00:00
|
|
|
scene_data
|
|
|
|
.state
|
2019-07-20 15:37:01 +00:00
|
|
|
.terrain_changes()
|
2019-07-01 13:38:45 +00:00
|
|
|
.new_chunks
|
|
|
|
.iter()
|
|
|
|
.map(|c| (false, c)),
|
|
|
|
)
|
2019-01-23 20:01:58 +00:00
|
|
|
{
|
|
|
|
// TODO: ANOTHER PROBLEM HERE!
|
2020-02-01 20:39:39 +00:00
|
|
|
// What happens if the block on the edge of a chunk gets modified? We need to
|
|
|
|
// spawn a mesh worker to remesh its neighbour(s) too since their
|
|
|
|
// ambient occlusion and face elision information changes too!
|
2019-04-23 14:49:14 +00:00
|
|
|
for i in -1..2 {
|
|
|
|
for j in -1..2 {
|
2019-05-17 17:44:30 +00:00
|
|
|
let pos = pos + Vec2::new(i, j);
|
|
|
|
|
2019-07-01 13:36:45 +00:00
|
|
|
if !self.chunks.contains_key(&pos) || modified {
|
2019-05-17 17:44:30 +00:00
|
|
|
let mut neighbours = true;
|
|
|
|
for i in -1..2 {
|
|
|
|
for j in -1..2 {
|
2020-02-29 03:59:11 +00:00
|
|
|
neighbours &= scene_data
|
|
|
|
.state
|
2019-05-17 17:44:30 +00:00
|
|
|
.terrain()
|
|
|
|
.get_key(pos + Vec2::new(i, j))
|
|
|
|
.is_some();
|
2019-05-13 12:08:17 +00:00
|
|
|
}
|
2019-05-17 17:44:30 +00:00
|
|
|
}
|
2019-05-13 12:08:17 +00:00
|
|
|
|
2019-05-17 17:44:30 +00:00
|
|
|
if neighbours {
|
2020-02-01 20:39:39 +00:00
|
|
|
self.mesh_todo.insert(pos, ChunkMeshState {
|
2019-05-17 17:44:30 +00:00
|
|
|
pos,
|
2020-02-01 20:39:39 +00:00
|
|
|
started_tick: current_tick,
|
|
|
|
active_worker: None,
|
|
|
|
});
|
2019-04-23 14:49:14 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-01-23 20:01:58 +00:00
|
|
|
}
|
|
|
|
}
|
2019-07-20 15:37:01 +00:00
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
// Add the chunks belonging to recently changed blocks to the list of chunks to
|
|
|
|
// be meshed
|
2020-02-29 03:59:11 +00:00
|
|
|
for pos in scene_data
|
|
|
|
.state
|
2019-07-20 15:37:01 +00:00
|
|
|
.terrain_changes()
|
|
|
|
.modified_blocks
|
|
|
|
.iter()
|
|
|
|
.map(|(p, _)| *p)
|
|
|
|
{
|
2019-12-23 06:02:00 +00:00
|
|
|
// Handle block changes on chunk borders
|
2020-01-18 04:05:26 +00:00
|
|
|
// Remesh all neighbours because we have complex lighting now
|
2020-02-01 20:39:39 +00:00
|
|
|
// TODO: if lighting is on the server this can be updated to only remesh when
|
|
|
|
// lighting changes in that neighbouring chunk or if the block
|
|
|
|
// change was on the border
|
2019-07-20 15:37:01 +00:00
|
|
|
for x in -1..2 {
|
|
|
|
for y in -1..2 {
|
|
|
|
let neighbour_pos = pos + Vec3::new(x, y, 0);
|
2020-02-29 03:59:11 +00:00
|
|
|
let neighbour_chunk_pos = scene_data.state.terrain().pos_key(neighbour_pos);
|
2019-07-20 15:37:01 +00:00
|
|
|
|
2020-06-29 12:43:16 +00:00
|
|
|
// Only remesh if this chunk has all its neighbors
|
|
|
|
let mut neighbours = true;
|
|
|
|
for i in -1..2 {
|
|
|
|
for j in -1..2 {
|
|
|
|
neighbours &= scene_data
|
|
|
|
.state
|
|
|
|
.terrain()
|
|
|
|
.get_key(neighbour_chunk_pos + Vec2::new(i, j))
|
|
|
|
.is_some();
|
2020-01-18 04:05:26 +00:00
|
|
|
}
|
2019-07-20 15:37:01 +00:00
|
|
|
}
|
2020-06-29 12:43:16 +00:00
|
|
|
if neighbours {
|
|
|
|
self.mesh_todo.insert(neighbour_chunk_pos, ChunkMeshState {
|
|
|
|
pos: neighbour_chunk_pos,
|
|
|
|
started_tick: current_tick,
|
|
|
|
active_worker: None,
|
|
|
|
});
|
|
|
|
}
|
2019-07-20 15:37:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-17 09:22:32 +00:00
|
|
|
// Remove any models for chunks that have been recently removed.
|
2020-02-29 03:59:11 +00:00
|
|
|
for pos in &scene_data.state.terrain_changes().removed_chunks {
|
2019-01-23 20:01:58 +00:00
|
|
|
self.chunks.remove(pos);
|
2019-05-10 19:32:42 +00:00
|
|
|
self.mesh_todo.remove(pos);
|
2019-01-23 20:01:58 +00:00
|
|
|
}
|
|
|
|
|
2019-07-04 17:13:29 +00:00
|
|
|
for todo in self
|
|
|
|
.mesh_todo
|
2019-05-10 18:20:14 +00:00
|
|
|
.values_mut()
|
2019-07-04 14:38:55 +00:00
|
|
|
.filter(|todo| {
|
|
|
|
todo.active_worker
|
|
|
|
.map(|worker_tick| worker_tick < todo.started_tick)
|
|
|
|
.unwrap_or(true)
|
|
|
|
})
|
2019-07-04 18:03:44 +00:00
|
|
|
.min_by_key(|todo| todo.active_worker.unwrap_or(todo.started_tick))
|
2019-05-10 20:17:46 +00:00
|
|
|
{
|
2020-06-01 00:13:35 +00:00
|
|
|
// TODO: find a alternative!
|
2020-02-29 03:59:11 +00:00
|
|
|
if scene_data.thread_pool.queued_jobs() > 0 {
|
2019-07-04 14:38:55 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
// Find the area of the terrain we want. Because meshing needs to compute things
|
|
|
|
// like ambient occlusion and edge elision, we also need the borders
|
|
|
|
// of the chunk's neighbours too (hence the `- 1` and `+ 1`).
|
2019-05-17 17:44:30 +00:00
|
|
|
let aabr = Aabr {
|
2019-05-10 20:17:46 +00:00
|
|
|
min: todo
|
|
|
|
.pos
|
2019-09-03 22:57:25 +00:00
|
|
|
.map2(VolGrid2d::<V>::chunk_size(), |e, sz| e * sz as i32 - 1),
|
|
|
|
max: todo.pos.map2(VolGrid2d::<V>::chunk_size(), |e, sz| {
|
|
|
|
(e + 1) * sz as i32 + 1
|
|
|
|
}),
|
2019-05-10 20:17:46 +00:00
|
|
|
};
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
// Copy out the chunk data we need to perform the meshing. We do this by taking
|
|
|
|
// a sample of the terrain that includes both the chunk we want and
|
|
|
|
// its neighbours.
|
2020-02-29 03:59:11 +00:00
|
|
|
let volume = match scene_data.state.terrain().sample(aabr) {
|
2019-05-10 20:17:46 +00:00
|
|
|
Ok(sample) => sample,
|
2019-05-17 09:22:32 +00:00
|
|
|
// Either this chunk or its neighbours doesn't yet exist, so we keep it in the
|
|
|
|
// queue to be processed at a later date when we have its neighbours.
|
common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.
The changes include:
* Consistent `Err`/`Error` naming.
* Types are named `...Error`.
* `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
to an upcoming change where a “map” in the game related sense will
be added.
* Add volume iterators. There are two types of them:
* _Position_ iterators obtained from the trait `IntoPosIterator`
using the method
`fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `Vec3<i32>`.
* _Volume_ iterators obtained from the trait `IntoVolIterator`
using the method
`fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
Those traits will usually be implemented by references to volume
types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
type which usually implements several volume traits, such as `Chunk`).
* _Position_ iterators iterate over the positions valid for that
volume.
* _Volume_ iterators do the same but return not only the position
but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
`Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
* `RasterableVol` represents a volume that is compile-time sized and has
its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
because such a volume can be used with `VolGrid3d`.
* `RectRasterableVol` represents a volume that is compile-time sized at
least in x and y direction and has its lower bound at `(0, 0, z)`.
There's no requirement on he lower bound or size in z direction.
The name `RectRasterableVol` was chosen because such a volume can be
used with `VolGrid2d`.
2019-09-03 22:23:29 +00:00
|
|
|
Err(VolGrid2dError::NoSuchChunk) => return,
|
2019-05-10 20:17:46 +00:00
|
|
|
_ => panic!("Unhandled edge case"),
|
|
|
|
};
|
|
|
|
|
2019-05-17 21:19:32 +00:00
|
|
|
// The region to actually mesh
|
2019-06-04 17:19:40 +00:00
|
|
|
let min_z = volume
|
2019-05-17 21:19:32 +00:00
|
|
|
.iter()
|
2019-06-04 17:19:40 +00:00
|
|
|
.fold(i32::MAX, |min, (_, chunk)| chunk.get_min_z().min(min));
|
|
|
|
let max_z = volume
|
2019-05-17 21:19:32 +00:00
|
|
|
.iter()
|
2019-06-04 17:19:40 +00:00
|
|
|
.fold(i32::MIN, |max, (_, chunk)| chunk.get_max_z().max(max));
|
2019-05-17 21:19:32 +00:00
|
|
|
|
|
|
|
let aabb = Aabb {
|
2020-01-22 03:12:17 +00:00
|
|
|
min: Vec3::from(aabr.min) + Vec3::unit_z() * (min_z - 2),
|
|
|
|
max: Vec3::from(aabr.max) + Vec3::unit_z() * (max_z + 2),
|
2019-05-17 21:19:32 +00:00
|
|
|
};
|
|
|
|
|
2019-05-17 09:22:32 +00:00
|
|
|
// Clone various things so that they can be moved into the thread.
|
2019-05-10 20:17:46 +00:00
|
|
|
let send = self.mesh_send_tmp.clone();
|
|
|
|
let pos = todo.pos;
|
|
|
|
|
2019-05-17 09:22:32 +00:00
|
|
|
// Queue the worker thread.
|
2019-07-04 14:38:55 +00:00
|
|
|
let started_tick = todo.started_tick;
|
2020-02-29 03:59:11 +00:00
|
|
|
scene_data.thread_pool.execute(move || {
|
2019-06-06 09:04:37 +00:00
|
|
|
let _ = send.send(mesh_worker(
|
|
|
|
pos,
|
|
|
|
(min_z as f32, max_z as f32),
|
2019-07-04 14:38:55 +00:00
|
|
|
started_tick,
|
2019-06-06 09:04:37 +00:00
|
|
|
volume,
|
|
|
|
aabb,
|
|
|
|
));
|
2019-01-23 20:01:58 +00:00
|
|
|
});
|
2019-07-04 14:38:55 +00:00
|
|
|
todo.active_worker = Some(todo.started_tick);
|
2019-05-10 20:17:46 +00:00
|
|
|
}
|
2019-01-23 20:01:58 +00:00
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
// Receive a chunk mesh from a worker thread and upload it to the GPU, then
|
|
|
|
// store it. Only pull out one chunk per frame to avoid an unacceptable
|
|
|
|
// amount of blocking lag due to the GPU upload. That still gives us a
|
|
|
|
// 60 chunks / second budget to play with.
|
2019-04-25 16:52:08 +00:00
|
|
|
if let Ok(response) = self.mesh_recv.recv_timeout(Duration::new(0, 0)) {
|
2019-05-10 18:20:14 +00:00
|
|
|
match self.mesh_todo.get(&response.pos) {
|
2019-01-23 20:01:58 +00:00
|
|
|
// It's the mesh we want, insert the newly finished model into the terrain model
|
2019-05-17 09:22:32 +00:00
|
|
|
// data structure (convert the mesh to a model first of course).
|
2019-07-04 14:38:55 +00:00
|
|
|
Some(todo) if response.started_tick <= todo.started_tick => {
|
2019-09-24 15:43:51 +00:00
|
|
|
let load_time = self
|
|
|
|
.chunks
|
|
|
|
.get(&response.pos)
|
|
|
|
.map(|chunk| chunk.load_time)
|
|
|
|
.unwrap_or(current_time as f32);
|
2020-02-01 20:39:39 +00:00
|
|
|
self.chunks.insert(response.pos, TerrainChunkData {
|
|
|
|
load_time,
|
|
|
|
opaque_model: renderer
|
|
|
|
.create_model(&response.opaque_mesh)
|
|
|
|
.expect("Failed to upload chunk mesh to the GPU!"),
|
|
|
|
fluid_model: if response.fluid_mesh.vertices().len() > 0 {
|
|
|
|
Some(
|
|
|
|
renderer
|
|
|
|
.create_model(&response.fluid_mesh)
|
|
|
|
.expect("Failed to upload chunk mesh to the GPU!"),
|
|
|
|
)
|
|
|
|
} else {
|
|
|
|
None
|
2019-04-29 20:37:19 +00:00
|
|
|
},
|
2020-02-01 20:39:39 +00:00
|
|
|
sprite_instances: response
|
|
|
|
.sprite_instances
|
|
|
|
.into_iter()
|
|
|
|
.map(|(kind, instances)| {
|
|
|
|
(
|
|
|
|
kind,
|
|
|
|
renderer.create_instances(&instances).expect(
|
|
|
|
"Failed to upload chunk sprite instances to the GPU!",
|
|
|
|
),
|
|
|
|
)
|
|
|
|
})
|
|
|
|
.collect(),
|
|
|
|
locals: renderer
|
|
|
|
.create_consts(&[TerrainLocals {
|
|
|
|
model_offs: Vec3::from(
|
|
|
|
response.pos.map2(VolGrid2d::<V>::chunk_size(), |e, sz| {
|
|
|
|
e as f32 * sz as f32
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
.into_array(),
|
|
|
|
load_time,
|
|
|
|
}])
|
|
|
|
.expect("Failed to upload chunk locals to the GPU!"),
|
|
|
|
visible: false,
|
|
|
|
z_bounds: response.z_bounds,
|
|
|
|
frustum_last_plane_index: 0,
|
|
|
|
});
|
2019-07-01 13:36:45 +00:00
|
|
|
|
2019-07-04 14:38:55 +00:00
|
|
|
if response.started_tick == todo.started_tick {
|
|
|
|
self.mesh_todo.remove(&response.pos);
|
|
|
|
}
|
2020-02-01 20:39:39 +00:00
|
|
|
},
|
2019-01-23 20:01:58 +00:00
|
|
|
// Chunk must have been removed, or it was spawned on an old tick. Drop the mesh
|
2019-05-17 09:22:32 +00:00
|
|
|
// since it's either out of date or no longer needed.
|
2020-02-01 20:39:39 +00:00
|
|
|
_ => {},
|
2019-01-23 20:01:58 +00:00
|
|
|
}
|
|
|
|
}
|
2019-01-15 15:13:11 +00:00
|
|
|
|
2019-06-06 09:04:37 +00:00
|
|
|
// Construct view frustum
|
2019-11-19 15:13:33 +00:00
|
|
|
let frustum = Frustum::from_modelview_projection((proj_mat * view_mat).into_col_arrays());
|
2019-06-06 09:04:37 +00:00
|
|
|
|
|
|
|
// Update chunk visibility
|
2019-09-03 22:57:25 +00:00
|
|
|
let chunk_sz = V::RECT_SIZE.x as f32;
|
2019-06-06 09:04:37 +00:00
|
|
|
for (pos, chunk) in &mut self.chunks {
|
|
|
|
let chunk_pos = pos.map(|e| e as f32 * chunk_sz);
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
// Limit focus_pos to chunk bounds and ensure the chunk is within the fog
|
|
|
|
// boundary
|
2019-06-06 09:04:37 +00:00
|
|
|
let nearest_in_chunk = Vec2::from(focus_pos).clamped(chunk_pos, chunk_pos + chunk_sz);
|
|
|
|
let in_range = Vec2::<f32>::from(focus_pos).distance_squared(nearest_in_chunk)
|
|
|
|
< loaded_distance.powf(2.0);
|
|
|
|
|
2019-11-19 15:13:33 +00:00
|
|
|
if !in_range {
|
|
|
|
chunk.visible = in_range;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Ensure the chunk is within the view frustum
|
|
|
|
let chunk_min = [chunk_pos.x, chunk_pos.y, chunk.z_bounds.0];
|
|
|
|
let chunk_max = [
|
|
|
|
chunk_pos.x + chunk_sz,
|
|
|
|
chunk_pos.y + chunk_sz,
|
|
|
|
chunk.z_bounds.1,
|
|
|
|
];
|
|
|
|
|
2020-01-08 17:09:54 +00:00
|
|
|
let (in_frustum, last_plane_index) = AABB::new(chunk_min, chunk_max)
|
|
|
|
.coherent_test_against_frustum(&frustum, chunk.frustum_last_plane_index);
|
2019-06-06 07:13:58 +00:00
|
|
|
|
2019-11-19 19:43:30 +00:00
|
|
|
chunk.frustum_last_plane_index = last_plane_index;
|
2019-11-19 15:13:33 +00:00
|
|
|
chunk.visible = in_frustum;
|
2019-06-06 09:04:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
pub fn chunk_count(&self) -> usize { self.chunks.len() }
|
2020-01-08 17:09:54 +00:00
|
|
|
|
2019-11-19 15:13:33 +00:00
|
|
|
pub fn visible_chunk_count(&self) -> usize {
|
|
|
|
self.chunks.iter().filter(|(_, c)| c.visible).count()
|
|
|
|
}
|
|
|
|
|
2019-07-21 15:04:36 +00:00
|
|
|
pub fn render(
|
|
|
|
&self,
|
|
|
|
renderer: &mut Renderer,
|
|
|
|
globals: &Consts<Globals>,
|
|
|
|
lights: &Consts<Light>,
|
2019-09-25 12:00:00 +00:00
|
|
|
shadows: &Consts<Shadow>,
|
2019-08-19 21:54:16 +00:00
|
|
|
focus_pos: Vec3<f32>,
|
2019-07-21 15:04:36 +00:00
|
|
|
) {
|
2019-10-16 09:57:43 +00:00
|
|
|
let focus_chunk = Vec2::from(focus_pos).map2(TerrainChunk::RECT_SIZE, |e: f32, sz| {
|
|
|
|
(e as i32).div_euclid(sz as i32)
|
|
|
|
});
|
|
|
|
|
|
|
|
let chunks = &self.chunks;
|
|
|
|
let chunk_iter = Spiral2d::new()
|
|
|
|
.scan(0, |n, rpos| {
|
|
|
|
if *n >= chunks.len() {
|
|
|
|
None
|
|
|
|
} else {
|
|
|
|
let pos = focus_chunk + rpos;
|
2020-04-23 15:57:47 +00:00
|
|
|
Some(chunks.get(&pos).map(|c| {
|
|
|
|
*n += 1;
|
|
|
|
(pos, c)
|
|
|
|
}))
|
2019-10-16 09:57:43 +00:00
|
|
|
}
|
|
|
|
})
|
|
|
|
.filter_map(|x| x);
|
|
|
|
|
2019-08-14 21:28:37 +00:00
|
|
|
// Opaque
|
2019-10-16 09:57:43 +00:00
|
|
|
for (_, chunk) in chunk_iter.clone() {
|
2019-08-19 23:31:11 +00:00
|
|
|
if chunk.visible {
|
2019-09-25 12:00:00 +00:00
|
|
|
renderer.render_terrain_chunk(
|
|
|
|
&chunk.opaque_model,
|
|
|
|
globals,
|
|
|
|
&chunk.locals,
|
|
|
|
lights,
|
|
|
|
shadows,
|
|
|
|
);
|
2019-08-25 16:42:18 +00:00
|
|
|
}
|
|
|
|
}
|
2019-11-19 09:17:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn render_translucent(
|
|
|
|
&self,
|
|
|
|
renderer: &mut Renderer,
|
|
|
|
globals: &Consts<Globals>,
|
|
|
|
lights: &Consts<Light>,
|
|
|
|
shadows: &Consts<Shadow>,
|
|
|
|
focus_pos: Vec3<f32>,
|
2020-04-25 13:04:30 +00:00
|
|
|
sprite_render_distance: f32,
|
2019-11-19 09:17:39 +00:00
|
|
|
) {
|
|
|
|
let focus_chunk = Vec2::from(focus_pos).map2(TerrainChunk::RECT_SIZE, |e: f32, sz| {
|
|
|
|
(e as i32).div_euclid(sz as i32)
|
|
|
|
});
|
|
|
|
|
|
|
|
let chunks = &self.chunks;
|
|
|
|
let chunk_iter = Spiral2d::new()
|
|
|
|
.scan(0, |n, rpos| {
|
|
|
|
if *n >= chunks.len() {
|
|
|
|
None
|
|
|
|
} else {
|
|
|
|
let pos = focus_chunk + rpos;
|
2020-04-23 16:09:53 +00:00
|
|
|
Some(chunks.get(&pos).map(|c| {
|
|
|
|
*n += 1;
|
|
|
|
(pos, c)
|
|
|
|
}))
|
2019-11-19 09:17:39 +00:00
|
|
|
}
|
|
|
|
})
|
|
|
|
.filter_map(|x| x);
|
2019-08-19 21:54:16 +00:00
|
|
|
|
2019-08-25 16:42:18 +00:00
|
|
|
// Terrain sprites
|
2019-10-16 09:57:43 +00:00
|
|
|
for (pos, chunk) in chunk_iter.clone() {
|
2019-08-25 16:42:18 +00:00
|
|
|
if chunk.visible {
|
2020-04-25 18:42:42 +00:00
|
|
|
let sprite_low_detail_distance = sprite_render_distance * 0.75;
|
|
|
|
let sprite_mid_detail_distance = sprite_render_distance * 0.5;
|
|
|
|
let sprite_hid_detail_distance = sprite_render_distance * 0.35;
|
|
|
|
let sprite_high_detail_distance = sprite_render_distance * 0.15;
|
2019-08-19 21:54:16 +00:00
|
|
|
|
2019-09-03 22:57:25 +00:00
|
|
|
let chunk_center =
|
|
|
|
pos.map2(V::RECT_SIZE, |e, sz: u32| (e as f32 + 0.5) * sz as f32);
|
2020-04-24 14:20:16 +00:00
|
|
|
let dist_sqrd = Vec2::from(focus_pos).distance_squared(chunk_center);
|
2020-04-25 13:04:30 +00:00
|
|
|
if dist_sqrd < sprite_render_distance.powf(2.0) {
|
2019-08-19 23:31:11 +00:00
|
|
|
for (kind, instances) in &chunk.sprite_instances {
|
2020-08-09 16:34:48 +00:00
|
|
|
if let Some(models) = self.sprite_models.get(&kind) {
|
|
|
|
renderer.render_sprites(
|
|
|
|
if dist_sqrd < sprite_high_detail_distance.powf(2.0) {
|
2020-08-12 13:51:21 +00:00
|
|
|
&models[0]
|
2020-08-09 16:34:48 +00:00
|
|
|
} else if dist_sqrd < sprite_hid_detail_distance.powf(2.0) {
|
2020-08-12 13:51:21 +00:00
|
|
|
&models[1]
|
2020-08-09 16:34:48 +00:00
|
|
|
} else if dist_sqrd < sprite_mid_detail_distance.powf(2.0) {
|
2020-08-12 13:51:21 +00:00
|
|
|
&models[2]
|
2020-08-09 16:34:48 +00:00
|
|
|
} else if dist_sqrd < sprite_low_detail_distance.powf(2.0) {
|
2020-08-12 13:51:21 +00:00
|
|
|
&models[3]
|
2020-08-09 16:34:48 +00:00
|
|
|
} else {
|
2020-08-12 13:51:21 +00:00
|
|
|
&models[4]
|
2020-08-09 16:34:48 +00:00
|
|
|
},
|
|
|
|
globals,
|
|
|
|
&instances,
|
|
|
|
lights,
|
|
|
|
shadows,
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
warn!("Sprite model for {:?} does not exists", kind);
|
|
|
|
}
|
2019-08-19 23:31:11 +00:00
|
|
|
}
|
2019-08-19 21:54:16 +00:00
|
|
|
}
|
2019-08-14 21:28:37 +00:00
|
|
|
}
|
|
|
|
}
|
2019-08-25 08:40:07 +00:00
|
|
|
|
|
|
|
// Translucent
|
2019-10-16 09:57:43 +00:00
|
|
|
chunk_iter
|
|
|
|
.clone()
|
|
|
|
.filter(|(_, chunk)| chunk.visible)
|
|
|
|
.filter_map(|(_, chunk)| {
|
|
|
|
chunk
|
|
|
|
.fluid_model
|
|
|
|
.as_ref()
|
|
|
|
.map(|model| (model, &chunk.locals))
|
|
|
|
})
|
2020-02-11 12:18:08 +00:00
|
|
|
.collect::<Vec<_>>()
|
|
|
|
.into_iter()
|
|
|
|
.rev() // Render back-to-front
|
2019-10-16 09:57:43 +00:00
|
|
|
.for_each(|(model, locals)| {
|
2019-10-17 16:11:55 +00:00
|
|
|
renderer.render_fluid_chunk(model, globals, locals, lights, shadows, &self.waves)
|
2019-10-16 09:57:43 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|