mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
update toolchain to 2022-09-23
This commit is contained in:
parent
c2b453f6f1
commit
cf6a764aa4
@ -33,7 +33,7 @@ struct Cli {
|
|||||||
|
|
||||||
fn armor_stats() -> Result<(), Box<dyn Error>> {
|
fn armor_stats() -> Result<(), Box<dyn Error>> {
|
||||||
let mut wtr = csv::Writer::from_path("armorstats.csv")?;
|
let mut wtr = csv::Writer::from_path("armorstats.csv")?;
|
||||||
wtr.write_record(&[
|
wtr.write_record([
|
||||||
"Path",
|
"Path",
|
||||||
"Kind",
|
"Kind",
|
||||||
"Name",
|
"Name",
|
||||||
@ -74,7 +74,7 @@ fn armor_stats() -> Result<(), Box<dyn Error>> {
|
|||||||
let crit_power = armor.stats(msm).crit_power.unwrap_or(0.0).to_string();
|
let crit_power = armor.stats(msm).crit_power.unwrap_or(0.0).to_string();
|
||||||
let stealth = armor.stats(msm).stealth.unwrap_or(0.0).to_string();
|
let stealth = armor.stats(msm).stealth.unwrap_or(0.0).to_string();
|
||||||
|
|
||||||
wtr.write_record(&[
|
wtr.write_record([
|
||||||
item.item_definition_id()
|
item.item_definition_id()
|
||||||
.itemdef_id()
|
.itemdef_id()
|
||||||
.expect("All items from asset glob should be simple items"),
|
.expect("All items from asset glob should be simple items"),
|
||||||
@ -100,7 +100,7 @@ fn armor_stats() -> Result<(), Box<dyn Error>> {
|
|||||||
|
|
||||||
fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
||||||
let mut wtr = csv::Writer::from_path("weaponstats.csv")?;
|
let mut wtr = csv::Writer::from_path("weaponstats.csv")?;
|
||||||
wtr.write_record(&[
|
wtr.write_record([
|
||||||
"Path",
|
"Path",
|
||||||
"Kind",
|
"Kind",
|
||||||
"Name",
|
"Name",
|
||||||
@ -135,7 +135,7 @@ fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
|||||||
let kind = get_tool_kind(&tool.kind);
|
let kind = get_tool_kind(&tool.kind);
|
||||||
let hands = get_tool_hands(tool);
|
let hands = get_tool_hands(tool);
|
||||||
|
|
||||||
wtr.write_record(&[
|
wtr.write_record([
|
||||||
item.item_definition_id()
|
item.item_definition_id()
|
||||||
.itemdef_id()
|
.itemdef_id()
|
||||||
.expect("All items from asset glob should be simple items"),
|
.expect("All items from asset glob should be simple items"),
|
||||||
@ -207,12 +207,12 @@ fn get_armor_kind(kind: &ArmorKind) -> String {
|
|||||||
|
|
||||||
fn all_items() -> Result<(), Box<dyn Error>> {
|
fn all_items() -> Result<(), Box<dyn Error>> {
|
||||||
let mut wtr = csv::Writer::from_path("items.csv")?;
|
let mut wtr = csv::Writer::from_path("items.csv")?;
|
||||||
wtr.write_record(&["Path", "Name"])?;
|
wtr.write_record(["Path", "Name"])?;
|
||||||
|
|
||||||
for item in
|
for item in
|
||||||
Item::new_from_asset_glob("common.items.*").expect("Failed to iterate over item folders!")
|
Item::new_from_asset_glob("common.items.*").expect("Failed to iterate over item folders!")
|
||||||
{
|
{
|
||||||
wtr.write_record(&[
|
wtr.write_record([
|
||||||
item.item_definition_id()
|
item.item_definition_id()
|
||||||
.itemdef_id()
|
.itemdef_id()
|
||||||
.expect("All items in asset glob should be simple items"),
|
.expect("All items in asset glob should be simple items"),
|
||||||
@ -226,7 +226,7 @@ fn all_items() -> Result<(), Box<dyn Error>> {
|
|||||||
|
|
||||||
fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
||||||
let mut wtr = csv::Writer::from_path("loot_table.csv")?;
|
let mut wtr = csv::Writer::from_path("loot_table.csv")?;
|
||||||
wtr.write_record(&[
|
wtr.write_record([
|
||||||
"Relative Chance",
|
"Relative Chance",
|
||||||
"Kind",
|
"Kind",
|
||||||
"Item",
|
"Item",
|
||||||
@ -256,8 +256,8 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
match item {
|
match item {
|
||||||
LootSpec::Item(item) => wtr.write_record(&[&chance, "Item", item, "", ""])?,
|
LootSpec::Item(item) => wtr.write_record([&chance, "Item", item, "", ""])?,
|
||||||
LootSpec::ItemQuantity(item, lower, upper) => wtr.write_record(&[
|
LootSpec::ItemQuantity(item, lower, upper) => wtr.write_record([
|
||||||
&chance,
|
&chance,
|
||||||
"Item",
|
"Item",
|
||||||
item,
|
item,
|
||||||
@ -265,14 +265,14 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
&upper.to_string(),
|
&upper.to_string(),
|
||||||
])?,
|
])?,
|
||||||
LootSpec::LootTable(table) => {
|
LootSpec::LootTable(table) => {
|
||||||
wtr.write_record(&[&chance, "LootTable", table, "", ""])?
|
wtr.write_record([&chance, "LootTable", table, "", ""])?
|
||||||
},
|
},
|
||||||
LootSpec::Nothing => wtr.write_record(&[&chance, "Nothing", "", ""])?,
|
LootSpec::Nothing => wtr.write_record([&chance, "Nothing", "", ""])?,
|
||||||
LootSpec::ModularWeapon {
|
LootSpec::ModularWeapon {
|
||||||
tool,
|
tool,
|
||||||
material,
|
material,
|
||||||
hands,
|
hands,
|
||||||
} => wtr.write_record(&[
|
} => wtr.write_record([
|
||||||
&chance,
|
&chance,
|
||||||
"Modular Weapon",
|
"Modular Weapon",
|
||||||
&get_tool_kind(tool),
|
&get_tool_kind(tool),
|
||||||
@ -283,7 +283,7 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
tool,
|
tool,
|
||||||
material,
|
material,
|
||||||
hands,
|
hands,
|
||||||
} => wtr.write_record(&[
|
} => wtr.write_record([
|
||||||
&chance,
|
&chance,
|
||||||
"Modular Weapon Primary Component",
|
"Modular Weapon Primary Component",
|
||||||
&get_tool_kind(tool),
|
&get_tool_kind(tool),
|
||||||
@ -299,7 +299,7 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
|
|
||||||
fn entity_drops(entity_config: &str) -> Result<(), Box<dyn Error>> {
|
fn entity_drops(entity_config: &str) -> Result<(), Box<dyn Error>> {
|
||||||
let mut wtr = csv::Writer::from_path("drop_table.csv")?;
|
let mut wtr = csv::Writer::from_path("drop_table.csv")?;
|
||||||
wtr.write_record(&[
|
wtr.write_record([
|
||||||
"Entity Name",
|
"Entity Name",
|
||||||
"Entity Path",
|
"Entity Path",
|
||||||
"Percent Chance",
|
"Percent Chance",
|
||||||
@ -314,7 +314,7 @@ fn entity_drops(entity_config: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
let entity_config = EntityConfig::load_expect(asset_path).read();
|
let entity_config = EntityConfig::load_expect(asset_path).read();
|
||||||
let entity_info = EntityInfo::at(Vec3::new(0.0, 0.0, 0.0))
|
let entity_info = EntityInfo::at(Vec3::new(0.0, 0.0, 0.0))
|
||||||
.with_asset_expect(asset_path, &mut rand::thread_rng());
|
.with_asset_expect(asset_path, &mut rand::thread_rng());
|
||||||
let name = entity_info.name.unwrap_or_else(|| "".to_string());
|
let name = entity_info.name.unwrap_or_default();
|
||||||
|
|
||||||
// Create initial entry in drop table
|
// Create initial entry in drop table
|
||||||
let entry: (f32, LootSpec<String>) = (1.0, entity_config.loot.clone());
|
let entry: (f32, LootSpec<String>) = (1.0, entity_config.loot.clone());
|
||||||
|
@ -342,9 +342,9 @@ lazy_static! {
|
|||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let entry = component_pool
|
let entry: &mut Vec<_> = component_pool
|
||||||
.entry((*toolkind, String::from(material)))
|
.entry((*toolkind, String::from(material)))
|
||||||
.or_insert(Vec::new());
|
.or_default();
|
||||||
entry.push((component, hand_restriction));
|
entry.push((component, hand_restriction));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -371,7 +371,7 @@ lazy_static! {
|
|||||||
},
|
},
|
||||||
) = comp_def.kind
|
) = comp_def.kind
|
||||||
{
|
{
|
||||||
let entry = component_pool.entry(toolkind).or_insert(Vec::new());
|
let entry: &mut Vec<_> = component_pool.entry(toolkind).or_default();
|
||||||
entry.push((Arc::clone(&comp_def), hand_restriction));
|
entry.push((Arc::clone(&comp_def), hand_restriction));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -279,7 +279,7 @@ lazy_static! {
|
|||||||
.for_each(|(ComponentKey { toolkind, material, .. }, recipe)| {
|
.for_each(|(ComponentKey { toolkind, material, .. }, recipe)| {
|
||||||
let component = recipe.itemdef_output();
|
let component = recipe.itemdef_output();
|
||||||
let hand_restriction = None; // once there exists a hand restriction add the logic here - for a slight price correction
|
let hand_restriction = None; // once there exists a hand restriction add the logic here - for a slight price correction
|
||||||
let entry = component_pool.entry((*toolkind, String::from(material))).or_insert(Vec::new());
|
let entry: &mut Vec<_> = component_pool.entry((*toolkind, String::from(material))).or_default();
|
||||||
entry.push((component, hand_restriction));
|
entry.push((component, hand_restriction));
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -306,7 +306,7 @@ lazy_static! {
|
|||||||
) = asset_path.kind
|
) = asset_path.kind
|
||||||
{
|
{
|
||||||
let component = ItemDefinitionIdOwned::Simple(asset_path.id().into());
|
let component = ItemDefinitionIdOwned::Simple(asset_path.id().into());
|
||||||
let entry = component_pool.entry((toolkind, String::new())).or_insert(Vec::new());
|
let entry: &mut Vec<_> = component_pool.entry((toolkind, String::new())).or_default();
|
||||||
entry.push((component, hand_restriction));
|
entry.push((component, hand_restriction));
|
||||||
}});
|
}});
|
||||||
|
|
||||||
@ -790,7 +790,7 @@ impl TradePricing {
|
|||||||
{
|
{
|
||||||
secondaries
|
secondaries
|
||||||
.entry(toolkind)
|
.entry(toolkind)
|
||||||
.or_insert(Vec::new())
|
.or_default()
|
||||||
.push(ItemDefinitionIdOwned::Simple(asset_path.id().into()));
|
.push(ItemDefinitionIdOwned::Simple(asset_path.id().into()));
|
||||||
}
|
}
|
||||||
ordered_recipes.push(RememberedRecipe {
|
ordered_recipes.push(RememberedRecipe {
|
||||||
@ -822,7 +822,7 @@ impl TradePricing {
|
|||||||
for (key, recipe) in comp_book.iter() {
|
for (key, recipe) in comp_book.iter() {
|
||||||
primaries
|
primaries
|
||||||
.entry(key.toolkind)
|
.entry(key.toolkind)
|
||||||
.or_insert(Vec::new())
|
.or_default()
|
||||||
.push(recipe.itemdef_output());
|
.push(recipe.itemdef_output());
|
||||||
ordered_recipes.push(RememberedRecipe {
|
ordered_recipes.push(RememberedRecipe {
|
||||||
output: recipe.itemdef_output(),
|
output: recipe.itemdef_output(),
|
||||||
|
@ -478,7 +478,7 @@ impl SkillSet {
|
|||||||
C: BorrowMut<SkillSet>,
|
C: BorrowMut<SkillSet>,
|
||||||
{
|
{
|
||||||
if let Some(skill_group_kind) = skill.skill_group_kind() {
|
if let Some(skill_group_kind) = skill.skill_group_kind() {
|
||||||
let this = (&*this_).borrow();
|
let this = (*this_).borrow();
|
||||||
let next_level = this.next_skill_level(skill);
|
let next_level = this.next_skill_level(skill);
|
||||||
let prerequisites_met = this.prerequisites_met(skill);
|
let prerequisites_met = this.prerequisites_met(skill);
|
||||||
// Check that skill is not yet at max level
|
// Check that skill is not yet at max level
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
type_alias_impl_trait,
|
type_alias_impl_trait,
|
||||||
extend_one,
|
extend_one,
|
||||||
arbitrary_enum_discriminant,
|
arbitrary_enum_discriminant,
|
||||||
generic_associated_types,
|
|
||||||
arbitrary_self_types
|
arbitrary_self_types
|
||||||
)]
|
)]
|
||||||
#![feature(hash_drain_filter)]
|
#![feature(hash_drain_filter)]
|
||||||
|
@ -521,7 +521,7 @@ where
|
|||||||
if is_walkable(&test_pos) {
|
if is_walkable(&test_pos) {
|
||||||
return Some(test_pos);
|
return Some(test_pos);
|
||||||
}
|
}
|
||||||
z_incr = -z_incr + if z_incr <= 0 { 1 } else { 0 };
|
z_incr = -z_incr + i32::from(z_incr <= 0);
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
@ -470,7 +470,7 @@ impl<'a> MapConfig<'a> {
|
|||||||
light_direction.y,
|
light_direction.y,
|
||||||
0.0, // we currently ignore light_direction.z.
|
0.0, // we currently ignore light_direction.z.
|
||||||
);
|
);
|
||||||
let light_shadow_dir = if light_direction.x >= 0.0 { 0 } else { 1 };
|
let light_shadow_dir = usize::from(light_direction.x < 0.0);
|
||||||
let horizon_map = horizons.map(|horizons| &horizons[light_shadow_dir]);
|
let horizon_map = horizons.map(|horizons| &horizons[light_shadow_dir]);
|
||||||
let light = light_direction.normalized();
|
let light = light_direction.normalized();
|
||||||
let /*mut */quads = [[0u32; QUADRANTS]; QUADRANTS];
|
let /*mut */quads = [[0u32; QUADRANTS]; QUADRANTS];
|
||||||
|
@ -123,7 +123,7 @@ impl<V, S: VolSize, M> Chunk<V, S, M> {
|
|||||||
{
|
{
|
||||||
// First, construct a HashMap with max capacity equal to GROUP_COUNT (since each
|
// First, construct a HashMap with max capacity equal to GROUP_COUNT (since each
|
||||||
// filled group can have at most one slot).
|
// filled group can have at most one slot).
|
||||||
let mut map = HashMap::with_capacity(Self::GROUP_COUNT_TOTAL as usize);
|
let mut map: HashMap<_, Vec<_>> = HashMap::with_capacity(Self::GROUP_COUNT_TOTAL as usize);
|
||||||
let vox = &self.vox;
|
let vox = &self.vox;
|
||||||
let default = &self.default;
|
let default = &self.default;
|
||||||
self.indices
|
self.indices
|
||||||
@ -139,11 +139,11 @@ impl<V, S: VolSize, M> Chunk<V, S, M> {
|
|||||||
if group.all(|block| block == first) {
|
if group.all(|block| block == first) {
|
||||||
// All blocks in the group were the same, so add our position to this entry
|
// All blocks in the group were the same, so add our position to this entry
|
||||||
// in the HashMap.
|
// in the HashMap.
|
||||||
map.entry(first).or_insert(vec![]).push(grp_idx);
|
map.entry(first).or_default().push(grp_idx);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// This slot is empty (i.e. has the default value).
|
// This slot is empty (i.e. has the default value).
|
||||||
map.entry(default).or_insert(vec![]).push(grp_idx);
|
map.entry(default).or_default().push(grp_idx);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Now, find the block with max frequency in the HashMap and make that our new
|
// Now, find the block with max frequency in the HashMap and make that our new
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#![feature(let_else, btree_drain_filter)]
|
#![feature(btree_drain_filter)]
|
||||||
#![allow(clippy::option_map_unit_fn)]
|
#![allow(clippy::option_map_unit_fn)]
|
||||||
|
|
||||||
mod aura;
|
mod aura;
|
||||||
|
@ -1 +1 @@
|
|||||||
nightly-2022-09-08
|
nightly-2022-09-23
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
box_patterns,
|
box_patterns,
|
||||||
drain_filter,
|
drain_filter,
|
||||||
let_chains,
|
let_chains,
|
||||||
let_else,
|
|
||||||
never_type,
|
never_type,
|
||||||
option_zip,
|
option_zip,
|
||||||
unwrap_infallible
|
unwrap_infallible
|
||||||
|
@ -26,7 +26,7 @@ pub struct Entity {
|
|||||||
pub brain: Brain,
|
pub brain: Brain,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, strum::EnumIter, PartialEq)]
|
#[derive(Clone, Copy, strum::EnumIter, PartialEq, Eq)]
|
||||||
pub enum RtSimEntityKind {
|
pub enum RtSimEntityKind {
|
||||||
Wanderer,
|
Wanderer,
|
||||||
Cultist,
|
Cultist,
|
||||||
|
@ -488,11 +488,7 @@ pub fn handle_inbox_update_pending_trade(bdata: &mut BehaviorData) -> bool {
|
|||||||
if let Some(AgentEvent::UpdatePendingTrade(boxval)) = agent.inbox.pop_front() {
|
if let Some(AgentEvent::UpdatePendingTrade(boxval)) = agent.inbox.pop_front() {
|
||||||
let (tradeid, pending, prices, inventories) = *boxval;
|
let (tradeid, pending, prices, inventories) = *boxval;
|
||||||
if agent.behavior.is(BehaviorState::TRADING) {
|
if agent.behavior.is(BehaviorState::TRADING) {
|
||||||
let who: usize = if agent.behavior.is(BehaviorState::TRADING_ISSUER) {
|
let who = usize::from(!agent.behavior.is(BehaviorState::TRADING_ISSUER));
|
||||||
0
|
|
||||||
} else {
|
|
||||||
1
|
|
||||||
};
|
|
||||||
let balance0: f32 = prices.balance(&pending.offers, &inventories, 1 - who, true);
|
let balance0: f32 = prices.balance(&pending.offers, &inventories, 1 - who, true);
|
||||||
let balance1: f32 = prices.balance(&pending.offers, &inventories, who, false);
|
let balance1: f32 = prices.balance(&pending.offers, &inventories, who, false);
|
||||||
if balance0 >= balance1 {
|
if balance0 >= balance1 {
|
||||||
|
@ -293,10 +293,7 @@ impl Default for DeletedEntities {
|
|||||||
|
|
||||||
impl DeletedEntities {
|
impl DeletedEntities {
|
||||||
pub fn record_deleted_entity(&mut self, uid: Uid, region_key: Vec2<i32>) {
|
pub fn record_deleted_entity(&mut self, uid: Uid, region_key: Vec2<i32>) {
|
||||||
self.map
|
self.map.entry(region_key).or_default().push(uid.into());
|
||||||
.entry(region_key)
|
|
||||||
.or_insert(Vec::new())
|
|
||||||
.push(uid.into());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn take_deleted_in_region(&mut self, key: Vec2<i32>) -> Vec<u64> {
|
pub fn take_deleted_in_region(&mut self, key: Vec2<i32>) -> Vec<u64> {
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#![feature(generic_associated_types)]
|
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
#![allow(clippy::single_match)]
|
#![allow(clippy::single_match)]
|
||||||
#[cfg(all(feature = "be-dyn-lib", feature = "use-dyn-lib"))]
|
#[cfg(all(feature = "be-dyn-lib", feature = "use-dyn-lib"))]
|
||||||
|
@ -340,7 +340,7 @@ pub fn complete(line: &str, client: &Client, cmd_prefix: char) -> Vec<String> {
|
|||||||
let line = line.strip_prefix(cmd_prefix).unwrap_or(line);
|
let line = line.strip_prefix(cmd_prefix).unwrap_or(line);
|
||||||
let mut iter = line.split_whitespace();
|
let mut iter = line.split_whitespace();
|
||||||
let cmd = iter.next().unwrap_or("");
|
let cmd = iter.next().unwrap_or("");
|
||||||
let i = iter.count() + if word.is_empty() { 1 } else { 0 };
|
let i = iter.count() + usize::from(word.is_empty());
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
// Completing chat command name. This is the start of the line so the prefix
|
// Completing chat command name. This is the start of the line so the prefix
|
||||||
// will be part of it
|
// will be part of it
|
||||||
|
@ -164,15 +164,11 @@ impl<'a> Ingameable for Overhead<'a> {
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
+ if info.health.map_or(false, should_show_healthbar) {
|
+ if info.health.map_or(false, should_show_healthbar) {
|
||||||
5 + if info.energy.is_some() { 1 } else { 0 }
|
5 + usize::from(info.energy.is_some())
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
+ if info.health.map_or(false, decayed_health_displayed) {
|
|
||||||
1
|
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
+ usize::from(info.health.map_or(false, decayed_health_displayed))
|
||||||
+ (!self.interaction_options.is_empty()) as usize * 2
|
+ (!self.interaction_options.is_empty()) as usize * 2
|
||||||
}) + if self.bubble.is_some() { 13 } else { 0 }
|
}) + if self.bubble.is_some() { 13 } else { 0 }
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ impl Profile {
|
|||||||
match character_id {
|
match character_id {
|
||||||
Some(character_id) => self.servers
|
Some(character_id) => self.servers
|
||||||
.entry(server.to_string())
|
.entry(server.to_string())
|
||||||
.or_insert(ServerProfile::default())
|
.or_default()
|
||||||
// Get or update the CharacterProfile.
|
// Get or update the CharacterProfile.
|
||||||
.characters
|
.characters
|
||||||
.entry(character_id)
|
.entry(character_id)
|
||||||
@ -191,7 +191,7 @@ impl Profile {
|
|||||||
) {
|
) {
|
||||||
self.servers
|
self.servers
|
||||||
.entry(server.to_string())
|
.entry(server.to_string())
|
||||||
.or_insert(ServerProfile::default())
|
.or_default()
|
||||||
.selected_character = selected_character;
|
.selected_character = selected_character;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +226,7 @@ impl Profile {
|
|||||||
) {
|
) {
|
||||||
self.servers
|
self.servers
|
||||||
.entry(server.to_string())
|
.entry(server.to_string())
|
||||||
.or_insert(ServerProfile::default())
|
.or_default()
|
||||||
.spectate_position = spectate_position;
|
.spectate_position = spectate_position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ impl Vertex {
|
|||||||
.enumerate()
|
.enumerate()
|
||||||
.find(|(_i, e)| **e != 0.0)
|
.find(|(_i, e)| **e != 0.0)
|
||||||
.unwrap_or((0, &1.0));
|
.unwrap_or((0, &1.0));
|
||||||
let norm_bits = ((norm_axis << 1) | if *norm_dir > 0.0 { 1 } else { 0 }) as u32;
|
let norm_bits = ((norm_axis << 1) | usize::from(*norm_dir > 0.0)) as u32;
|
||||||
|
|
||||||
const EXTRA_NEG_Z: f32 = 65536.0;
|
const EXTRA_NEG_Z: f32 = 65536.0;
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ pub struct Vertex {
|
|||||||
impl Vertex {
|
impl Vertex {
|
||||||
#[allow(clippy::collapsible_else_if)]
|
#[allow(clippy::collapsible_else_if)]
|
||||||
pub fn new(pos: Vec3<f32>, norm: Vec3<f32>) -> Self {
|
pub fn new(pos: Vec3<f32>, norm: Vec3<f32>) -> Self {
|
||||||
|
#[allow(clippy::bool_to_int_with_if)]
|
||||||
let norm_bits = if norm.x != 0.0 {
|
let norm_bits = if norm.x != 0.0 {
|
||||||
if norm.x < 0.0 { 0 } else { 1 }
|
if norm.x < 0.0 { 0 } else { 1 }
|
||||||
} else if norm.y != 0.0 {
|
} else if norm.y != 0.0 {
|
||||||
|
@ -44,6 +44,7 @@ impl Vertex {
|
|||||||
pub fn new(atlas_pos: Vec2<u16>, pos: Vec3<f32>, norm: Vec3<f32>) -> Self {
|
pub fn new(atlas_pos: Vec2<u16>, pos: Vec3<f32>, norm: Vec3<f32>) -> Self {
|
||||||
const VERT_EXTRA_NEG_Z: i32 = 128; // NOTE: change if number of bits changes below, also we might not need this if meshing always produces positives values for sprites (I have no idea)
|
const VERT_EXTRA_NEG_Z: i32 = 128; // NOTE: change if number of bits changes below, also we might not need this if meshing always produces positives values for sprites (I have no idea)
|
||||||
|
|
||||||
|
#[allow(clippy::bool_to_int_with_if)]
|
||||||
let norm_bits = if norm.x != 0.0 {
|
let norm_bits = if norm.x != 0.0 {
|
||||||
if norm.x < 0.0 { 0 } else { 1 }
|
if norm.x < 0.0 { 0 } else { 1 }
|
||||||
} else if norm.y != 0.0 {
|
} else if norm.y != 0.0 {
|
||||||
|
@ -15,6 +15,7 @@ impl Vertex {
|
|||||||
pub fn new(atlas_pos: Vec2<u16>, pos: Vec3<f32>, norm: Vec3<f32>, meta: bool) -> Self {
|
pub fn new(atlas_pos: Vec2<u16>, pos: Vec3<f32>, norm: Vec3<f32>, meta: bool) -> Self {
|
||||||
const EXTRA_NEG_Z: f32 = 32768.0;
|
const EXTRA_NEG_Z: f32 = 32768.0;
|
||||||
|
|
||||||
|
#[allow(clippy::bool_to_int_with_if)]
|
||||||
let norm_bits = if norm.x != 0.0 {
|
let norm_bits = if norm.x != 0.0 {
|
||||||
if norm.x < 0.0 { 0 } else { 1 }
|
if norm.x < 0.0 { 0 } else { 1 }
|
||||||
} else if norm.y != 0.0 {
|
} else if norm.y != 0.0 {
|
||||||
@ -28,18 +29,14 @@ impl Vertex {
|
|||||||
pos_norm: ((pos.x as u32) & 0x003F) << 0
|
pos_norm: ((pos.x as u32) & 0x003F) << 0
|
||||||
| ((pos.y as u32) & 0x003F) << 6
|
| ((pos.y as u32) & 0x003F) << 6
|
||||||
| (((pos + EXTRA_NEG_Z).z.max(0.0).min((1 << 16) as f32) as u32) & 0xFFFF) << 12
|
| (((pos + EXTRA_NEG_Z).z.max(0.0).min((1 << 16) as f32) as u32) & 0xFFFF) << 12
|
||||||
| if meta { 1 } else { 0 } << 28
|
| u32::from(meta) << 28
|
||||||
| (norm_bits & 0x7) << 29,
|
| (norm_bits & 0x7) << 29,
|
||||||
atlas_pos: ((atlas_pos.x as u32) & 0xFFFF) << 0 | ((atlas_pos.y as u32) & 0xFFFF) << 16,
|
atlas_pos: ((atlas_pos.x as u32) & 0xFFFF) << 0 | ((atlas_pos.y as u32) & 0xFFFF) << 16,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_figure(atlas_pos: Vec2<u16>, pos: Vec3<f32>, norm: Vec3<f32>, bone_idx: u8) -> Self {
|
pub fn new_figure(atlas_pos: Vec2<u16>, pos: Vec3<f32>, norm: Vec3<f32>, bone_idx: u8) -> Self {
|
||||||
let norm_bits = if norm.x.min(norm.y).min(norm.z) < 0.0 {
|
let norm_bits = u32::from(norm.x.min(norm.y).min(norm.z) >= 0.0);
|
||||||
0
|
|
||||||
} else {
|
|
||||||
1
|
|
||||||
};
|
|
||||||
let axis_bits = if norm.x != 0.0 {
|
let axis_bits = if norm.x != 0.0 {
|
||||||
0
|
0
|
||||||
} else if norm.y != 0.0 {
|
} else if norm.y != 0.0 {
|
||||||
|
@ -234,11 +234,9 @@ fn create_lod_terrain_mesh(detail: u32) -> Mesh<LodTerrainVertex> {
|
|||||||
Vertex::new(Vec2::new(x + 1, y + 1).map(transform)),
|
Vertex::new(Vec2::new(x + 1, y + 1).map(transform)),
|
||||||
Vertex::new(Vec2::new(x, y + 1).map(transform)),
|
Vertex::new(Vec2::new(x, y + 1).map(transform)),
|
||||||
)
|
)
|
||||||
.rotated_by(if (x > detail as i32 / 2) ^ (y > detail as i32 / 2) {
|
.rotated_by(usize::from(
|
||||||
0
|
!((x > detail as i32 / 2) ^ (y > detail as i32 / 2)),
|
||||||
} else {
|
))
|
||||||
1
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
@ -1079,11 +1079,7 @@ impl ParticleMgr {
|
|||||||
} => {
|
} => {
|
||||||
let num_particles = aura.radius.powi(2) * dt / 250.0;
|
let num_particles = aura.radius.powi(2) * dt / 250.0;
|
||||||
let num_particles = num_particles.floor() as usize
|
let num_particles = num_particles.floor() as usize
|
||||||
+ if rng.gen_bool(f64::from(num_particles % 1.0)) {
|
+ usize::from(rng.gen_bool(f64::from(num_particles % 1.0)));
|
||||||
1
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
self.particles
|
self.particles
|
||||||
.resize_with(self.particles.len() + num_particles, || {
|
.resize_with(self.particles.len() + num_particles, || {
|
||||||
let rand_pos = {
|
let rand_pos = {
|
||||||
|
@ -48,7 +48,7 @@ fn unlz4_with_dictionary(data: &[u8], dictionary: &[u8]) -> Option<Vec<u8>> {
|
|||||||
r.into_read_with_dictionary(dictionary)
|
r.into_read_with_dictionary(dictionary)
|
||||||
.read_to_end(&mut uncompressed)
|
.read_to_end(&mut uncompressed)
|
||||||
.ok()?;
|
.ok()?;
|
||||||
bincode::deserialize(&*uncompressed).ok()
|
bincode::deserialize(&uncompressed).ok()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ impl VoxelImageEncoding for PngEncoding {
|
|||||||
FilterType::Up,
|
FilterType::Up,
|
||||||
);
|
);
|
||||||
png.write_image(
|
png.write_image(
|
||||||
&*ws.as_raw(),
|
ws.as_raw(),
|
||||||
ws.width(),
|
ws.width(),
|
||||||
ws.height(),
|
ws.height(),
|
||||||
image::ColorType::Rgba8,
|
image::ColorType::Rgba8,
|
||||||
@ -300,7 +300,7 @@ impl VoxelImageEncoding for MixedEncoding {
|
|||||||
CompressionType::Rle,
|
CompressionType::Rle,
|
||||||
FilterType::Up,
|
FilterType::Up,
|
||||||
);
|
);
|
||||||
png.write_image(&*x.as_raw(), x.width(), x.height(), image::ColorType::L8)
|
png.write_image(x.as_raw(), x.width(), x.height(), image::ColorType::L8)
|
||||||
.ok()?;
|
.ok()?;
|
||||||
indices[i] = buf.len();
|
indices[i] = buf.len();
|
||||||
Some(())
|
Some(())
|
||||||
@ -407,7 +407,7 @@ impl VoxelImageEncoding for MixedEncodingSparseSprites {
|
|||||||
FilterType::Up,
|
FilterType::Up,
|
||||||
);
|
);
|
||||||
png.write_image(
|
png.write_image(
|
||||||
&*ws.0.as_raw(),
|
ws.0.as_raw(),
|
||||||
ws.0.width(),
|
ws.0.width(),
|
||||||
ws.0.height(),
|
ws.0.height(),
|
||||||
image::ColorType::L8,
|
image::ColorType::L8,
|
||||||
@ -471,14 +471,14 @@ impl VoxelImageEncoding for MixedEncodingDenseSprites {
|
|||||||
CompressionType::Fast,
|
CompressionType::Fast,
|
||||||
FilterType::Up,
|
FilterType::Up,
|
||||||
);
|
);
|
||||||
png.write_image(&*x.as_raw(), x.width(), x.height(), image::ColorType::L8)
|
png.write_image(x.as_raw(), x.width(), x.height(), image::ColorType::L8)
|
||||||
.ok()?;
|
.ok()?;
|
||||||
indices[i] = buf.len();
|
indices[i] = buf.len();
|
||||||
Some(())
|
Some(())
|
||||||
};
|
};
|
||||||
f(&ws.0, 0)?;
|
f(&ws.0, 0)?;
|
||||||
let mut g = |x: &[u8], i| {
|
let mut g = |x: &[u8], i| {
|
||||||
buf.extend_from_slice(&*CompressedData::compress(&x, 4).data);
|
buf.extend_from_slice(&CompressedData::compress(&x, 4).data);
|
||||||
indices[i] = buf.len();
|
indices[i] = buf.len();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -533,7 +533,7 @@ lazy_static::lazy_static! {
|
|||||||
static ref PALETTE_RTREE: HashMap<BlockKind, RTree<ColorPoint, TestParams>> = {
|
static ref PALETTE_RTREE: HashMap<BlockKind, RTree<ColorPoint, TestParams>> = {
|
||||||
let ron_bytes = include_bytes!("palettes.ron");
|
let ron_bytes = include_bytes!("palettes.ron");
|
||||||
let palettes: HashMap<BlockKind, Vec<Rgb<u8>>> =
|
let palettes: HashMap<BlockKind, Vec<Rgb<u8>>> =
|
||||||
ron::de::from_bytes(&*ron_bytes).expect("palette should parse");
|
ron::de::from_bytes(ron_bytes).expect("palette should parse");
|
||||||
palettes
|
palettes
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(k, v)| {
|
.map(|(k, v)| {
|
||||||
@ -549,7 +549,7 @@ lazy_static::lazy_static! {
|
|||||||
pub static ref PALETTE_KDTREE: HashMap<BlockKind, KdTree<f32, u8, 3>> = {
|
pub static ref PALETTE_KDTREE: HashMap<BlockKind, KdTree<f32, u8, 3>> = {
|
||||||
let ron_bytes = include_bytes!("palettes.ron");
|
let ron_bytes = include_bytes!("palettes.ron");
|
||||||
let palettes: HashMap<BlockKind, Vec<Rgb<u8>>> =
|
let palettes: HashMap<BlockKind, Vec<Rgb<u8>>> =
|
||||||
ron::de::from_bytes(&*ron_bytes).expect("palette should parse");
|
ron::de::from_bytes(ron_bytes).expect("palette should parse");
|
||||||
palettes
|
palettes
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(k, v)| {
|
.map(|(k, v)| {
|
||||||
@ -637,7 +637,7 @@ impl<'a, NN: NearestNeighbor, const N: u32> VoxelImageEncoding for PaletteEncodi
|
|||||||
CompressionType::Rle,
|
CompressionType::Rle,
|
||||||
FilterType::Up,
|
FilterType::Up,
|
||||||
);
|
);
|
||||||
png.write_image(&*x.as_raw(), x.width(), x.height(), image::ColorType::L8)
|
png.write_image(x.as_raw(), x.width(), x.height(), image::ColorType::L8)
|
||||||
.ok()?;
|
.ok()?;
|
||||||
indices[i] = buf.len();
|
indices[i] = buf.len();
|
||||||
Some(())
|
Some(())
|
||||||
@ -921,8 +921,8 @@ fn main() {
|
|||||||
histogram_to_dictionary(&histogram2, &mut dictionary2);
|
histogram_to_dictionary(&histogram2, &mut dictionary2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let lz4_dyna = lz4_with_dictionary(&*ser_dyna, &[]);
|
let lz4_dyna = lz4_with_dictionary(&ser_dyna, &[]);
|
||||||
let deflate_dyna = do_deflate_flate2::<5>(&*ser_dyna);
|
let deflate_dyna = do_deflate_flate2::<5>(&ser_dyna);
|
||||||
let deflate_channeled_dyna = do_deflate_flate2::<5>(
|
let deflate_channeled_dyna = do_deflate_flate2::<5>(
|
||||||
&bincode::serialize(&channelize_dyna(&dyna)).unwrap(),
|
&bincode::serialize(&channelize_dyna(&dyna)).unwrap(),
|
||||||
);
|
);
|
||||||
@ -936,7 +936,7 @@ fn main() {
|
|||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
if HISTOGRAMS {
|
if HISTOGRAMS {
|
||||||
let lz4_dict_dyna = lz4_with_dictionary(&*ser_dyna, &dictionary2);
|
let lz4_dict_dyna = lz4_with_dictionary(&ser_dyna, &dictionary2);
|
||||||
sizes.push(("lz4_dict_dyna", lz4_dict_dyna.len() as f32 / n as f32));
|
sizes.push(("lz4_dict_dyna", lz4_dict_dyna.len() as f32 / n as f32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -954,7 +954,7 @@ fn main() {
|
|||||||
spiralpos.x, spiralpos.y
|
spiralpos.x, spiralpos.y
|
||||||
))
|
))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
f.write_all(&*jpegchonkgrid).unwrap();
|
f.write_all(&jpegchonkgrid).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
let jpegchonktall_pre = Instant::now();
|
let jpegchonktall_pre = Instant::now();
|
||||||
@ -1199,7 +1199,7 @@ fn main() {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
let jpeg_volgrid =
|
let jpeg_volgrid =
|
||||||
image_terrain_volgrid(&JpegEncoding, GridLtrPacking, &volgrid).unwrap();
|
image_terrain_volgrid(&JpegEncoding, GridLtrPacking, &volgrid).unwrap();
|
||||||
f.write_all(&*jpeg_volgrid).unwrap();
|
f.write_all(&jpeg_volgrid).unwrap();
|
||||||
|
|
||||||
let mixedgrid_pre = Instant::now();
|
let mixedgrid_pre = Instant::now();
|
||||||
let (mixed_volgrid, indices) =
|
let (mixed_volgrid, indices) =
|
||||||
|
@ -179,8 +179,8 @@ impl ExportVol {
|
|||||||
|
|
||||||
for (index, (model_pos, _)) in self.models.iter().enumerate() {
|
for (index, (model_pos, _)) in self.models.iter().enumerate() {
|
||||||
// Transform node
|
// Transform node
|
||||||
let pos = model_pos
|
let pos =
|
||||||
.map(|p| p * Self::CHUNK_SIZE + Self::CHUNK_SIZE / 2 + if p < 0 { 0 } else { 1 });
|
model_pos.map(|p| p * Self::CHUNK_SIZE + Self::CHUNK_SIZE / 2 + i32::from(p >= 0));
|
||||||
let pos = pos - Vec3::new(self.width / 2, self.width / 2, 0);
|
let pos = pos - Vec3::new(self.width / 2, self.width / 2, 0);
|
||||||
let transform_node_id = index as i32 * 2 + 2;
|
let transform_node_id = index as i32 * 2 + 2;
|
||||||
let shape_node_id = index as i32 * 2 + 3;
|
let shape_node_id = index as i32 * 2 + 3;
|
||||||
|
@ -84,14 +84,14 @@ fn image_from_function<F: FnMut(u32, u32) -> [u8; 3]>(
|
|||||||
let png =
|
let png =
|
||||||
PngEncoder::new_with_quality(&mut heightmap_png, CompressionType::Best, FilterType::Paeth);
|
PngEncoder::new_with_quality(&mut heightmap_png, CompressionType::Best, FilterType::Paeth);
|
||||||
png.write_image(
|
png.write_image(
|
||||||
&*heightmap.as_raw(),
|
heightmap.as_raw(),
|
||||||
heightmap.width(),
|
heightmap.width(),
|
||||||
heightmap.height(),
|
heightmap.height(),
|
||||||
image::ColorType::Rgb8,
|
image::ColorType::Rgb8,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let mut f = File::create(name).unwrap();
|
let mut f = File::create(name).unwrap();
|
||||||
f.write_all(&*heightmap_png).unwrap();
|
f.write_all(&heightmap_png).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn image_with_autorange<F: Fn(f32, f32, f32) -> [u8; 3], G: FnMut(u32, u32) -> f32>(
|
fn image_with_autorange<F: Fn(f32, f32, f32) -> [u8; 3], G: FnMut(u32, u32) -> f32>(
|
||||||
|
@ -274,7 +274,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
},
|
},
|
||||||
Some(("palette", matches)) => {
|
Some(("palette", matches)) => {
|
||||||
let conn =
|
let conn =
|
||||||
Connection::open(&matches.value_of("database").expect("database is required"))?;
|
Connection::open(matches.value_of("database").expect("database is required"))?;
|
||||||
palette(conn)?;
|
palette(conn)?;
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
)]
|
)]
|
||||||
#![allow(clippy::branches_sharing_code)] // TODO: evaluate
|
#![allow(clippy::branches_sharing_code)] // TODO: evaluate
|
||||||
#![deny(clippy::clone_on_ref_ptr)]
|
#![deny(clippy::clone_on_ref_ptr)]
|
||||||
#![feature(option_zip, arbitrary_enum_discriminant, let_else)]
|
#![feature(option_zip, arbitrary_enum_discriminant)]
|
||||||
|
|
||||||
mod all;
|
mod all;
|
||||||
mod block;
|
mod block;
|
||||||
|
@ -237,12 +237,7 @@ fn tick(index: &mut Index, dt: f32, _env: &mut Environment) {
|
|||||||
// distribute orders (travelling merchants)
|
// distribute orders (travelling merchants)
|
||||||
for (_id, site) in index.sites.iter_mut() {
|
for (_id, site) in index.sites.iter_mut() {
|
||||||
for (i, mut v) in site.economy.orders.drain() {
|
for (i, mut v) in site.economy.orders.drain() {
|
||||||
index
|
index.trade.orders.entry(i).or_default().append(&mut v);
|
||||||
.trade
|
|
||||||
.orders
|
|
||||||
.entry(i)
|
|
||||||
.or_insert(Vec::new())
|
|
||||||
.append(&mut v);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// trade at sites
|
// trade at sites
|
||||||
|
@ -192,12 +192,7 @@ impl Archetype for Keep {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let ridge_x = (center_offset.map(|e| e.abs()).reduce_min() + 2) % 8;
|
let ridge_x = (center_offset.map(|e| e.abs()).reduce_min() + 2) % 8;
|
||||||
let width = locus
|
let width = locus + i32::from(ridge_x < 4 && attr.ridged && !attr.rounded);
|
||||||
+ if ridge_x < 4 && attr.ridged && !attr.rounded {
|
|
||||||
1
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
let rampart_width = 2 + width;
|
let rampart_width = 2 + width;
|
||||||
let storey_height = 9;
|
let storey_height = 9;
|
||||||
let roof_height = attr.storeys * storey_height;
|
let roof_height = attr.storeys * storey_height;
|
||||||
|
@ -222,7 +222,7 @@ impl Room {
|
|||||||
.map(|e| e.rem_euclid(pillar_space) == 0)
|
.map(|e| e.rem_euclid(pillar_space) == 0)
|
||||||
.reduce_and()
|
.reduce_and()
|
||||||
});
|
});
|
||||||
let enemy_spawn_tile = enemy_spawn_tile + if enemy_tile_is_pillar { 1 } else { 0 };
|
let enemy_spawn_tile = enemy_spawn_tile + i32::from(enemy_tile_is_pillar);
|
||||||
|
|
||||||
// Toss mobs in the center of the room
|
// Toss mobs in the center of the room
|
||||||
if tile_pos == enemy_spawn_tile && wpos2d == tile_wcenter.xy() {
|
if tile_pos == enemy_spawn_tile && wpos2d == tile_wcenter.xy() {
|
||||||
@ -281,7 +281,7 @@ impl Room {
|
|||||||
.map(|e| e.rem_euclid(pillar_space) == 0)
|
.map(|e| e.rem_euclid(pillar_space) == 0)
|
||||||
.reduce_and()
|
.reduce_and()
|
||||||
});
|
});
|
||||||
let miniboss_spawn_tile = miniboss_spawn_tile + if miniboss_tile_is_pillar { 1 } else { 0 };
|
let miniboss_spawn_tile = miniboss_spawn_tile + i32::from(miniboss_tile_is_pillar);
|
||||||
|
|
||||||
if tile_pos == miniboss_spawn_tile && tile_wcenter.xy() == wpos2d {
|
if tile_pos == miniboss_spawn_tile && tile_wcenter.xy() == wpos2d {
|
||||||
let entities = match self.difficulty {
|
let entities = match self.difficulty {
|
||||||
@ -314,7 +314,7 @@ impl Room {
|
|||||||
.map(|e| e.rem_euclid(pillar_space) == 0)
|
.map(|e| e.rem_euclid(pillar_space) == 0)
|
||||||
.reduce_and()
|
.reduce_and()
|
||||||
});
|
});
|
||||||
let boss_spawn_tile = boss_spawn_tile + if boss_tile_is_pillar { 1 } else { 0 };
|
let boss_spawn_tile = boss_spawn_tile + i32::from(boss_tile_is_pillar);
|
||||||
|
|
||||||
if tile_pos == boss_spawn_tile && wpos2d == tile_wcenter.xy() {
|
if tile_pos == boss_spawn_tile && wpos2d == tile_wcenter.xy() {
|
||||||
let entities = match self.difficulty {
|
let entities = match self.difficulty {
|
||||||
|
@ -42,6 +42,7 @@ impl House {
|
|||||||
min: site.tile_wpos(tile_aabr.min),
|
min: site.tile_wpos(tile_aabr.min),
|
||||||
max: site.tile_wpos(tile_aabr.max),
|
max: site.tile_wpos(tile_aabr.max),
|
||||||
};
|
};
|
||||||
|
#[allow(clippy::bool_to_int_with_if)]
|
||||||
let front = if door_dir.y < 0 {
|
let front = if door_dir.y < 0 {
|
||||||
2
|
2
|
||||||
} else if door_dir.x < 0 {
|
} else if door_dir.x < 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user