mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
More sprites, ui fixes, lianas
This commit is contained in:
parent
8d0c91dc94
commit
8c39a4751b
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -3155,6 +3155,7 @@ name = "veloren-voxygen"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"backtrace 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"conrod_core 0.63.0 (git+https://gitlab.com/veloren/conrod.git)",
|
||||
"conrod_winit 0.63.0 (git+https://gitlab.com/veloren/conrod.git)",
|
||||
"crossbeam 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -34,11 +34,11 @@ void main() {
|
||||
sin(tick.x * 1.5 + f_pos.y * 0.1) * sin(tick.x * 0.35),
|
||||
sin(tick.x * 1.5 + f_pos.x * 0.1) * sin(tick.x * 0.25),
|
||||
0.0
|
||||
) * pow(v_pos.z * SCALE, 1.3) * 0.2;
|
||||
) * pow(abs(v_pos.z) * SCALE, 1.3) * 0.2;
|
||||
|
||||
f_norm = (inst_mat * vec4(v_norm, 0)).xyz;
|
||||
|
||||
f_col = v_col * inst_col;
|
||||
f_col = srgb_to_linear(v_col) * srgb_to_linear(inst_col);
|
||||
|
||||
f_light = 1.0;
|
||||
|
||||
|
BIN
assets/voxygen/voxel/sprite/cacti/cactus_round.vox
Normal file
BIN
assets/voxygen/voxel/sprite/cacti/cactus_round.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/cacti/cactus_short.vox
Normal file
BIN
assets/voxygen/voxel/sprite/cacti/cactus_short.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/cacti/flat_cactus_med.vox
Normal file
BIN
assets/voxygen/voxel/sprite/cacti/flat_cactus_med.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/cacti/flat_cactus_short.vox
Normal file
BIN
assets/voxygen/voxel/sprite/cacti/flat_cactus_short.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/flowers/flower_blue_3.vox
Normal file
BIN
assets/voxygen/voxel/sprite/flowers/flower_blue_3.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/flowers/flower_blue_4.vox
Normal file
BIN
assets/voxygen/voxel/sprite/flowers/flower_blue_4.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/flowers/flower_blue_5.vox
Normal file
BIN
assets/voxygen/voxel/sprite/flowers/flower_blue_5.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/flowers/flower_pink_4.vox
Normal file
BIN
assets/voxygen/voxel/sprite/flowers/flower_pink_4.vox
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/flowers/flower_red_2.vox
Normal file
BIN
assets/voxygen/voxel/sprite/flowers/flower_red_2.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/grass/grass_long_6.vox
Normal file
BIN
assets/voxygen/voxel/sprite/grass/grass_long_6.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/grass/grass_long_7.vox
Normal file
BIN
assets/voxygen/voxel/sprite/grass/grass_long_7.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lianas/liana-0.vox
Normal file
BIN
assets/voxygen/voxel/sprite/lianas/liana-0.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lianas/liana-1.vox
Normal file
BIN
assets/voxygen/voxel/sprite/lianas/liana-1.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-0.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-0.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-1.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-1.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-2.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-2.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-3.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-3.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-4.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-4.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-5.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-5.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-6.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-6.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-7.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-7.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-8.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-8.vox
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-9.vox
Normal file
BIN
assets/voxygen/voxel/sprite/mushrooms/mushroom-9.vox
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -12,6 +12,10 @@ pub enum BlockKind {
|
||||
Water,
|
||||
LargeCactus,
|
||||
BarrelCactus,
|
||||
RoundCactus,
|
||||
ShortCactus,
|
||||
MedFlatCactus,
|
||||
ShortFlatCactus,
|
||||
BlueFlower,
|
||||
PinkFlower,
|
||||
PurpleFlower,
|
||||
@ -23,6 +27,8 @@ pub enum BlockKind {
|
||||
MediumGrass,
|
||||
ShortGrass,
|
||||
Apple,
|
||||
Mushroom,
|
||||
Liana,
|
||||
}
|
||||
|
||||
impl BlockKind {
|
||||
@ -31,6 +37,10 @@ impl BlockKind {
|
||||
BlockKind::Air => true,
|
||||
BlockKind::LargeCactus => false,
|
||||
BlockKind::BarrelCactus => true,
|
||||
BlockKind::RoundCactus => true,
|
||||
BlockKind::ShortCactus => true,
|
||||
BlockKind::MedFlatCactus => true,
|
||||
BlockKind::ShortFlatCactus => true,
|
||||
BlockKind::BlueFlower => true,
|
||||
BlockKind::PinkFlower => true,
|
||||
BlockKind::PurpleFlower => true,
|
||||
@ -42,6 +52,8 @@ impl BlockKind {
|
||||
BlockKind::MediumGrass => true,
|
||||
BlockKind::ShortGrass => true,
|
||||
BlockKind::Apple => true,
|
||||
BlockKind::Mushroom => true,
|
||||
BlockKind::Liana => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
@ -59,6 +71,10 @@ impl BlockKind {
|
||||
BlockKind::Water => false,
|
||||
BlockKind::LargeCactus => false,
|
||||
BlockKind::BarrelCactus => false,
|
||||
BlockKind::RoundCactus => false,
|
||||
BlockKind::ShortCactus => false,
|
||||
BlockKind::MedFlatCactus => false,
|
||||
BlockKind::ShortFlatCactus => false,
|
||||
BlockKind::BlueFlower => false,
|
||||
BlockKind::PinkFlower => false,
|
||||
BlockKind::PurpleFlower => false,
|
||||
@ -70,6 +86,8 @@ impl BlockKind {
|
||||
BlockKind::MediumGrass => false,
|
||||
BlockKind::ShortGrass => false,
|
||||
BlockKind::Apple => false,
|
||||
BlockKind::Mushroom => false,
|
||||
BlockKind::Liana => false,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
@ -80,6 +98,10 @@ impl BlockKind {
|
||||
BlockKind::Water => false,
|
||||
BlockKind::LargeCactus => true,
|
||||
BlockKind::BarrelCactus => true,
|
||||
BlockKind::RoundCactus => true,
|
||||
BlockKind::ShortCactus => true,
|
||||
BlockKind::MedFlatCactus => true,
|
||||
BlockKind::ShortFlatCactus => true,
|
||||
BlockKind::BlueFlower => false,
|
||||
BlockKind::PinkFlower => false,
|
||||
BlockKind::PurpleFlower => false,
|
||||
@ -91,6 +113,8 @@ impl BlockKind {
|
||||
BlockKind::MediumGrass => false,
|
||||
BlockKind::ShortGrass => false,
|
||||
BlockKind::Apple => true,
|
||||
BlockKind::Mushroom => false,
|
||||
BlockKind::Liana => false,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
|
@ -15,11 +15,13 @@ pub enum StructureBlock {
|
||||
TemperateLeaves,
|
||||
PineLeaves,
|
||||
Acacia,
|
||||
Mangrove,
|
||||
PalmLeaves,
|
||||
Water,
|
||||
GreenSludge,
|
||||
Fruit,
|
||||
Hollow,
|
||||
Liana,
|
||||
Normal(Rgb<u8>),
|
||||
}
|
||||
|
||||
@ -110,8 +112,10 @@ impl Asset for Structure {
|
||||
2 => StructureBlock::PalmLeaves,
|
||||
3 => StructureBlock::Water,
|
||||
4 => StructureBlock::Acacia,
|
||||
5 => StructureBlock::Mangrove,
|
||||
6 => StructureBlock::GreenSludge,
|
||||
7 => StructureBlock::Fruit,
|
||||
9 => StructureBlock::Liana,
|
||||
15 => StructureBlock::Hollow,
|
||||
index => {
|
||||
let color = palette
|
||||
|
@ -262,9 +262,12 @@ fn handle_kill(server: &mut Server, entity: EcsEntity, _args: String, _action: &
|
||||
fn handle_time(server: &mut Server, entity: EcsEntity, args: String, action: &ChatCommand) {
|
||||
let time = scan_fmt_some!(&args, action.arg_fmt, String);
|
||||
let new_time = match time.as_ref().map(|s| s.as_str()) {
|
||||
Some("night") => NaiveTime::from_hms(0, 0, 0),
|
||||
Some("midnight") => NaiveTime::from_hms(0, 0, 0),
|
||||
Some("night") => NaiveTime::from_hms(20, 0, 0),
|
||||
Some("dawn") => NaiveTime::from_hms(5, 0, 0),
|
||||
Some("day") => NaiveTime::from_hms(12, 0, 0),
|
||||
Some("morning") => NaiveTime::from_hms(8, 0, 0),
|
||||
Some("day") => NaiveTime::from_hms(10, 0, 0),
|
||||
Some("noon") => NaiveTime::from_hms(12, 0, 0),
|
||||
Some("dusk") => NaiveTime::from_hms(17, 0, 0),
|
||||
Some(n) => match n.parse() {
|
||||
Ok(n) => n,
|
||||
@ -797,14 +800,12 @@ fn handle_tell(server: &mut Server, entity: EcsEntity, args: String, action: &Ch
|
||||
.get(entity)
|
||||
.map(|s| s.alias.clone())
|
||||
{
|
||||
server.clients.notify(
|
||||
player,
|
||||
ServerMsg::tell(format!("[{}] tells you:{}", name, msg)),
|
||||
);
|
||||
server.clients.notify(
|
||||
entity,
|
||||
ServerMsg::tell(format!("You tell [{}]:{}", alias, msg)),
|
||||
);
|
||||
server
|
||||
.clients
|
||||
.notify(player, ServerMsg::tell(format!("[{}] tells:{}", name, msg)));
|
||||
server
|
||||
.clients
|
||||
.notify(entity, ServerMsg::tell(format!("To [{}]:{}", alias, msg)));
|
||||
} else {
|
||||
server.clients.notify(
|
||||
entity,
|
||||
|
@ -59,3 +59,4 @@ crossbeam = "0.7.2"
|
||||
heaptrack = "0.3.0"
|
||||
hashbrown = { version = "0.5.0", features = ["serde", "nightly"] }
|
||||
parking_lot = "0.9.0"
|
||||
chrono = "0.4.7"
|
||||
|
@ -18,6 +18,7 @@ use bag::Bag;
|
||||
use buttons::Buttons;
|
||||
use character_window::CharacterWindow;
|
||||
use chat::Chat;
|
||||
use chrono::NaiveTime;
|
||||
use esc_menu::EscMenu;
|
||||
use img_ids::Imgs;
|
||||
use map::Map;
|
||||
@ -94,6 +95,7 @@ widget_ids! {
|
||||
coordinates,
|
||||
velocity,
|
||||
loaded_distance,
|
||||
time,
|
||||
|
||||
// Game Version
|
||||
version,
|
||||
@ -157,7 +159,6 @@ pub enum Event {
|
||||
CrosshairTransp(f32),
|
||||
CrosshairType(CrosshairType),
|
||||
ToggleXpBar(XpBar),
|
||||
ToggleEnBars(EnBars),
|
||||
ToggleBarNumbers(BarNumbers),
|
||||
ToggleShortcutNumbers(ShortcutNumbers),
|
||||
UiScale(ScaleChange),
|
||||
@ -189,11 +190,6 @@ pub enum XpBar {
|
||||
Always,
|
||||
OnGain,
|
||||
}
|
||||
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
||||
pub enum EnBars {
|
||||
Always,
|
||||
OnLoss,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
||||
pub enum BarNumbers {
|
||||
@ -629,6 +625,22 @@ impl Hud {
|
||||
.font_id(self.fonts.opensans)
|
||||
.font_size(14)
|
||||
.set(self.ids.loaded_distance, ui_widgets);
|
||||
// Time
|
||||
let time_in_seconds = client.state().get_time_of_day();
|
||||
let current_time = NaiveTime::from_num_seconds_from_midnight(
|
||||
// Wraps around back to 0s if it exceeds 24 hours (24 hours = 86400s)
|
||||
(time_in_seconds as u64 % 86400) as u32,
|
||||
0,
|
||||
);
|
||||
Text::new(&format!(
|
||||
"Time: {}",
|
||||
current_time.format("%H:%M").to_string()
|
||||
))
|
||||
.color(TEXT_COLOR)
|
||||
.down_from(self.ids.loaded_distance, 5.0)
|
||||
.font_id(self.fonts.opensans)
|
||||
.font_size(14)
|
||||
.set(self.ids.time, ui_widgets);
|
||||
}
|
||||
|
||||
// Add Bag-Space Button.
|
||||
@ -792,9 +804,6 @@ impl Hud {
|
||||
settings_window::Event::ToggleXpBar(xp_bar) => {
|
||||
events.push(Event::ToggleXpBar(xp_bar));
|
||||
}
|
||||
settings_window::Event::ToggleEnBars(en_bars) => {
|
||||
events.push(Event::ToggleEnBars(en_bars));
|
||||
}
|
||||
settings_window::Event::ToggleBarNumbers(bar_numbers) => {
|
||||
events.push(Event::ToggleBarNumbers(bar_numbers));
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
use super::{
|
||||
img_ids::Imgs, BarNumbers, CrosshairType, EnBars, Fonts, ShortcutNumbers, Show, XpBar,
|
||||
TEXT_COLOR,
|
||||
img_ids::Imgs, BarNumbers, CrosshairType, Fonts, ShortcutNumbers, Show, XpBar, TEXT_COLOR,
|
||||
};
|
||||
use crate::{
|
||||
audio::base::Genre,
|
||||
@ -145,7 +144,6 @@ pub enum Event {
|
||||
ToggleHelp,
|
||||
ToggleDebug,
|
||||
ToggleXpBar(XpBar),
|
||||
ToggleEnBars(EnBars),
|
||||
ToggleBarNumbers(BarNumbers),
|
||||
ToggleShortcutNumbers(ShortcutNumbers),
|
||||
ChangeTab(SettingsTab),
|
||||
@ -644,36 +642,6 @@ impl<'a> Widget for SettingsWindow<'a> {
|
||||
.graphics_for(state.ids.show_xpbar_button)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.show_xpbar_text, ui);
|
||||
// Show Health & Energy Bars
|
||||
if Button::image(match self.global_state.settings.gameplay.en_bars {
|
||||
EnBars::Always => self.imgs.checkbox_checked,
|
||||
EnBars::OnLoss => self.imgs.checkbox,
|
||||
})
|
||||
.w_h(18.0, 18.0)
|
||||
.hover_image(match self.global_state.settings.gameplay.en_bars {
|
||||
EnBars::Always => self.imgs.checkbox_checked_mo,
|
||||
EnBars::OnLoss => self.imgs.checkbox_mo,
|
||||
})
|
||||
.press_image(match self.global_state.settings.gameplay.en_bars {
|
||||
EnBars::Always => self.imgs.checkbox_checked,
|
||||
EnBars::OnLoss => self.imgs.checkbox_press,
|
||||
})
|
||||
.down_from(state.ids.show_xpbar_button, 8.0)
|
||||
.set(state.ids.show_bars_button, ui)
|
||||
.was_clicked()
|
||||
{
|
||||
match self.global_state.settings.gameplay.en_bars {
|
||||
EnBars::Always => events.push(Event::ToggleEnBars(EnBars::OnLoss)),
|
||||
EnBars::OnLoss => events.push(Event::ToggleEnBars(EnBars::Always)),
|
||||
}
|
||||
}
|
||||
Text::new("Always show Health and Energy Bars")
|
||||
.right_from(state.ids.show_bars_button, 10.0)
|
||||
.font_size(14)
|
||||
.font_id(self.fonts.opensans)
|
||||
.graphics_for(state.ids.show_bars_button)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.show_bars_text, ui);
|
||||
// Show Shortcut Numbers
|
||||
if Button::image(match self.global_state.settings.gameplay.shortcut_numbers {
|
||||
ShortcutNumbers::On => self.imgs.checkbox_checked,
|
||||
@ -688,7 +656,7 @@ impl<'a> Widget for SettingsWindow<'a> {
|
||||
ShortcutNumbers::On => self.imgs.checkbox_checked,
|
||||
ShortcutNumbers::Off => self.imgs.checkbox_press,
|
||||
})
|
||||
.down_from(state.ids.show_bars_button, 8.0)
|
||||
.down_from(state.ids.show_xpbar_button, 8.0)
|
||||
.set(state.ids.show_shortcuts_button, ui)
|
||||
.was_clicked()
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
use super::{
|
||||
img_ids::Imgs, BarNumbers, EnBars, Fonts, ShortcutNumbers, XpBar, CRITICAL_HP_COLOR,
|
||||
img_ids::Imgs, BarNumbers, Fonts, ShortcutNumbers, XpBar, CRITICAL_HP_COLOR,
|
||||
/*FOCUS_COLOR, RAGE_COLOR,*/ HP_COLOR, LOW_HP_COLOR, MANA_COLOR, TEXT_COLOR, XP_COLOR,
|
||||
};
|
||||
use crate::GlobalState;
|
||||
@ -546,173 +546,80 @@ impl<'a> Widget for Skillbar<'a> {
|
||||
.set(state.ids.slotq_text, ui);
|
||||
};
|
||||
|
||||
// Option to show Energy Bars only on loss or Always
|
||||
match self.global_state.settings.gameplay.en_bars {
|
||||
EnBars::OnLoss => {
|
||||
if { self.stats.health.current() < self.stats.health.maximum() } || {
|
||||
self.stats.energy.current() < self.stats.energy.maximum()
|
||||
} {
|
||||
// Lifebar
|
||||
Image::new(self.imgs.healthbar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.top_left_with_margins_on(state.ids.m1_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.healthbar_bg, ui);
|
||||
Image::new(self.imgs.bar_content)
|
||||
.w_h(97.0 * scale * hp_percentage / 100.0, 16.0 * scale)
|
||||
.color(Some(if hp_percentage <= 20.0 {
|
||||
CRITICAL_HP_COLOR
|
||||
} else if hp_percentage <= 40.0 {
|
||||
LOW_HP_COLOR
|
||||
} else {
|
||||
HP_COLOR
|
||||
}))
|
||||
.top_right_with_margins_on(state.ids.healthbar_bg, 2.0 * scale, 1.0 * scale)
|
||||
.set(state.ids.healthbar_filling, ui);
|
||||
// Energybar
|
||||
Image::new(self.imgs.energybar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.top_right_with_margins_on(state.ids.m2_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.energybar_bg, ui);
|
||||
Image::new(self.imgs.bar_content)
|
||||
.w_h(97.0 * scale * energy_percentage / 100.0, 16.0 * scale)
|
||||
.top_left_with_margins_on(state.ids.energybar_bg, 2.0 * scale, 1.0 * scale)
|
||||
.color(Some(match self.current_resource {
|
||||
ResourceType::Mana => MANA_COLOR,
|
||||
//ResourceType::Focus => FOCUS_COLOR,
|
||||
//ResourceType::Rage => RAGE_COLOR,
|
||||
}))
|
||||
.set(state.ids.energybar_filling, ui);
|
||||
// Bar Text
|
||||
// Values
|
||||
if let BarNumbers::Values = bar_values {
|
||||
let hp_text = format!(
|
||||
"{}/{}",
|
||||
self.stats.health.current() as u32,
|
||||
self.stats.health.maximum() as u32
|
||||
);
|
||||
Text::new(&hp_text)
|
||||
.mid_top_with_margin_on(state.ids.healthbar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.health_text, ui);
|
||||
let energy_text = format!(
|
||||
"{}/{}",
|
||||
self.stats.energy.current() as u32,
|
||||
self.stats.energy.maximum() as u32
|
||||
);
|
||||
Text::new(&energy_text)
|
||||
.mid_top_with_margin_on(state.ids.energybar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.energy_text, ui);
|
||||
}
|
||||
//Percentages
|
||||
if let BarNumbers::Percent = bar_values {
|
||||
let hp_text = format!("{}%", hp_percentage as u32);
|
||||
Text::new(&hp_text)
|
||||
.mid_top_with_margin_on(state.ids.healthbar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.health_text, ui);
|
||||
let energy_text = format!("{}%", energy_percentage as u32);
|
||||
Text::new(&energy_text)
|
||||
.mid_top_with_margin_on(state.ids.energybar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.energy_text, ui);
|
||||
}
|
||||
} else {
|
||||
// Lifebar
|
||||
Image::new(self.imgs.healthbar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.8)))
|
||||
.top_left_with_margins_on(state.ids.m1_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.healthbar_bg, ui);
|
||||
// Energybar
|
||||
Image::new(self.imgs.energybar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.8)))
|
||||
.top_right_with_margins_on(state.ids.m2_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.energybar_bg, ui);
|
||||
}
|
||||
}
|
||||
EnBars::Always => {
|
||||
// Lifebar
|
||||
Image::new(self.imgs.healthbar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.top_left_with_margins_on(state.ids.m1_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.healthbar_bg, ui);
|
||||
Image::new(self.imgs.bar_content)
|
||||
.w_h(97.0 * scale * hp_percentage / 100.0, 16.0 * scale)
|
||||
.color(Some(if hp_percentage <= 20.0 {
|
||||
CRITICAL_HP_COLOR
|
||||
} else if hp_percentage <= 40.0 {
|
||||
LOW_HP_COLOR
|
||||
} else {
|
||||
HP_COLOR
|
||||
}))
|
||||
.top_right_with_margins_on(state.ids.healthbar_bg, 2.0 * scale, 1.0 * scale)
|
||||
.set(state.ids.healthbar_filling, ui);
|
||||
// Energybar
|
||||
Image::new(self.imgs.energybar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.top_right_with_margins_on(state.ids.m2_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.energybar_bg, ui);
|
||||
Image::new(self.imgs.bar_content)
|
||||
.w_h(97.0 * scale * energy_percentage / 100.0, 16.0 * scale)
|
||||
.top_left_with_margins_on(state.ids.energybar_bg, 2.0 * scale, 1.0 * scale)
|
||||
.color(Some(match self.current_resource {
|
||||
ResourceType::Mana => MANA_COLOR,
|
||||
//ResourceType::Focus => FOCUS_COLOR,
|
||||
//ResourceType::Rage => RAGE_COLOR,
|
||||
}))
|
||||
.set(state.ids.energybar_filling, ui);
|
||||
// Bar Text
|
||||
// Values
|
||||
if let BarNumbers::Values = bar_values {
|
||||
let hp_text = format!(
|
||||
"{}/{}",
|
||||
self.stats.health.current() as u32,
|
||||
self.stats.health.maximum() as u32
|
||||
);
|
||||
Text::new(&hp_text)
|
||||
.mid_top_with_margin_on(state.ids.healthbar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.health_text, ui);
|
||||
let energy_text = format!(
|
||||
"{}/{}",
|
||||
self.stats.energy.current() as u32,
|
||||
self.stats.energy.maximum() as u32
|
||||
);
|
||||
Text::new(&energy_text)
|
||||
.mid_top_with_margin_on(state.ids.energybar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.energy_text, ui);
|
||||
}
|
||||
//Percentages
|
||||
if let BarNumbers::Percent = bar_values {
|
||||
let hp_text = format!("{}%", hp_percentage as u32);
|
||||
Text::new(&hp_text)
|
||||
.mid_top_with_margin_on(state.ids.healthbar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.health_text, ui);
|
||||
let energy_text = format!("{}%", energy_percentage as u32);
|
||||
Text::new(&energy_text)
|
||||
.mid_top_with_margin_on(state.ids.energybar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.energy_text, ui);
|
||||
}
|
||||
}
|
||||
// Lifebar
|
||||
Image::new(self.imgs.healthbar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.top_left_with_margins_on(state.ids.m1_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.healthbar_bg, ui);
|
||||
Image::new(self.imgs.bar_content)
|
||||
.w_h(97.0 * scale * hp_percentage / 100.0, 16.0 * scale)
|
||||
.color(Some(if hp_percentage <= 20.0 {
|
||||
CRITICAL_HP_COLOR
|
||||
} else if hp_percentage <= 40.0 {
|
||||
LOW_HP_COLOR
|
||||
} else {
|
||||
HP_COLOR
|
||||
}))
|
||||
.top_right_with_margins_on(state.ids.healthbar_bg, 2.0 * scale, 1.0 * scale)
|
||||
.set(state.ids.healthbar_filling, ui);
|
||||
// Energybar
|
||||
Image::new(self.imgs.energybar_bg)
|
||||
.w_h(100.0 * scale, 20.0 * scale)
|
||||
.top_right_with_margins_on(state.ids.m2_slot, 0.0, -100.0 * scale)
|
||||
.set(state.ids.energybar_bg, ui);
|
||||
Image::new(self.imgs.bar_content)
|
||||
.w_h(97.0 * scale * energy_percentage / 100.0, 16.0 * scale)
|
||||
.top_left_with_margins_on(state.ids.energybar_bg, 2.0 * scale, 1.0 * scale)
|
||||
.color(Some(match self.current_resource {
|
||||
ResourceType::Mana => MANA_COLOR,
|
||||
//ResourceType::Focus => FOCUS_COLOR,
|
||||
//ResourceType::Rage => RAGE_COLOR,
|
||||
}))
|
||||
.set(state.ids.energybar_filling, ui);
|
||||
// Bar Text
|
||||
// Values
|
||||
if let BarNumbers::Values = bar_values {
|
||||
let hp_text = format!(
|
||||
"{}/{}",
|
||||
self.stats.health.current() as u32,
|
||||
self.stats.health.maximum() as u32
|
||||
);
|
||||
Text::new(&hp_text)
|
||||
.mid_top_with_margin_on(state.ids.healthbar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.health_text, ui);
|
||||
let energy_text = format!(
|
||||
"{}/{}",
|
||||
self.stats.energy.current() as u32,
|
||||
self.stats.energy.maximum() as u32
|
||||
);
|
||||
Text::new(&energy_text)
|
||||
.mid_top_with_margin_on(state.ids.energybar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.energy_text, ui);
|
||||
}
|
||||
//Percentages
|
||||
if let BarNumbers::Percent = bar_values {
|
||||
let hp_text = format!("{}%", hp_percentage as u32);
|
||||
Text::new(&hp_text)
|
||||
.mid_top_with_margin_on(state.ids.healthbar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.health_text, ui);
|
||||
let energy_text = format!("{}%", energy_percentage as u32);
|
||||
Text::new(&energy_text)
|
||||
.mid_top_with_margin_on(state.ids.energybar_bg, 5.0 * scale)
|
||||
.font_size(14)
|
||||
.color(TEXT_COLOR)
|
||||
.set(state.ids.energy_text, ui);
|
||||
}
|
||||
|
||||
// Buffs
|
||||
// Add debuff slots above the health bar
|
||||
// Add buff slots above the mana bar
|
||||
|
||||
// Debuffs
|
||||
}
|
||||
|
||||
// Buffs
|
||||
// Add debuff slots above the health bar
|
||||
// Add buff slots above the mana bar
|
||||
|
||||
// Debuffs
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ use crate::{
|
||||
SpritePipeline, TerrainLocals, TerrainPipeline,
|
||||
},
|
||||
};
|
||||
|
||||
use client::Client;
|
||||
use common::{
|
||||
assets,
|
||||
@ -62,49 +63,73 @@ fn sprite_config_for(kind: BlockKind) -> Option<SpriteConfig> {
|
||||
variations: 1,
|
||||
wind_sway: 0.0,
|
||||
}),
|
||||
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,
|
||||
}),
|
||||
|
||||
BlockKind::BlueFlower => Some(SpriteConfig {
|
||||
variations: 2,
|
||||
wind_sway: 0.3,
|
||||
variations: 5,
|
||||
wind_sway: 0.1,
|
||||
}),
|
||||
BlockKind::PinkFlower => Some(SpriteConfig {
|
||||
variations: 3,
|
||||
wind_sway: 0.3,
|
||||
variations: 4,
|
||||
wind_sway: 0.1,
|
||||
}),
|
||||
BlockKind::RedFlower => Some(SpriteConfig {
|
||||
variations: 1,
|
||||
wind_sway: 0.3,
|
||||
variations: 2,
|
||||
wind_sway: 0.1,
|
||||
}),
|
||||
BlockKind::WhiteFlower => Some(SpriteConfig {
|
||||
variations: 1,
|
||||
wind_sway: 0.3,
|
||||
wind_sway: 0.1,
|
||||
}),
|
||||
BlockKind::YellowFlower => Some(SpriteConfig {
|
||||
variations: 1,
|
||||
wind_sway: 0.3,
|
||||
wind_sway: 0.1,
|
||||
}),
|
||||
BlockKind::Sunflower => Some(SpriteConfig {
|
||||
variations: 2,
|
||||
wind_sway: 0.3,
|
||||
wind_sway: 0.1,
|
||||
}),
|
||||
|
||||
BlockKind::LongGrass => Some(SpriteConfig {
|
||||
variations: 5,
|
||||
wind_sway: 1.0,
|
||||
variations: 7,
|
||||
wind_sway: 0.8,
|
||||
}),
|
||||
BlockKind::MediumGrass => Some(SpriteConfig {
|
||||
variations: 5,
|
||||
wind_sway: 1.0,
|
||||
wind_sway: 0.5,
|
||||
}),
|
||||
BlockKind::ShortGrass => Some(SpriteConfig {
|
||||
variations: 5,
|
||||
wind_sway: 1.0,
|
||||
wind_sway: 0.1,
|
||||
}),
|
||||
|
||||
BlockKind::Apple => Some(SpriteConfig {
|
||||
variations: 1,
|
||||
wind_sway: 0.0,
|
||||
}),
|
||||
BlockKind::Mushroom => Some(SpriteConfig {
|
||||
variations: 10,
|
||||
wind_sway: 0.0,
|
||||
}),
|
||||
BlockKind::Liana => Some(SpriteConfig {
|
||||
variations: 2,
|
||||
wind_sway: 0.05,
|
||||
}),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@ -137,7 +162,7 @@ fn mesh_worker(
|
||||
let kind = volume.get(wpos).unwrap_or(&Block::empty()).kind();
|
||||
|
||||
if let Some(cfg) = sprite_config_for(kind) {
|
||||
let seed = wpos.x * 3 + wpos.y * 7 + wpos.z * 13 + wpos.x * wpos.y;
|
||||
let seed = wpos.x * 3 + wpos.y * 7 + wpos.x * wpos.y; // Awful PRNG
|
||||
|
||||
let instance = SpriteInstance::new(
|
||||
Mat4::identity()
|
||||
@ -183,12 +208,12 @@ impl Terrain {
|
||||
// worker threads that are meshing chunks.
|
||||
let (send, recv) = channel::unbounded();
|
||||
|
||||
let mut make_model = |s| {
|
||||
let mut make_model = |s, offset| {
|
||||
renderer
|
||||
.create_model(
|
||||
&Meshable::<SpritePipeline, SpritePipeline>::generate_mesh(
|
||||
&Segment::from(assets::load_expect::<DotVoxData>(s).as_ref()),
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
offset,
|
||||
)
|
||||
.0,
|
||||
)
|
||||
@ -204,122 +229,370 @@ impl Terrain {
|
||||
// Cacti
|
||||
(
|
||||
(BlockKind::LargeCactus, 0),
|
||||
make_model("voxygen.voxel.sprite.cacti.large_cactus"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.cacti.large_cactus",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::BarrelCactus, 0),
|
||||
make_model("voxygen.voxel.sprite.cacti.barrel_cactus"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.cacti.barrel_cactus",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::RoundCactus, 0),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.cacti.cactus_round",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::ShortCactus, 0),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.cacti.cactus_short",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::MedFlatCactus, 0),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.cacti.flat_cactus_med",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::ShortFlatCactus, 0),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.cacti.flat_cactus_short",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
// Fruit
|
||||
(
|
||||
(BlockKind::Apple, 0),
|
||||
make_model("voxygen.voxel.sprite.fruit.apple"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.fruit.apple",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
// Flowers
|
||||
(
|
||||
(BlockKind::BlueFlower, 0),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_blue_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_blue_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::BlueFlower, 1),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_blue_2"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_blue_2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::BlueFlower, 2),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_blue_3",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::BlueFlower, 3),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_blue_4",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::BlueFlower, 4),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_blue_5",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::PinkFlower, 0),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_pink_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_pink_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::PinkFlower, 1),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_pink_2"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_pink_2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::PinkFlower, 2),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_pink_3"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_pink_3",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::PinkFlower, 3),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_pink_4",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::PurpleFlower, 0),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_purple_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_purple_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::RedFlower, 0),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_red_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_red_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::RedFlower, 1),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_red_2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::WhiteFlower, 0),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_white_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_white_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::YellowFlower, 0),
|
||||
make_model("voxygen.voxel.sprite.flowers.flower_purple_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.flower_purple_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Sunflower, 0),
|
||||
make_model("voxygen.voxel.sprite.flowers.sunflower_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.sunflower_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Sunflower, 1),
|
||||
make_model("voxygen.voxel.sprite.flowers.sunflower_2"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.flowers.sunflower_2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
// Grass
|
||||
(
|
||||
(BlockKind::LongGrass, 0),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_long_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_long_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::LongGrass, 1),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_long_2"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_long_2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::LongGrass, 2),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_long_3"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_long_3",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::LongGrass, 3),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_long_4"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_long_4",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::LongGrass, 4),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_long_5"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_long_5",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::LongGrass, 5),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_long_6",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::LongGrass, 6),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_long_7",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::MediumGrass, 0),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_med_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_med_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::MediumGrass, 1),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_med_2"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_med_2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::MediumGrass, 2),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_med_3"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_med_3",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::MediumGrass, 3),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_med_4"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_med_4",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::MediumGrass, 4),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_med_5"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_med_5",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::ShortGrass, 0),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_short_1"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_short_1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::ShortGrass, 1),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_short_2"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_short_2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::ShortGrass, 2),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_short_3"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_short_3",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::ShortGrass, 3),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_short_3"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_short_3",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::ShortGrass, 4),
|
||||
make_model("voxygen.voxel.sprite.grass.grass_short_5"),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.grass.grass_short_5",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 0),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-0",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 1),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-1",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 2),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-2",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 3),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-3",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 4),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-4",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 5),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-5",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 6),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-6",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 7),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-7",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 8),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-8",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Mushroom, 9),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.mushrooms.mushroom-9",
|
||||
Vec3::new(-6.0, -6.0, 0.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Liana, 0),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.lianas.liana-0",
|
||||
Vec3::new(-1.5, -0.5, -88.0),
|
||||
),
|
||||
),
|
||||
(
|
||||
(BlockKind::Liana, 1),
|
||||
make_model(
|
||||
"voxygen.voxel.sprite.lianas.liana-1",
|
||||
Vec3::new(-1.0, -0.5, -55.0),
|
||||
),
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
|
@ -342,10 +342,6 @@ impl PlayState for SessionState {
|
||||
global_state.settings.gameplay.xp_bar = xp_bar;
|
||||
global_state.settings.save_to_file_warn();
|
||||
}
|
||||
HudEvent::ToggleEnBars(en_bars) => {
|
||||
global_state.settings.gameplay.en_bars = en_bars;
|
||||
global_state.settings.save_to_file_warn();
|
||||
}
|
||||
HudEvent::ToggleBarNumbers(bar_numbers) => {
|
||||
global_state.settings.gameplay.bar_numbers = bar_numbers;
|
||||
global_state.settings.save_to_file_warn();
|
||||
|
@ -1,5 +1,5 @@
|
||||
use crate::{
|
||||
hud::{BarNumbers, CrosshairType, EnBars, ShortcutNumbers, XpBar},
|
||||
hud::{BarNumbers, CrosshairType, ShortcutNumbers, XpBar},
|
||||
ui::ScaleMode,
|
||||
window::KeyMouse,
|
||||
};
|
||||
@ -87,7 +87,6 @@ pub struct GameplaySettings {
|
||||
pub crosshair_transp: f32,
|
||||
pub crosshair_type: CrosshairType,
|
||||
pub xp_bar: XpBar,
|
||||
pub en_bars: EnBars,
|
||||
pub shortcut_numbers: ShortcutNumbers,
|
||||
pub bar_numbers: BarNumbers,
|
||||
pub ui_scale: ScaleMode,
|
||||
@ -101,7 +100,6 @@ impl Default for GameplaySettings {
|
||||
crosshair_transp: 0.6,
|
||||
crosshair_type: CrosshairType::Round,
|
||||
xp_bar: XpBar::OnGain,
|
||||
en_bars: EnBars::OnLoss,
|
||||
shortcut_numbers: ShortcutNumbers::On,
|
||||
bar_numbers: BarNumbers::Off,
|
||||
ui_scale: ScaleMode::RelativeToWindow([1920.0, 1080.0].into()),
|
||||
@ -182,10 +180,10 @@ impl Default for AudioSettings {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
master_volume: 1.0,
|
||||
music_volume: 0.5,
|
||||
sfx_volume: 0.5,
|
||||
music_volume: 0.4,
|
||||
sfx_volume: 0.6,
|
||||
audio_device: None,
|
||||
audio_on: true,
|
||||
audio_on: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -265,6 +265,7 @@ impl<'a> BlockGen<'a> {
|
||||
BlockKind::WhiteFlower,
|
||||
BlockKind::YellowFlower,
|
||||
BlockKind::Sunflower,
|
||||
BlockKind::Mushroom,
|
||||
];
|
||||
|
||||
let grasses = [
|
||||
@ -285,11 +286,20 @@ impl<'a> BlockGen<'a> {
|
||||
&& temp > CONFIG.desert_temp
|
||||
&& (marble * 4423.5).fract() < 0.0005
|
||||
{
|
||||
let large_cacti = [BlockKind::LargeCactus, BlockKind::MedFlatCactus];
|
||||
|
||||
let small_cacti = [
|
||||
BlockKind::BarrelCactus,
|
||||
BlockKind::RoundCactus,
|
||||
BlockKind::ShortCactus,
|
||||
BlockKind::ShortFlatCactus,
|
||||
];
|
||||
|
||||
Some(Block::new(
|
||||
if (height * 1271.0).fract() < 0.5 {
|
||||
BlockKind::LargeCactus
|
||||
large_cacti[(height * 0.2) as usize % large_cacti.len()]
|
||||
} else {
|
||||
BlockKind::BarrelCactus
|
||||
small_cacti[(height * 0.3) as usize % small_cacti.len()]
|
||||
},
|
||||
Rgb::broadcast(0),
|
||||
))
|
||||
@ -565,6 +575,20 @@ pub fn block_from_structure(
|
||||
.map(|e| e as u8),
|
||||
)),
|
||||
StructureBlock::Fruit => Some(Block::new(BlockKind::Apple, Rgb::new(194, 30, 37))),
|
||||
StructureBlock::Liana => Some(Block::new(
|
||||
BlockKind::Liana,
|
||||
Lerp::lerp(
|
||||
Rgb::new(0.0, 125.0, 107.0),
|
||||
Rgb::new(0.0, 155.0, 129.0),
|
||||
lerp,
|
||||
)
|
||||
.map(|e| e as u8),
|
||||
)),
|
||||
StructureBlock::Mangrove => Some(Block::new(
|
||||
BlockKind::Normal,
|
||||
Lerp::lerp(Rgb::new(32.0, 56.0, 22.0), Rgb::new(57.0, 69.0, 27.0), lerp)
|
||||
.map(|e| e as u8),
|
||||
)),
|
||||
StructureBlock::Hollow => Some(Block::empty()),
|
||||
StructureBlock::Normal(color) => {
|
||||
Some(Block::new(default_kind, color)).filter(|block| !block.is_empty())
|
||||
|
@ -440,16 +440,16 @@ lazy_static! {
|
||||
.with_center(Vec3::new(18, 16, 8)))
|
||||
.unwrap(),
|
||||
assets::load_map("world.tree.mangroves.5", |s: Structure| s
|
||||
.with_center(Vec3::new(16, 17, 8)))
|
||||
.with_center(Vec3::new(19, 20, 9)))
|
||||
.unwrap(),
|
||||
assets::load_map("world.tree.mangroves.6", |s: Structure| s
|
||||
.with_center(Vec3::new(18, 18, 8)))
|
||||
.with_center(Vec3::new(18, 18, 9)))
|
||||
.unwrap(),
|
||||
assets::load_map("world.tree.mangroves.7", |s: Structure| s
|
||||
.with_center(Vec3::new(18, 17, 8)))
|
||||
.with_center(Vec3::new(18, 17, 9)))
|
||||
.unwrap(),
|
||||
assets::load_map("world.tree.mangroves.8", |s: Structure| s
|
||||
.with_center(Vec3::new(18, 18, 8)))
|
||||
.with_center(Vec3::new(18, 18, 9)))
|
||||
.unwrap(),
|
||||
];
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user