Revert "Reuse TickData allocations between cycles (#1250)"
This reverts commit 0e5eaf5500.
This commit is contained in:
parent
0e5eaf5500
commit
60d65f1f48
@ -97,11 +97,8 @@ pub struct Level {
|
||||
pub level_channel: Arc<LevelChannel>,
|
||||
pub thread_tracker: Mutex<Vec<thread::JoinHandle<()>>>,
|
||||
pub chunk_listener: Arc<ChunkListener>,
|
||||
|
||||
pub tick_data: tokio::sync::Mutex<TickData>,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct TickData {
|
||||
pub block_ticks: Vec<OrderedTick<&'static Block>>,
|
||||
pub fluid_ticks: Vec<OrderedTick<&'static Fluid>>,
|
||||
@ -204,7 +201,6 @@ impl Level {
|
||||
level_channel: level_channel.clone(),
|
||||
thread_tracker,
|
||||
chunk_listener: listener.clone(),
|
||||
tick_data: tokio::sync::Mutex::new(TickData::default()),
|
||||
});
|
||||
|
||||
let num_threads = num_cpus::get().saturating_sub(2).max(1);
|
||||
@ -496,9 +492,13 @@ impl Level {
|
||||
}
|
||||
|
||||
// Gets random ticks, block ticks and fluid ticks
|
||||
pub async fn get_tick_data(&self) {
|
||||
let mut ticks = self.tick_data.lock().await;
|
||||
ticks.clear();
|
||||
pub async fn get_tick_data(&self) -> TickData {
|
||||
let mut ticks = TickData {
|
||||
block_ticks: Vec::new(),
|
||||
fluid_ticks: Vec::new(),
|
||||
random_ticks: Vec::with_capacity(self.loaded_chunks.len() * 3 * 16 * 16),
|
||||
block_entities: Vec::new(),
|
||||
};
|
||||
|
||||
let mut rng = SmallRng::from_rng(&mut rand::rng());
|
||||
let chunks = self
|
||||
@ -563,6 +563,8 @@ impl Level {
|
||||
|
||||
ticks.block_ticks.sort_unstable();
|
||||
ticks.fluid_ticks.sort_unstable();
|
||||
|
||||
ticks
|
||||
}
|
||||
|
||||
pub async fn clean_entity_chunk(self: &Arc<Self>, chunk: &Vector2<i32>) {
|
||||
@ -905,12 +907,3 @@ impl Level {
|
||||
chunk.fluid_ticks.is_scheduled(*block_pos, fluid)
|
||||
}
|
||||
}
|
||||
|
||||
impl TickData {
|
||||
fn clear(&mut self) {
|
||||
self.block_entities.clear();
|
||||
self.block_ticks.clear();
|
||||
self.fluid_ticks.clear();
|
||||
self.random_ticks.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@ -678,9 +678,8 @@ impl World {
|
||||
}
|
||||
|
||||
pub async fn tick_chunks(self: &Arc<Self>) {
|
||||
self.level.get_tick_data().await;
|
||||
let tick_data = &self.level.tick_data;
|
||||
for scheduled_tick in &tick_data.lock().await.block_ticks {
|
||||
let tick_data = self.level.get_tick_data().await;
|
||||
for scheduled_tick in tick_data.block_ticks {
|
||||
let block = self.get_block(&scheduled_tick.position).await;
|
||||
if let Some(pumpkin_block) = self.block_registry.get_pumpkin_block(block) {
|
||||
pumpkin_block
|
||||
@ -692,7 +691,7 @@ impl World {
|
||||
.await;
|
||||
}
|
||||
}
|
||||
for scheduled_tick in &tick_data.lock().await.fluid_ticks {
|
||||
for scheduled_tick in tick_data.fluid_ticks {
|
||||
let fluid = self.get_fluid(&scheduled_tick.position).await;
|
||||
if let Some(pumpkin_fluid) = self.block_registry.get_pumpkin_fluid(fluid) {
|
||||
pumpkin_fluid
|
||||
@ -777,7 +776,7 @@ impl World {
|
||||
.unwrap_or(Duration::new(0, 0))
|
||||
);
|
||||
|
||||
for block_entity in &tick_data.lock().await.block_entities {
|
||||
for block_entity in tick_data.block_entities {
|
||||
let world: Arc<dyn SimpleWorld> = self.clone();
|
||||
block_entity.tick(world).await;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user