Arrastrar y soltar en libGDX (destino y origen)

Estoy intentando armar un sistema de drag and drop en libGDX con la ayuda de la class DragAndDrop. Tengo el sistema típico en el que puedes arrastrar algo dentro de una caja.

Hasta ahora está funcionando toda la masa, no sé si lo estoy haciendo de la manera más óptima, pero el problema es que uno de los objects arrastrables contiene dos objectives más.

Digamos que tengo todos los objects arrastrables a la izquierda y los cuadros (los objectives) a la derecha.

Esto es lo que hago para cada object arrastrable:

dragAndDrop = new DragAndDrop(); dragAndDrop.addSource(new Source(icon) { @Override public Payload dragStart (InputEvent event, float x, float y, int pointer) { Payload payload = new Payload(); payload.setDragActor(drag); payload.setValidDragActor(valid); payload.setObject(icon); icon.addAction(Actions.alpha(0.7f)); return payload; } @Override public void dragStop(InputEvent event, float x, float y, int pointer, Payload payload, Target target){ icon.addAction(Actions.alpha(1)); if(target!=null){ draggedInDragBox((CommandBin) target.getActor()); } } }); 

El object DraggableObject se expande y contiene el icono de la image. Eso es lo que le paso al constructor de la fuente. (Tal vez debería pasar todo el object [esto]). También tengo las imágenes arrastradas y válidas en DraggableObject. La textura real es la misma para todos los íconos, válidos y de arrastre, pero creo que necesito los 3 objects para que funcione. ¿Estoy en lo cierto?

Luego en los cuadros que hago:

 dragAndDrop.addTarget(new Target(this) { //Logic is in source public boolean drag (Source source, Payload payload, float x, float y, int pointer) { return true; } public void reset (Source source, Payload payload) { } public void drop (Source source, Payload payload, float x, float y, int pointer) { } }); 

Así que paso el object DragBox al constructor del objective. Como pueden ver, toda la lógica está en la Fuente. Culo que puedes decir allí. Lo que hago es. Si target =! null significa que dejamos caer el object en un lugar válido, por lo que quiero agregar el DraggableObject al DragBox (addActor).

 public void draggedInDragBox(DraggableObject do){ //We add the command in the box addCommand(_this); //This simply calls addActor(do) in DragBox //We create a new draggable object to be able to use it again DraggableObject drOb = new DraggableObject(); northController.draggableObjectsContainer.addActor(drOb); } 

La diferencia entre un DraggableObject normal y el que muestra subDragBoxes (que extiende el primero) es esto en el constructor:

 public RedDraggableBox() { super(); subdraggableBox[0] = new DraggableBox(); subdraggableBox[1] = new DraggableBox(); } 

Y cuando se arrastra a un cuadro principal, simplemente llamo a:

 public void showSubDraggableBoxes(){ addActor(subdraggableBox[0]); addActor(subdraggableBox[1]); icon.toFront(); } 

Esto es lo que quiero lograr.

Supongamos que el rojo es un object especial DraggableObject que crea cuadros subdivididos cuando se coloca en un cuadro que se puede arrastrar. Entonces, cuando está allí en el cuadro, agrego al grupo DraggableObject los dos cuadros. Actualmente puedo arrastrar cualquier object DraggableObject a un cuadro principal. Cuando arrastro un object a un cuadro que ya tiene un object, destruye el object actual y coloca el nuevo en su lugar, que es exactamente lo que quiero que haga.

El problema con los DraggableObjects rojos es que cuando arrastro algo a uno de sus subDraggableBoxes, borra el object rojo que se puede arrastrar (con los recuadros) y lo sustituye por el nuevo en el DraggableBox principal. Entonces, para cuando RedDragBox esté visible: RedDragableBox.parent () -> RedDraggableObject, RedDraggableObject.parent () -> DraggableBox (el principal).

Gracias por adelantado.