pub fn is_swappable(&self, other: &Block, above_block: Option<&Block>) -> bool {
        if let Some(above) = above_block {
            if above.state == "HANG" {
                return true;
            }
        } 

        if !other.is_empty() && self.state == "FALL" {
            return true;
        }

        if self.state == "LAND" && self.counter < LAND_TIME {
            return true;
        }

        if self.state == "IDLE" || self.kind == -1 {
            return true;
        }

        if other.kind != -1 && other.state == "MOVE" && self.state == "MOVE" {
            return true;
        }

        return false;
    }
// a block is swappable when: 
// its state isnt idle or its invisible,
// other block isnt empty and currently in fall,
// its state is land and its counter still below land time 
// valid blocks are currently swapping 
a block is swappable when:
its state isnt idle or its invisible,
other block isnt empty and currently in fall,
its state is land and its counter still below land time
valid blocks are currently swapping
a block is swappable when : its state isnt idle or its invisible other block isnt empty and currently in fall its state is land and its counter still below land time valid blocks are currently swapping
pub fn is_swappable(&self, other: &Block, above_block: Option<&Block>) -> bool {
        if let Some(above) = above_block {
            if above.state == "HANG" {
                return true;
            }
        } 
        if !other.is_empty() && self.state == "FALL" {
            return true;
        }
        if self.state == "LAND" && self.counter < LAND_TIME {
            return true;
        }
        if self.state == "IDLE" || self.kind == -1 {
            return true;
        }
        if other.kind != -1 && other.state == "MOVE" && self.state == "MOVE" {
            return true;
        }
        return false;
    }
pub fn is_swappable ( & self , other : & Block , above_block : Option < & Block > ) -> bool { if let Some ( above ) = above_block { if above . state == " " { return true ; } } if ! other . is_empty ( ) && self . state == " " { return true ; } if self . state == " " && self . counter < LAND_TIME { return true ; } if self . state == " " || self . kind == - 1 { return true ; } if other . kind != - 1 && other . state == " " && self . state == " " { return true ; } return false ; }
a block is swappable when:
its state isnt idle or its invisible,
other block isnt empty and currently in fall,
its state is land and its counter still below land time
valid blocks are currently swapping
a block is swappable when : its state isnt idle or its invisible other block isnt empty and currently in fall its state is land and its counter still below land time valid blocks are currently swapping
&self
other
&Block
above_block
Option<&Block>
&self
other
&Block
above_block
Option<&Block>