|
|
|
|
@ -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) {
|
|
|
|
|
if *texture_atlas != sprite_sheet.handle {
|
|
|
|
|
*texture_atlas = sprite_sheet.handle.clone();
|
|
|
|
|
*sprite = TextureAtlasSprite::new(index);
|
|
|
|
|
}
|
|
|
|
|
sprite.index = index;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|