@Override
  protected void processEntity(Entity entity, float deltaTime) {
    CollisionComponent collisionComponent = ComponentMappers.COLLISION.get(entity);
    TypeComponent typeComponent = ComponentMappers.TYPE.get(entity);

    if (typeComponent.type == GameObjectType.TYPE_PLAYER) {
      if (collisionComponent.isBegin)
        processPlayerBeginCollision(entity, collisionComponent.entity);
      else processPlayerEndCollision(entity, collisionComponent.entity);
    }
    entity.remove(CollisionComponent.class);
  }
 private void processPlayerEndCollision(Entity playerEntity, Entity otherEntity) {
   TypeComponent typeComponent = ComponentMappers.TYPE.get(otherEntity);
   CapsuleControlComponent capsuleControlComponent =
       ComponentMappers.CAPSULE_CONTROL.get(playerEntity);
   StateComponent stateComponent = ComponentMappers.STATE.get(otherEntity);
   if (typeComponent.type == GameObjectType.TYPE_SAFE_CAPSULE
       && capsuleControlComponent != null
       && capsuleControlComponent.isExiting) {
     playerEntity.remove(CapsuleControlComponent.class);
     stateComponent.state = States.STATE_FREE;
     ComponentMappers.PHYSIC.get(playerEntity).body.getFixtureList().get(0).setSensor(false);
   }
 }
  private void processPlayerBeginCollision(Entity playerEntity, Entity otherEntity) {
    TypeComponent typeComponent = ComponentMappers.TYPE.get(otherEntity);
    CapsuleControlComponent capsuleControlComponent =
        ComponentMappers.CAPSULE_CONTROL.get(playerEntity);
    StateComponent stateComponent = ComponentMappers.STATE.get(otherEntity);
    if (typeComponent.type == GameObjectType.TYPE_SAFE_CAPSULE
        && capsuleControlComponent == null
        && stateComponent.state == States.STATE_FREE) {
      stateComponent.state = States.STATE_BUSY;
      Body playerBody = ComponentMappers.PHYSIC.get(playerEntity).body;
      Body safeCapsuleBody = ComponentMappers.PHYSIC.get(otherEntity).body;
      playerBody.getFixtureList().get(0).setSensor(true);

      Vector2 posDiff = playerBody.getWorldCenter().sub(playerBody.getPosition()).cpy();
      playerBody.setTransform(safeCapsuleBody.getWorldCenter().sub(posDiff), playerBody.getAngle());

      WeldJointDef jointDef = new WeldJointDef();
      jointDef.initialize(playerBody, safeCapsuleBody, safeCapsuleBody.getWorldCenter());
      safeCapsuleBody.getWorld().createJoint(jointDef);

      JetpackControlComponent jetpackControlComponent = ComponentMappers.JETPACK.get(playerEntity);
      jetpackControlComponent.isActive = false;
      TurnControlComponent turnControlComponent = ComponentMappers.CONTROL.get(playerEntity);
      turnControlComponent.isActive = false;
      PooledEngine engine = (PooledEngine) this.getEngine();
      playerEntity.add(
          engine
              .createComponent(CapsuleControlComponent.class)
              .init(jetpackControlComponent.jetpackActivateKey));
    }
    if (typeComponent.type == GameObjectType.TYPE_ASTEROID) {
      Body playerBody = ComponentMappers.PHYSIC.get(playerEntity).body;
      if (!playerBody.getFixtureList().get(0).isSensor()) {
        OxygenComponent oxygenComponent = ComponentMappers.OXYGEN.get(playerEntity);
        if (oxygenComponent != null)
          oxygenComponent.addModificator(OxygenModificator.createInstantAsteroidModificator());
      }
    }
  }