z sorting attempt
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.7 KiB |
+26
-25
@@ -6,28 +6,29 @@ use bevy::prelude::*;
|
|||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use noise::{NoiseFn, Perlin};
|
use noise::{NoiseFn, Perlin};
|
||||||
|
|
||||||
|
pub const Z_INDEX:f32 = 0.;
|
||||||
|
|
||||||
pub fn setup_level(mut commands: Commands, asset_server: Res<AssetServer>) {
|
pub fn setup_level(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
setup_tilemap(&mut commands, &asset_server);
|
setup_tilemap(&mut commands, &asset_server);
|
||||||
|
|
||||||
// for x in -50..50 {
|
for x in -10..10 {
|
||||||
// for y in -25..25 {
|
for y in -10..10 {
|
||||||
// if random::<f32>() < 0.1 {
|
if random::<f32>() < 0.1 {
|
||||||
// commands.spawn(Citizen::new(
|
commands.spawn(Citizen::new(
|
||||||
// &asset_server,
|
&asset_server,
|
||||||
// Vec3::new(x as f32 * 64., y as f32 * 64., 1.),
|
Vec3::new(x as f32 * 64., y as f32 * 64., 0.9),
|
||||||
// ));
|
));
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup_tilemap(commands: &mut Commands, asset_server: &Res<AssetServer>) {
|
fn setup_tilemap(commands: &mut Commands, asset_server: &Res<AssetServer>) {
|
||||||
let perlin = Perlin::new(0);
|
let perlin = Perlin::new(0);
|
||||||
|
|
||||||
for x in -150..150 {
|
for x in -20..20 {
|
||||||
for y in -150..150 {
|
for y in -20..20 {
|
||||||
for z in -10..10 {
|
for z in -2..10 {
|
||||||
let position = Vec3::new(
|
let position = Vec3::new(
|
||||||
x as f32 * TILE_SIZE,
|
x as f32 * TILE_SIZE,
|
||||||
y as f32 * TILE_SIZE,
|
y as f32 * TILE_SIZE,
|
||||||
@@ -42,23 +43,15 @@ fn setup_tilemap(commands: &mut Commands, asset_server: &Res<AssetServer>) {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
let mut items: Vec<ItemBundle> = vec![];
|
let mut items: Vec<ItemBundle> = vec![];
|
||||||
if noise_value < -0.3 {
|
if noise_value < -0.4 {
|
||||||
commands
|
commands
|
||||||
.spawn(TilePrefab::rock(position, asset_server))
|
.spawn(TilePrefab::air(position, asset_server))
|
||||||
.with_children(|parent| {
|
.with_children(|parent| {
|
||||||
for item in items {
|
for item in items {
|
||||||
parent.spawn(item);
|
parent.spawn(item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if noise_value < 0. {
|
} else if noise_value < -0.2 {
|
||||||
commands
|
|
||||||
.spawn(TilePrefab::dirt(position, asset_server))
|
|
||||||
.with_children(|parent| {
|
|
||||||
for item in items {
|
|
||||||
parent.spawn(item);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if noise_value < 0.3 {
|
|
||||||
commands
|
commands
|
||||||
.spawn(TilePrefab::grass(position, asset_server))
|
.spawn(TilePrefab::grass(position, asset_server))
|
||||||
.with_children(|parent| {
|
.with_children(|parent| {
|
||||||
@@ -66,8 +59,16 @@ fn setup_tilemap(commands: &mut Commands, asset_server: &Res<AssetServer>) {
|
|||||||
parent.spawn(item);
|
parent.spawn(item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else if noise_value < 0.2 {
|
||||||
|
commands
|
||||||
|
.spawn(TilePrefab::dirt(position, asset_server))
|
||||||
|
.with_children(|parent| {
|
||||||
|
for item in items {
|
||||||
|
parent.spawn(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
commands.spawn(TilePrefab::air(position, asset_server));
|
commands.spawn(TilePrefab::rock(position, asset_server));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -22,9 +22,9 @@ fn main() {
|
|||||||
})
|
})
|
||||||
.set(ImagePlugin::default_nearest()),
|
.set(ImagePlugin::default_nearest()),
|
||||||
)
|
)
|
||||||
.insert_resource(ClearColor(Color::srgb(0.1, 0.1, 0.15)))
|
.insert_resource(ClearColor(Color::srgb(0.0, 0.0, 0.0)))
|
||||||
.add_systems(Startup, (game::setup_level, camera::spawn_panning_camera))
|
.add_systems(Startup, (game::setup_level, camera::spawn_panning_camera))
|
||||||
.add_systems(Startup, tile::tile_sprite_visibility_update)
|
.add_systems(PostStartup, tile::tile_sprite_visibility_update)
|
||||||
.add_systems(Startup, cursor::setup_curor)
|
.add_systems(Startup, cursor::setup_curor)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
FixedUpdate,
|
FixedUpdate,
|
||||||
|
|||||||
+19
-16
@@ -1,16 +1,16 @@
|
|||||||
use crate::item::Item;
|
use crate::item::Item;
|
||||||
use crate::constants::*;
|
use crate::{constants::*, game};
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
#[require(Sprite)]
|
#[require(Sprite)]
|
||||||
pub struct Tile {
|
pub struct Tile {
|
||||||
pub id: u32
|
pub id: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Tile {
|
impl Default for Tile {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {id:1}
|
Self { id: 1 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,30 +51,35 @@ pub struct DoorTile {
|
|||||||
pub locked: bool,
|
pub locked: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub fn tile_sprite_visibility_update(
|
pub fn tile_sprite_visibility_update(
|
||||||
mut query: Query<(&mut Visibility, &Transform, Entity), With<Tile>>,
|
mut query: Query<(&mut Visibility, &Transform), With<Tile>>,
|
||||||
tile_query: Query<(&Transform, &Tile)>,
|
tile_query: Query<(&Transform, &Tile)>,
|
||||||
) {
|
) {
|
||||||
for (mut visibility, transform, entity) in query.iter_mut() {
|
for (mut visibility, transform) in query.iter_mut() {
|
||||||
*visibility = Visibility::Hidden;
|
*visibility = Visibility::Hidden;
|
||||||
|
|
||||||
|
if transform.translation.z > game::Z_INDEX {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for x_offset in -1..=1 {
|
for x_offset in -1..=1 {
|
||||||
for y_offset in -1..=1 {
|
for y_offset in -1..=1 {
|
||||||
if x_offset == 0 && y_offset == 0 {
|
for z_offset in -1..=0 {
|
||||||
|
if x_offset == 0 && y_offset == 0 && z_offset == 0 {
|
||||||
continue; // Skip the current tile
|
continue; // Skip the current tile
|
||||||
}
|
}
|
||||||
|
let neighbor_position = transform.translation
|
||||||
let neighbor_position = transform.translation + Vec3::new(
|
+ Vec3::new(
|
||||||
x_offset as f32 * TILE_SIZE,
|
x_offset as f32 * TILE_SIZE,
|
||||||
y_offset as f32 * TILE_SIZE,
|
y_offset as f32 * TILE_SIZE,
|
||||||
0.0,
|
z_offset as f32 * TILE_SIZE,
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Some((neighbor_transform, neighbor_tile)) = tile_query.iter().find(|(neighbor_transform, _)| {
|
if let Some((neighbor_transform, neighbor_tile)) =
|
||||||
|
tile_query.iter().find(|(neighbor_transform, _)| {
|
||||||
neighbor_transform.translation == neighbor_position
|
neighbor_transform.translation == neighbor_position
|
||||||
}) {
|
})
|
||||||
|
{
|
||||||
if neighbor_tile.id == 0 {
|
if neighbor_tile.id == 0 {
|
||||||
*visibility = Visibility::Visible;
|
*visibility = Visibility::Visible;
|
||||||
break;
|
break;
|
||||||
@@ -83,10 +88,9 @@ pub fn tile_sprite_visibility_update(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub fn tile_item_sprite_update(
|
pub fn tile_item_sprite_update(
|
||||||
time: Res<Time>,
|
time: Res<Time>,
|
||||||
mut query_tile: Query<(Entity, &Children, &mut TileState), With<Tile>>,
|
mut query_tile: Query<(Entity, &Children, &mut TileState), With<Tile>>,
|
||||||
@@ -124,7 +128,6 @@ pub fn tile_item_sprite_update(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
pub struct TileState {
|
pub struct TileState {
|
||||||
pub timer: Timer,
|
pub timer: Timer,
|
||||||
|
|||||||
Reference in New Issue
Block a user