Compare commits

...

2 commits

Author SHA1 Message Date
Akshat Deshpande f31176beac kinda works? ima just do a static map 2022-04-02 17:18:16 -05:00
Akshat Deshpande 77bfb414d8 oh my god I hate tilemaps
also worse camera system again
2022-04-02 15:54:28 -05:00
4 changed files with 176 additions and 81 deletions

151
Cargo.lock generated
View file

@ -346,6 +346,19 @@ dependencies = [
"syn",
]
[[package]]
name = "bevy_ecs_tilemap"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9ae9433efc108cc26600b214e6c114d7d3df650d414e2505e1e5726c3ca1938"
dependencies = [
"bevy",
"bytemuck",
"log",
"morton-encoding",
"regex",
]
[[package]]
name = "bevy_gilrs"
version = "0.6.0"
@ -572,19 +585,6 @@ dependencies = [
"uuid",
]
[[package]]
name = "bevy_simple_tilemap"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36399ddbceb2628629e5f7db89fe98e13debc5850ff6cc7cccf5933af2adefcb"
dependencies = [
"bevy",
"bevy_derive",
"bitflags",
"bytemuck",
"rayon",
]
[[package]]
name = "bevy_sprite"
version = "0.6.0"
@ -791,9 +791,9 @@ checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
[[package]]
name = "bytemuck"
version = "1.9.0"
version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee1e0e2125faccb856bf10b0a9dfa89c4c718d05ef85580dfefbdf1c422ef801"
checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc"
dependencies = [
"bytemuck_derive",
]
@ -1135,31 +1135,6 @@ dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-deque"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
dependencies = [
"cfg-if 1.0.0",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
dependencies = [
"autocfg",
"cfg-if 1.0.0",
"crossbeam-utils",
"lazy_static",
"memoffset",
"scopeguard",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.8"
@ -1250,12 +1225,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]]
name = "either"
version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "env_logger"
version = "0.8.4"
@ -1610,7 +1579,7 @@ dependencies = [
"byteorder",
"color_quant",
"num-iter",
"num-rational",
"num-rational 0.3.2",
"num-traits",
"png",
"scoped_threadpool",
@ -1771,7 +1740,7 @@ name = "ldjam-50"
version = "0.1.0"
dependencies = [
"bevy",
"bevy_simple_tilemap",
"bevy_ecs_tilemap",
]
[[package]]
@ -1952,6 +1921,16 @@ dependencies = [
"winapi",
]
[[package]]
name = "morton-encoding"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f66c953d92a578cd98a4598021e3b473520d214665917eb51dba49dc227936c8"
dependencies = [
"num",
"num-traits",
]
[[package]]
name = "naga"
version = "0.8.5"
@ -2113,6 +2092,41 @@ dependencies = [
"winapi",
]
[[package]]
name = "num"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
dependencies = [
"num-bigint",
"num-complex",
"num-integer",
"num-iter",
"num-rational 0.2.4",
"num-traits",
]
[[package]]
name = "num-bigint"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-complex"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-derive"
version = "0.3.3"
@ -2145,6 +2159,18 @@ dependencies = [
"num-traits",
]
[[package]]
name = "num-rational"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
dependencies = [
"autocfg",
"num-bigint",
"num-integer",
"num-traits",
]
[[package]]
name = "num-rational"
version = "0.3.2"
@ -2433,31 +2459,6 @@ dependencies = [
"cty",
]
[[package]]
name = "rayon"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
dependencies = [
"autocfg",
"crossbeam-deque",
"either",
"rayon-core",
]
[[package]]
name = "rayon-core"
version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
dependencies = [
"crossbeam-channel",
"crossbeam-deque",
"crossbeam-utils",
"lazy_static",
"num_cpus",
]
[[package]]
name = "rectangle-pack"
version = "0.4.2"
@ -2657,9 +2658,9 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
[[package]]
name = "slab"
version = "0.4.5"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
[[package]]
name = "slotmap"

View file

@ -7,4 +7,4 @@ edition = "2021"
[dependencies]
bevy = "0.6"
bevy_simple_tilemap = "0.7"
bevy_ecs_tilemap = "0.5"

View file

@ -1,8 +1,13 @@
use bevy::prelude::*;
use bevy_ecs_tilemap::prelude::*;
mod texture;
#[derive(Component)]
struct Player;
const PLAYER_SPEED: f32 = 5.0;
fn main() {
App::new()
.add_startup_system(setup)
@ -12,10 +17,40 @@ fn main() {
.add_system(follow_player)
.add_system(bevy::input::system::exit_on_esc_system)
.add_plugins(DefaultPlugins)
.add_plugin(TilemapPlugin)
.run()
}
fn setup(mut commands: Commands) {
fn setup(mut commands: Commands, asset_server: Res<AssetServer>, mut map_query: MapQuery) {
let texture_handle = asset_server.load("tiles.png");
let map_entity = commands.spawn().id();
let mut map = Map::new(0u16, map_entity);
let (mut layer_builder, _) = LayerBuilder::new(
&mut commands,
LayerSettings::new(
MapSize(16, 16),
ChunkSize(8, 8),
TileSize(16.0, 16.0),
TextureSize(144.0, 144.0),
),
0u16,
0u16,
);
layer_builder.set_all(TileBundle::default());
let layer_entity = map_query.build_layer(&mut commands, layer_builder, texture_handle);
map.add_layer(&mut commands, 0u16, layer_entity);
commands
.entity(map_entity)
.insert(map)
.insert(Transform::from_xyz(-128.0, -128.0, 0.0))
.insert(GlobalTransform::default());
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
}
fn spawn_player(
@ -72,18 +107,50 @@ fn movement(
) {
for mut transform in player_positions.iter_mut() {
if keyboard_input.pressed(KeyCode::A) {
transform.translation.x -= 2.;
let move_to = move_towards(
transform.translation.truncate(),
Vec2::new(
transform.translation.x - PLAYER_SPEED,
transform.translation.y,
),
1.0,
);
transform.translation = move_to.extend(0.0);
transform.rotation = Quat::from_rotation_y(std::f32::consts::PI);
}
if keyboard_input.pressed(KeyCode::D) {
transform.translation.x += 2.;
let move_to = move_towards(
transform.translation.truncate(),
Vec2::new(
transform.translation.x + PLAYER_SPEED,
transform.translation.y,
),
1.0,
);
transform.translation = move_to.extend(0.0);
transform.rotation = Quat::default();
}
if keyboard_input.pressed(KeyCode::S) {
transform.translation.y -= 2.;
let move_to = move_towards(
transform.translation.truncate(),
Vec2::new(
transform.translation.x,
transform.translation.y - PLAYER_SPEED,
),
1.0,
);
transform.translation = move_to.extend(0.0);
}
if keyboard_input.pressed(KeyCode::W) {
transform.translation.y += 2.;
let move_to = move_towards(
transform.translation.truncate(),
Vec2::new(
transform.translation.x,
transform.translation.y + PLAYER_SPEED,
),
1.0,
);
transform.translation = move_to.extend(0.0);
}
}
}
@ -104,3 +171,10 @@ fn distance_to(point1: Vec2, point2: Vec2) -> f32 {
+ ((point1.y - point2.y) * (point1.y - point2.y));
return squared.sqrt();
}
fn move_towards(a: Vec2, b: Vec2, distance: f32) -> Vec2 {
let vector = Vec2::new(b.x - a.x, b.y - a.y);
let length: f32 = (vector.x * vector.x + vector.y * vector.y).sqrt();
let unit_vector = Vec2::new(vector.x / length, vector.y / length);
return Vec2::new(a.x + unit_vector.x * 2.0, a.y + unit_vector.y * distance);
}

20
src/texture.rs Normal file
View file

@ -0,0 +1,20 @@
use bevy::{prelude::*, render::render_resource::TextureUsages};
pub fn set_texture_filters_to_nearest(
mut texture_events: EventReader<AssetEvent<Image>>,
mut textures: ResMut<Assets<Image>>,
) {
// quick and dirty, run this for all textures anytime a texture is created.
for event in texture_events.iter() {
match event {
AssetEvent::Created { handle } => {
if let Some(mut texture) = textures.get_mut(handle) {
texture.texture_descriptor.usage = TextureUsages::TEXTURE_BINDING
| TextureUsages::COPY_SRC
| TextureUsages::COPY_DST;
}
}
_ => (),
}
}
}