use bevy::prelude::*; use crate::world::{ tiles::{FixtureTile, FloorTile, TileState}, FIXTURE_ID_OFFSET, }; #[derive(Bundle)] pub struct FloorTilePrefab { transform: Transform, tile: FloorTile, tile_state: TileState, visibility: Visibility, } impl FloorTilePrefab { pub fn grass(position: Vec3) -> Self { FloorTilePrefab { transform: Transform::from_translation(position), tile: FloorTile { id: 1, astar_weight: 100, ..Default::default() }, tile_state: TileState { timer: Timer::from_seconds(1.0, TimerMode::Repeating), }, visibility: Visibility::Hidden, } } pub fn dirt(position: Vec3) -> Self { FloorTilePrefab { transform: Transform::from_translation(position), tile: FloorTile { id: 2, astar_weight: 85, ..Default::default() }, tile_state: TileState { timer: Timer::from_seconds(1.0, TimerMode::Repeating), }, visibility: Visibility::Hidden, } } pub fn rock(position: Vec3) -> Self { FloorTilePrefab { transform: Transform::from_translation(position), tile: FloorTile { id: 3, astar_weight: 50, ..Default::default() }, tile_state: TileState { timer: Timer::from_seconds(1.0, TimerMode::Repeating), }, visibility: Visibility::Hidden, } } pub fn air(position: Vec3) -> Self { FloorTilePrefab { transform: Transform::from_translation(position), tile: FloorTile { id: 0, opaque: false, walkable: false, ..Default::default() }, tile_state: TileState { timer: Timer::from_seconds(1.0, TimerMode::Repeating), }, visibility: Visibility::Hidden, } } pub fn bedrock(position: Vec3) -> Self { FloorTilePrefab { transform: Transform::from_translation(position), tile: FloorTile { id: 4, astar_weight: 150, ..Default::default() }, tile_state: TileState { timer: Timer::from_seconds(1.0, TimerMode::Repeating), }, visibility: Visibility::Hidden, } } pub fn spawn(self, commands: &mut Commands) { commands.spawn((self.tile, self.transform, self.tile_state, self.visibility)); } } #[derive(Bundle)] pub struct FixtureTilePrefab { transform: Transform, tile: FixtureTile, visibility: Visibility, } impl FixtureTilePrefab { pub fn dirt_wall(position: Vec3) -> Self { FixtureTilePrefab { transform: Transform::from_translation(position), tile: FixtureTile { id: FIXTURE_ID_OFFSET + 1, ..Default::default() }, visibility: Visibility::Hidden, } } pub fn rock_wall(position: Vec3) -> Self { FixtureTilePrefab { transform: Transform::from_translation(position), tile: FixtureTile { id: FIXTURE_ID_OFFSET + 2, ..Default::default() }, visibility: Visibility::Hidden, } } pub fn log(position: Vec3) -> Self { FixtureTilePrefab { transform: Transform::from_translation(position), tile: FixtureTile { id: FIXTURE_ID_OFFSET + 4, ..Default::default() }, visibility: Visibility::Hidden, } } pub fn leaves(position: Vec3) -> Self { FixtureTilePrefab { transform: Transform::from_translation(position), tile: FixtureTile { id: FIXTURE_ID_OFFSET + 5, ..Default::default() }, visibility: Visibility::Hidden, } } pub fn bedrock_wall(position: Vec3) -> Self { FixtureTilePrefab { transform: Transform::from_translation(position), tile: FixtureTile { id: 0, ..Default::default() }, visibility: Visibility::Hidden, } } pub fn spawn(self, commands: &mut Commands) -> Entity { commands .spawn((self.tile, self.transform, self.visibility)) .id() } }