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 level_channel: Arc<LevelChannel>,
|
||||||
pub thread_tracker: Mutex<Vec<thread::JoinHandle<()>>>,
|
pub thread_tracker: Mutex<Vec<thread::JoinHandle<()>>>,
|
||||||
pub chunk_listener: Arc<ChunkListener>,
|
pub chunk_listener: Arc<ChunkListener>,
|
||||||
|
|
||||||
pub tick_data: tokio::sync::Mutex<TickData>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct TickData {
|
pub struct TickData {
|
||||||
pub block_ticks: Vec<OrderedTick<&'static Block>>,
|
pub block_ticks: Vec<OrderedTick<&'static Block>>,
|
||||||
pub fluid_ticks: Vec<OrderedTick<&'static Fluid>>,
|
pub fluid_ticks: Vec<OrderedTick<&'static Fluid>>,
|
||||||
@ -204,7 +201,6 @@ impl Level {
|
|||||||
level_channel: level_channel.clone(),
|
level_channel: level_channel.clone(),
|
||||||
thread_tracker,
|
thread_tracker,
|
||||||
chunk_listener: listener.clone(),
|
chunk_listener: listener.clone(),
|
||||||
tick_data: tokio::sync::Mutex::new(TickData::default()),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let num_threads = num_cpus::get().saturating_sub(2).max(1);
|
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
|
// Gets random ticks, block ticks and fluid ticks
|
||||||
pub async fn get_tick_data(&self) {
|
pub async fn get_tick_data(&self) -> TickData {
|
||||||
let mut ticks = self.tick_data.lock().await;
|
let mut ticks = TickData {
|
||||||
ticks.clear();
|
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 mut rng = SmallRng::from_rng(&mut rand::rng());
|
||||||
let chunks = self
|
let chunks = self
|
||||||
@ -563,6 +563,8 @@ impl Level {
|
|||||||
|
|
||||||
ticks.block_ticks.sort_unstable();
|
ticks.block_ticks.sort_unstable();
|
||||||
ticks.fluid_ticks.sort_unstable();
|
ticks.fluid_ticks.sort_unstable();
|
||||||
|
|
||||||
|
ticks
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn clean_entity_chunk(self: &Arc<Self>, chunk: &Vector2<i32>) {
|
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)
|
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>) {
|
pub async fn tick_chunks(self: &Arc<Self>) {
|
||||||
self.level.get_tick_data().await;
|
let tick_data = self.level.get_tick_data().await;
|
||||||
let tick_data = &self.level.tick_data;
|
for scheduled_tick in tick_data.block_ticks {
|
||||||
for scheduled_tick in &tick_data.lock().await.block_ticks {
|
|
||||||
let block = self.get_block(&scheduled_tick.position).await;
|
let block = self.get_block(&scheduled_tick.position).await;
|
||||||
if let Some(pumpkin_block) = self.block_registry.get_pumpkin_block(block) {
|
if let Some(pumpkin_block) = self.block_registry.get_pumpkin_block(block) {
|
||||||
pumpkin_block
|
pumpkin_block
|
||||||
@ -692,7 +691,7 @@ impl World {
|
|||||||
.await;
|
.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;
|
let fluid = self.get_fluid(&scheduled_tick.position).await;
|
||||||
if let Some(pumpkin_fluid) = self.block_registry.get_pumpkin_fluid(fluid) {
|
if let Some(pumpkin_fluid) = self.block_registry.get_pumpkin_fluid(fluid) {
|
||||||
pumpkin_fluid
|
pumpkin_fluid
|
||||||
@ -777,7 +776,7 @@ impl World {
|
|||||||
.unwrap_or(Duration::new(0, 0))
|
.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();
|
let world: Arc<dyn SimpleWorld> = self.clone();
|
||||||
block_entity.tick(world).await;
|
block_entity.tick(world).await;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user