167 lines
4.5 KiB
Rust
167 lines
4.5 KiB
Rust
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()
|
|
}
|
|
}
|