Side switching works!

main
Elijah Voigt 2 years ago
parent 4c548cdb45
commit d7d89d71da

@ -17,12 +17,6 @@ pub(crate) struct Display2dPlugin;
impl Plugin for Display2dPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, (initialize_camera, set_background))
.add_systems(
Update,
load_spritesheet
.run_if(on_event::<AssetEvent<Tweakfile>>())
.run_if(in_state(GameState::Loading)),
)
.add_systems(OnExit(GameState::Loading), initialize_board)
.add_systems(
Update,
@ -41,10 +35,12 @@ impl Plugin for Display2dPlugin {
set_transform
.after(game::update_board)
.run_if(any_component_changed::<BoardIndex>),
set_piece_sprite
.run_if(any_component_changed::<Side>)
.after(game::set_side),
set_tile_sprite.run_if(any_component_added::<game::Tile>),
sync_sprite.run_if(any_component_changed::<Side>),
load_spritesheet.run_if(on_event::<AssetEvent<Tweakfile>>()),
// Set Sprite for Pieces
set_sprite.run_if(any_component_changed::<GameSprite>),
// When tweakfile is updated
set_sprite.run_if(resource_exists_and_changed::<SpriteSheet>()),
),
)
.add_systems(OnEnter(DisplayState::Display2d), activate::<Display2d>)
@ -131,9 +127,7 @@ fn load_spritesheet(
) {
info!("Loading spritesheet");
let handle: Handle<tweak::Tweakfile> = server.load("martian.tweak.toml");
info!("Handle: {:?}", handle);
let tweak = tweaks.get(&handle).expect("Load tweakfiles");
info!("Tweak: {:?}", tweak);
let atlas = TextureAtlas::from_grid(
server.load(tweak.display2d.sprites.file.clone()),
Vec2::new(
@ -145,7 +139,6 @@ fn load_spritesheet(
None,
None,
);
info!("Atlas: {:?}", atlas);
commands.insert_resource(SpriteSheet {
handle: texture_atlases.add(atlas),
});
@ -224,7 +217,7 @@ fn initialize_board(board: Option<Res<Board>>, mut commands: Commands) {
board.pieces().iter().for_each(|(index, piece)| {
let side = Board::side(*index).expect("Spawn valid side");
let game_sprite: GameSprite = (*piece, side.clone()).into();
let game_sprite: GameSprite = (*piece, side).into();
parent.spawn((
game_sprite,
@ -240,44 +233,22 @@ fn initialize_board(board: Option<Res<Board>>, mut commands: Commands) {
}
}
fn set_piece_sprite(
mut events: Query<
(
&mut TextureAtlasSprite,
&mut Handle<TextureAtlas>,
&GameSprite,
),
(With<Display2d>, Or<(Added<Piece>, Changed<Side>)>),
>,
sprite_sheet: Option<Res<SpriteSheet>>,
tweaks: Res<Assets<Tweakfile>>,
server: Res<AssetServer>,
) {
let handle: Handle<Tweakfile> = server.load("martian.tweak.toml");
let tweak = tweaks
.get(&handle)
.expect("Load tweaksfile in set piece sprite");
let sprite_sheet = sprite_sheet.expect("Sprite sheet");
fn sync_sprite(mut events: Query<(&mut GameSprite, &Piece, &Side), Changed<Side>>) {
events
.iter_mut()
.for_each(|(mut sprite, mut texture_atlas, game_sprite)| {
if let Some(index) = tweak.display2d.sprites.locate(game_sprite) {
if *texture_atlas != sprite_sheet.handle {
*texture_atlas = sprite_sheet.handle.clone();
}
sprite.index = index;
}
.for_each(|(mut game_sprite, piece, side)| {
*game_sprite = (*piece, *side).into();
});
}
fn set_tile_sprite(
mut events: Query<
fn set_sprite(
mut entities: Query<
(
&mut TextureAtlasSprite,
&mut Handle<TextureAtlas>,
&GameSprite,
),
(Added<GameSprite>, With<Display2d>),
With<Display2d>,
>,
sprite_sheet: Option<Res<SpriteSheet>>,
tweaks: Res<Assets<Tweakfile>>,
@ -286,14 +257,16 @@ fn set_tile_sprite(
let handle: Handle<Tweakfile> = server.load("martian.tweak.toml");
let tweak = tweaks
.get(&handle)
.expect("Load tweaksfile in set tile sprite");
.expect("Load tweaksfile in set piece sprite");
let sprite_sheet = sprite_sheet.expect("Sprite sheet");
events
entities
.iter_mut()
.for_each(|(mut sprite, mut texture_atlas, game_sprite)| {
if let Some(index) = tweak.display2d.sprites.locate(game_sprite) {
*texture_atlas = sprite_sheet.handle.clone();
*sprite = TextureAtlasSprite::new(index);
if *texture_atlas != sprite_sheet.handle {
*texture_atlas = sprite_sheet.handle.clone();
}
sprite.index = index;
}
});
}

@ -136,7 +136,7 @@ pub(crate) struct BoardIndex {
pub y: usize,
}
#[derive(Debug, Component, PartialEq, Clone)]
#[derive(Debug, Component, PartialEq, Clone, Copy)]
pub(crate) enum Side {
A,
B,

Loading…
Cancel
Save