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

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

Loading…
Cancel
Save