package com.cardshifter.gdx.ui.cards;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.cardshifter.api.outgoing.UsableActionMessage;
import com.cardshifter.api.outgoing.ZoneChangeMessage;
import com.cardshifter.gdx.TargetStatus;
import com.cardshifter.gdx.TargetableCallback;
import com.cardshifter.gdx.ui.zones.ZoneView;
/**
* Created by Simon on 2/12/2015.
*/
public abstract class DefaultCardView implements CardView {
@Override
public void zoneMove(ZoneChangeMessage message, ZoneView destinationZone, final CardView newCardView) {
Gdx.app.log("CardView", "Zonechange: " + message + " to " + destinationZone);
if (destinationZone == null) {
entityRemoved();
return;
}
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
final Actor next = newCardView.getActor();
Vector2 oldPos = new Vector2();
getActor().localToStageCoordinates(oldPos);
Stage stage = getActor().getStage();
stage.addActor(getActor());
getActor().setPosition(oldPos.x, oldPos.y);
next.addAction(Actions.alpha(0.7f, 0.3f));
Gdx.app.log("test", "next is " + next);
getActor().addAction(Actions.delay(0.2f, Actions.run(new Runnable() {
@Override
public void run() {
Actor actor = next;
while (actor != null) {
Gdx.app.log("test", "actor " + actor + " pos " + actor.getX() + ", " + actor.getY());
actor = actor.getParent();
}
Gdx.app.log("test", "next is " + next);
Vector2 destination = new Vector2(0, 0);
Gdx.app.log("CardView", "Position1 " + next.getX() + ", " + next.getY());
destination = next.localToStageCoordinates(destination);
Gdx.app.log("CardView", "Position2 " + destination.x + ", " + destination.y);
// next.addAction(Actions.hide());
getActor().addAction(Actions.sequence(Actions.moveTo(destination.x, destination.y, 0.2f), Actions.run(new Runnable() {
@Override
public void run() {
final float delay = 0.3f;
getActor().addAction(Actions.sequence(Actions.fadeOut(delay), removeThis()));
next.addAction(Actions.sequence(Actions.show(), Actions.fadeIn(delay)));
}
})));
}
})));
}
});
}
@Override
public void remove() {
getActor().remove();
}
@Override
public void setTargetable(TargetStatus targetable, TargetableCallback callback) {
}
@Override
public void usableAction(UsableActionMessage message) {
}
@Override
public void clearUsableActions() {
}
@Override
public void entityRemoved() {
getActor().addAction(Actions.sequence(Actions.fadeOut(1f), removeThis()));
}
private Action removeThis() {
return Actions.run(new Runnable() {
@Override
public void run() {
getActor().remove();
}
});
}
}