Skip to content

Commit

Permalink
More updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Zac8668 committed Jan 27, 2025
1 parent 3c814ec commit 9c48134
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 65 deletions.
127 changes: 64 additions & 63 deletions src/chunk_manager.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
use std::task::Poll;

use bevy::render::render_asset::{RenderAssetDependency, RenderAssets};
use bevy::render::render_resource::{Extent3d, ImageCopyTexture, ImageDataLayout, Origin3d};
use bevy::render::renderer::RenderQueue;
use bevy::render::texture::GpuImage;
use bevy::render::{Extract, RenderApp, RenderSet};
use bevy::sprite::Anchor;
use itertools::Itertools;
Expand Down Expand Up @@ -204,15 +207,11 @@ pub fn manager_setup(
commands
.spawn((
Name::new("Chunks"),
VisibilityBundle::default(),
TransformBundle::from_transform(Transform::from_translation(vec3(
0.,
0.,
AUTOMATA_LAYER,
))),
Visibility::Visible,
Transform::from_translation(vec3(0., 0., AUTOMATA_LAYER)),
ChunksParent,
))
.push_children(&images_vec);
.insert_children(0, &images_vec);
}

pub fn add_colliders(
Expand All @@ -224,7 +223,7 @@ pub fn add_colliders(
) {
puffin::profile_function!();

let Some(materials) = materials.0.get(materials.1 .0.clone()) else {
let Some(materials) = materials.0.get(&materials.1 .0) else {
return;
};

Expand Down Expand Up @@ -350,7 +349,7 @@ pub fn chunk_manager_update(
} = &mut *dirty_rects_resource;

//Get materials
let materials = &materials.0.get(materials.1 .0.clone()).unwrap();
let materials = &materials.0.get(&materials.1 .0).unwrap();

let manager_pos = ivec2(chunk_manager.pos.x, chunk_manager.pos.y);

Expand Down Expand Up @@ -524,17 +523,16 @@ pub fn add_chunk(
//Spawn Image
let entity = commands
.spawn((
SpriteBundle {
texture: texture_copy,
sprite: Sprite {
anchor: Anchor::TopLeft,
..Default::default()
},
transform: Transform::from_xyz(pos.x, pos.y, 0.),
Sprite {
image: texture_copy,

anchor: Anchor::TopLeft,

..Default::default()
},
ChunkComponent(index),
))
.insert(Transform::from_xyz(pos.x, pos.y, 0.))
.id();
chunk.entity = Some(entity);

Expand Down Expand Up @@ -569,59 +567,62 @@ pub fn update_manager_pos(
let diff_y = player_pos.y - chunk_manager.pos.y - LOAD_HEIGHT / 2;
let new_diff = ivec2(diff_x, diff_y);

match task_executor.poll() {
AsyncTaskStatus::Idle => {
if let Some(task) = &saving_task.0 {
if task.is_finished() {
saving_task.0 = None;
} else {
return;
}
if task_executor.is_idle() {
if let Some(task) = &saving_task.0 {
if task.is_finished() {
saving_task.0 = None;
} else {
return;
}
}

if new_diff != IVec2::ZERO {
task_executor.start(async move {
let file = File::open("assets/world/world").unwrap();
let mut buffered = BufReader::new(file);
if new_diff != IVec2::ZERO {
task_executor.start(async move {
let file = File::open("assets/world/world").unwrap();
let mut buffered = BufReader::new(file);

let chunks: HashMap<IVec2, Chunk> =
bincode::deserialize_from(&mut buffered).unwrap();
(chunks, new_diff)
});
}
let chunks: HashMap<IVec2, Chunk> =
bincode::deserialize_from(&mut buffered).unwrap();
(chunks, new_diff)
});
}
AsyncTaskStatus::Finished((mut file_chunks, diff)) => {
let chunk_textures = chunk_textures.single();
for _ in 0..diff.x.abs() {
chunk_manager.move_manager(
&mut commands,
&mut images,
&chunk_textures,
&image_entities,
&mut file_chunks,
MoveDir::X(diff.x.signum()),
);
}
}

for _ in 0..diff.y.abs() {
chunk_manager.move_manager(
&mut commands,
&mut images,
&chunk_textures,
&image_entities,
&mut file_chunks,
MoveDir::Y(diff.y.signum()),
);
}
match task_executor.poll() {
Poll::Ready(v) => {
if let Ok((mut file_chunks, diff)) = v {
let chunk_textures = chunk_textures.single();
for _ in 0..diff.x.abs() {
chunk_manager.move_manager(
&mut commands,
&mut images,
&chunk_textures,
&image_entities,
&mut file_chunks,
MoveDir::X(diff.x.signum()),
);
}

let pool = AsyncComputeTaskPool::get();
saving_task.0 = Some(pool.spawn(async move {
let file = File::create("assets/world/world").unwrap();
let mut buffered = BufWriter::new(file);
bincode::serialize_into(&mut buffered, &file_chunks).unwrap();
}));
for _ in 0..diff.y.abs() {
chunk_manager.move_manager(
&mut commands,
&mut images,
&chunk_textures,
&image_entities,
&mut file_chunks,
MoveDir::Y(diff.y.signum()),
);
}

let pool = AsyncComputeTaskPool::get();
saving_task.0 = Some(pool.spawn(async move {
let file = File::create("assets/world/world").unwrap();
let mut buffered = BufWriter::new(file);
bincode::serialize_into(&mut buffered, &file_chunks).unwrap();
}));
}
}
AsyncTaskStatus::Pending => {}
Poll::Pending => {}
}
}

Expand Down Expand Up @@ -677,7 +678,7 @@ fn extract_chunk_texture_updates(

fn prepare_chunk_gpu_textures(
queue: Res<RenderQueue>,
image_render_assets: Res<RenderAssets<Image>>,
image_render_assets: Res<RenderAssets<GpuImage>>,
mut extracted_updates: ResMut<ExtractedTextureUpdates>,
) {
for update in extracted_updates.drain(..) {
Expand Down
3 changes: 1 addition & 2 deletions src/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,7 @@ pub fn player_setup(

let player_handle = asset_server.load("player/player_sheet.png");
let animation_indices = AnimationIndices { first: 0, last: 1 };
let player_atlas_layout =
TextureAtlasLayout::from_grid(UVec2::new(24, 24), 8, 5, None, None);
let player_atlas_layout = TextureAtlasLayout::from_grid(UVec2::new(24, 24), 8, 5, None, None);
let atlas = TextureAtlas {
index: animation_indices.first,
layout: texture_atlases.add(player_atlas_layout),
Expand Down

0 comments on commit 9c48134

Please sign in to comment.