Separate floor from fixture

This commit is contained in:
StephenAdamson
2024-12-29 00:45:07 +00:00
parent 7da420a66e
commit 3aadb8bb78
24 changed files with 269 additions and 304 deletions
+85 -71
View File
@@ -1,46 +1,27 @@
use crate::constants::*;
use crate::tile::{Tile, TileState};
use crate::tile::{FixtureTile, FloorTile, TileState};
use bevy::prelude::*;
#[derive(Bundle)]
pub struct TilePrefab {
pub struct FloorTilePrefab {
transform: Transform,
sprite: Sprite,
tile: Tile,
tile: FloorTile,
tile_state: TileState,
}
impl TilePrefab {
impl FloorTilePrefab {
pub fn dirt(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
TilePrefab {
FloorTilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("dirt.png"),
image: asset_server.load("dirt_floor.png"),
..Default::default()
},
tile: Tile {
tile: FloorTile {
id: 1,
opaque: true,
visible_range: [0;8],
},
tile_state: TileState {
timer: Timer::from_seconds(1.0, TimerMode::Repeating),
},
}
}
pub fn grass(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
TilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("grass.png"),
..Default::default()
},
tile: Tile {
id: 2,
opaque: true,
visible_range: [0;8],
},
tile_state: TileState {
timer: Timer::from_seconds(1.0, TimerMode::Repeating),
},
@@ -48,68 +29,50 @@ impl TilePrefab {
}
pub fn rock(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
TilePrefab {
FloorTilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("rock.png"),
image: asset_server.load("rock_floor.png"),
..Default::default()
},
tile: Tile {
tile: FloorTile {
id: 3,
opaque: true,
visible_range: [0;8],
},
tile_state: TileState {
timer: Timer::from_seconds(1.0, TimerMode::Repeating),
},
}
}
pub fn air(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
TilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("sky.png"),
..Default::default()
},
tile: Tile {
id: 0,
opaque: false,
visible_range: [0;8],
},
tile_state: TileState {
timer: Timer::from_seconds(1.0, TimerMode::Repeating),
},
}
}
pub fn bedrock(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
TilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("bedrock.png"),
..Default::default()
},
tile: Tile {
id: 4,
opaque: true,
visible_range: [0;8],
},
tile_state: TileState {
timer: Timer::from_seconds(1.0, TimerMode::Repeating),
},
}
}
pub fn underground(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
TilePrefab {
pub fn air(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
FloorTilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("underground.png"),
image: asset_server.load("sky.png"),
..Default::default()
},
tile: Tile {
id: 5,
opaque: true,
visible_range: [0;8],
tile: FloorTile {
id: 0,
opaque: false,
..Default::default()
},
tile_state: TileState {
timer: Timer::from_seconds(1.0, TimerMode::Repeating),
},
}
}
pub fn bedrock(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
FloorTilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("bedrock_floor.png"),
..Default::default()
},
tile: FloorTile {
id: 4,
..Default::default()
},
tile_state: TileState {
timer: Timer::from_seconds(1.0, TimerMode::Repeating),
@@ -117,3 +80,54 @@ impl TilePrefab {
}
}
}
#[derive(Bundle)]
pub struct FixtureTilePrefab {
transform: Transform,
sprite: Sprite,
tile: FixtureTile,
}
impl FixtureTilePrefab {
pub fn dirt(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
FixtureTilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("dirt_wall.png"),
..Default::default()
},
tile: FixtureTile {
id: 1,
..Default::default()
},
}
}
pub fn rock(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
FixtureTilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("rock_wall.png"),
..Default::default()
},
tile: FixtureTile {
id: 3,
..Default::default()
},
}
}
pub fn bedrock(position: Vec3, asset_server: &Res<AssetServer>) -> Self {
FixtureTilePrefab {
transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)),
sprite: Sprite {
image: asset_server.load("bedrock_wall.png"),
..Default::default()
},
tile: FixtureTile {
id: 4,
..Default::default()
},
}
}
}