bool place_entity_in_level(level& lvl, entity& e) { if(e.editor_force_standing()) { if(!e.move_to_standing(lvl, 128)) { return false; } } if(!entity_collides(lvl, e, MOVE_NONE)) { return true; } if(!entity_collides(lvl, e, MOVE_UP)) { while(entity_collides(lvl, e, MOVE_NONE)) { e.set_pos(e.x(), e.y()-1); if(entity_collides(lvl, e, MOVE_UP)) { return false; } } return true; } if(!entity_collides(lvl, e, MOVE_DOWN)) { while(entity_collides(lvl, e, MOVE_NONE)) { e.set_pos(e.x(), e.y()+1); if(entity_collides(lvl, e, MOVE_DOWN)) { return false; } } return true; } if(!entity_collides(lvl, e, MOVE_LEFT)) { while(entity_collides(lvl, e, MOVE_NONE)) { e.set_pos(e.x()-1, e.y()); if(entity_collides(lvl, e, MOVE_LEFT)) { return false; } } return true; } if(!entity_collides(lvl, e, MOVE_RIGHT)) { while(entity_collides(lvl, e, MOVE_NONE)) { e.set_pos(e.x()+1, e.y()); if(entity_collides(lvl, e, MOVE_RIGHT)) { return false; } } return true; } return false; }