mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'crabman/terrain-persistence-crash' into 'master'
don't remove blocks when applying changes for new chunks See merge request veloren/veloren!4276
This commit is contained in:
commit
fd2e45cfde
@ -672,10 +672,12 @@ impl Block {
|
|||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn from_u32(x: u32) -> Option<Self> {
|
pub fn from_u32(x: u32) -> Option<Self> {
|
||||||
let [bk, r, g, b] = x.to_le_bytes();
|
let [bk, r, g, b] = x.to_le_bytes();
|
||||||
Some(Self {
|
let block = Self {
|
||||||
kind: BlockKind::from_u8(bk)?,
|
kind: BlockKind::from_u8(bk)?,
|
||||||
data: [r, g, b],
|
data: [r, g, b],
|
||||||
})
|
};
|
||||||
|
|
||||||
|
(block.kind.is_filled() || SpriteKind::from_block(block).is_some()).then_some(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -74,15 +74,11 @@ impl TerrainPersistence {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let removed = resets.len();
|
|
||||||
|
|
||||||
// Reset any unchanged blocks (this is an optimisation only)
|
// Reset any unchanged blocks (this is an optimisation only)
|
||||||
for rpos in resets {
|
for rpos in resets {
|
||||||
loaded_chunk.chunk.reset_block(rpos);
|
loaded_chunk.chunk.reset_block(rpos);
|
||||||
loaded_chunk.modified = true;
|
loaded_chunk.modified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.cached_chunks.limiter_mut().remove_blocks(removed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Maintain terrain persistence (writing changes changes back to
|
/// Maintain terrain persistence (writing changes changes back to
|
||||||
@ -314,10 +310,6 @@ impl ByBlockLimiter {
|
|||||||
/// This function should only be used when it is guaranteed that a block has
|
/// This function should only be used when it is guaranteed that a block has
|
||||||
/// been added
|
/// been added
|
||||||
fn add_block(&mut self) { self.counted_blocks += 1; }
|
fn add_block(&mut self) { self.counted_blocks += 1; }
|
||||||
|
|
||||||
/// This function should only be used when it is guaranteed that this number
|
|
||||||
/// of blocks has been removed
|
|
||||||
fn remove_blocks(&mut self, removed: usize) { self.counted_blocks -= removed; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// # Adding a new chunk format version
|
/// # Adding a new chunk format version
|
||||||
|
Loading…
Reference in New Issue
Block a user