I don't know if it's the best place to ask this, but I've been having issues with trying to make minesweeper with bevy.
I tried making a function that would give the number of mines around the tile that was clicked if it wasn't a mine. Then, I wanted to make it so that when the number of mines around the clicked tiles is 0, it reveals the surrounding tiles. Finally, I tried making the function recursive by rerunning it on the empty surrounding tiles.
The issue is that it seems that certain tiles with no mines surrounding them don't reveal the surrounding tiles.
Here's the portion of the code I am talking about (I know it's pretty bad):
fn find_surrounding_mines(
mut set: ParamSet<(
EventReader<TileEntity>,
EventWriter<TileEntity>,
)>,
mut surrounding_mines: EventWriter<SurroundingMines>,
mut query_board: Query<&mut Board>,
mut change_tile_image: EventWriter<ChangeTileImage>,
mut query_mine: Query<(&Mine, &mut Tile)>) {
let dy: [i8; 8] = [-1, -1, -1, 0, 0, 1, 1, 1];
let dx: [i8; 8] = [-1, 0, 1, -1, 1, -1, 0, 1];
let board = query_board.single_mut();
let mut num_mine: u8 = 0;
let mut y: u8 = 0;
let mut copy_x: usize = 0;
let mut tile_read:bool = false;
let mut copy_num_mine:u8 = 0;
for tile in set.p0().read(){
for (row_index, vector) in board.tiles.iter().enumerate(){
if let Some(x) = vector.iter().position(|&x|x == tile.0) {
copy_x = x;
y = row_index as u8;
for i in 0..8{
if x as i8 + dx[i] >= 0 && x as i8 + dx[i] < board.width as i8 && y as i8 + dy[i] >= 0 && y as i8 +dy[i] < board.height as i8{
if let Ok((_mine,mut tile)) = query_mine.get_mut(board.tiles[(y as i8 + dy[i]) as usize][(x as i8+ dx[i]) as usize]){
num_mine += 1;
tile.hidden = false;
}
}
}
break;
}
}
surrounding_mines.send(SurroundingMines(num_mine));
change_tile_image.send(ChangeTileImage{tile: tile.0, asset: "Minesweeper_LAZARUS_21x21_".to_string() + &num_mine.to_string() + ".png"});
copy_num_mine = num_mine;
num_mine = 0;
tile_read = true;
}
if copy_num_mine == 0 && tile_read{
tile_read = false;
for i in 0..8{
if copy_x as i8 + dx[i] >= 0 && copy_x as i8 + dx[i] < board.width as i8 && y as i8 + dy[i] >= 0 && y as i8 +dy[i] < board.height as i8{
if let Ok((_mine, mut tile)) = query_mine.get(board.tiles[(y as i8 + dy[i]) as usize][(copy_x as i8 + dx[i]) as usize]){
continue;
}else{
println!("{:?}", (y as i8 + dy[i], copy_x as i8 + dx[i]));
set.p1().send(TileEntity(board.tiles[(y as i8 + dy[i]) as usize][(copy_x as i8 + dx[i]) as usize]));
}
}
}
}
}
I think it should be inescapable. At least, the consequences from it should. The modlog is still available, and there is nothing that stops you from creating your own community. If we take the Ohio analogy tho, claiming yourself to be a sovereign citizen won't stop the police from applying their authority on you. They use violence in order to apply it as well. In Lemmy, creating your community in an instance may not stop an admin, but will stop a moderator. A step further to that would be making your own instance, and I know it's not perfect, but it's already way more power to the users and less to the moderators.
I see it more as someone kicking you out of a group. You can ask the others if they disagree and want to form another group with you. If the others agree, they can leave the group, and if not, they'll stay because they agree with the decision. It's not a perfect model, but gives way more agency to the user than it does to the moderators/admins. For example, on reddit, if you were banned from a community, you could make your own, but if you were banned from the site, then not much could've been done. People also don't agree with the moderation on ml, so they moved on to .world, db0 or lemm.ee. So far, it works.
I would advise against using the argument of it being "just words", as it removes the intention behind your words, and can lead to some more right wing talking points (not that you are right wing).