Example usage for com.badlogic.gdx.scenes.scene2d Actor getRotation

List of usage examples for com.badlogic.gdx.scenes.scene2d Actor getRotation

Introduction

In this page you can find the example usage for com.badlogic.gdx.scenes.scene2d Actor getRotation.

Prototype

public float getRotation() 

Source Link

Usage

From source file:com.strategames.engine.tweens.ActorAccessor.java

License:Open Source License

@Override
public int getValues(Actor target, int tweenType, float[] returnValues) {
    switch (tweenType) {
    case POSITION_X:
        returnValues[0] = target.getX();
        return 1;
    case POSITION_Y:
        returnValues[0] = target.getY();
        return 1;
    case POSITION_XY:
        returnValues[0] = target.getX();
        returnValues[1] = target.getY();
        return 2;
    case ALPHA://  w  w w. j a  v a2s  . com
        returnValues[0] = target.getColor().a;
        return 1;
    case SCALE:
        returnValues[0] = target.getScaleX();
        returnValues[1] = target.getScaleY();
        return 2;
    case ROTATE:
        returnValues[0] = target.getRotation();
        return 1;
    default:
        assert false;
        return -1;
    }
}

From source file:com.uwsoft.editor.gdx.actors.SelectionRectangle.java

License:Apache License

public void claim(IBaseItem itm) {
    host = itm;/*  w  w  w  .j  a v a  2s  . c o  m*/
    Actor hostAsActor = getHostAsActor();
    setX(hostAsActor.getX());
    setY(hostAsActor.getY());
    setRotation(hostAsActor.getRotation());
    setWidth(hostAsActor.getWidth() * (hostAsActor instanceof LabelItem ? 1 : hostAsActor.getScaleX()));
    setHeight(hostAsActor.getHeight() * (hostAsActor instanceof LabelItem ? 1 : hostAsActor.getScaleY()));
}

From source file:com.uwsoft.editor.gdx.actors.SelectionRectangle.java

License:Apache License

public void update() {
    //setX(getHostAsActor().getX() - ((getHostAsActor().getScaleX()-1)*getHostAsActor().getWidth()/2));
    //setY(getHostAsActor().getY() - ((getHostAsActor().getScaleY()-1)*getHostAsActor().getHeight()/2));
    Actor hostAsActor = getHostAsActor();
    setX(hostAsActor.getX());/*from   ww  w.j a  v a  2  s  .com*/
    setY(hostAsActor.getY());
    setOriginX(hostAsActor.getOriginX());
    setOriginY(hostAsActor.getOriginY());
    setRotation(hostAsActor.getRotation());
    setWidth(hostAsActor.getWidth() * (hostAsActor instanceof LabelItem ? 1 : hostAsActor.getScaleX()));
    setHeight(hostAsActor.getHeight() * (hostAsActor instanceof LabelItem ? 1 : hostAsActor.getScaleY()));

    positionTransformables();
}

From source file:es.eucm.ead.editor.control.actions.model.scene.ActorTransformToEntity.java

License:Open Source License

@Override
public CompositeCommand perform(Object... args) {
    Actor actor = (Actor) args[0];
    ModelEntity modelEntity = Q.getModelEntity(actor);

    if (modelEntity == null) {
        return null;
    }//ww w. j  ava2  s. co m

    CompositeCommand compositeCommand = super.perform(args);

    if (actor.getOriginX() != modelEntity.getOriginX()) {
        compositeCommand.addCommand(new FieldCommand(modelEntity, FieldName.ORIGIN_X, actor.getOriginX()));
    }

    if (actor.getOriginY() != modelEntity.getOriginY()) {
        compositeCommand.addCommand(new FieldCommand(modelEntity, FieldName.ORIGIN_Y, actor.getOriginY()));
    }

    if (actor.getRotation() != modelEntity.getRotation()) {
        compositeCommand.addCommand(new FieldCommand(modelEntity, FieldName.ROTATION, actor.getRotation()));
    }

    if (actor.getScaleX() != modelEntity.getScaleX()) {
        compositeCommand.addCommand(new FieldCommand(modelEntity, FieldName.SCALE_X, actor.getScaleX()));
    }

    if (actor.getScaleY() != modelEntity.getScaleY()) {
        compositeCommand.addCommand(new FieldCommand(modelEntity, FieldName.SCALE_Y, actor.getScaleY()));
    }

    return compositeCommand;
}

From source file:es.eucm.ead.editor.view.widgets.groupeditor.Modifier.java

License:Open Source License

/**
 * For a given actor computes and applies the transformation of the new
 * group./*  ww w .  jav  a 2 s.  c o m*/
 * 
 * @param actor
 * @param oldGroup
 * @param newGroup
 */
public void computeTransform(Actor actor, Group newGroup) {
    Vector2 o = tmp1.set(0, 0);
    Vector2 t = tmp2.set(actor.getWidth(), 0);
    Vector2 n = tmp3.set(0, actor.getHeight());
    actor.localToAscendantCoordinates(newGroup, o);
    actor.localToAscendantCoordinates(newGroup, t);
    actor.localToAscendantCoordinates(newGroup, n);
    actor.setRotation(actor.getRotation() + actor.getParent().getRotation());
    applyTransformation(actor, o, t, n);
}

From source file:es.eucm.ead.editor.view.widgets.groupeditor.Modifier.java

License:Open Source License

/**
 * Applies the current transformation represented by the handles to given
 * actor/*from  ww  w. ja va2 s  .c  om*/
 */
public void applyTransformation(Actor influencedActor, Vector2 origin, Vector2 tangent, Vector2 normal) {
    /*
     * We are going to calculate the affine transformation for the actor to
     * fit the bounds represented by the handles. The affine transformation
     * is defined as follows:
     */
    // |a b tx|
    // |c d ty|=|Translation Matrix| x |Scale Matrix| x |Rotation
    // Matrix|
    // |0 0 1 |
    /*
     * More info about affine transformations:
     * https://people.gnome.org/~mathieu
     * /libart/libart-affine-transformation-matrices.html, To obtain the
     * matrix, we want to resolve the following equation system:
     */
    // | a b tx| |0| |o.x|
    // | c d ty|*|0|=|o.y|
    // | 0 0 1 | |1| | 1 |
    //
    // | a b tx| |w| |t.x|
    // | c d ty|*|0|=|t.y|
    // | 0 0 1 | |1| | 1 |
    //
    // | a b tx| |0| |n.x|
    // | c d ty|*|h|=|n.y|
    // | 0 0 1 | |1| | 1 |
    /*
     * where o is handles[0] (origin), t is handles[2] (tangent) and n is
     * handles[6] (normal), w is actor.getWidth() and h is
     * actor.getHeight().
     * 
     * This matrix defines that the 3 points defining actor bounds are
     * transformed to the 3 points defining modifier bounds. E.g., we want
     * that actor origin (0,0) is transformed to (handles[0].x,
     * handles[0].y), and that is expressed in the first equation.
     * 
     * Resolving these equations is obtained:
     */
    // a = (t.x - o.y) / w
    // b = (t.y - o.y) / w
    // c = (n.x - o.x) / h
    // d = (n.y - o.y) / h
    /*
     * Values for translation, scale and rotation contained by the matrix
     * can be obtained directly making operations over a, b, c and d:
     */
    // tx = o.x
    // ty = o.y
    // sx = sqrt(a^2+b^2)
    // sy = sqrt(c^2+d^2)
    // rotation = atan(c/d)
    // or
    // rotation = atan(-b/a)
    /*
     * Rotation can give two different values (this happens when there is
     * more than one way of obtaining the same transformation). To avoid
     * that, we ignore the rotation to obtain the final values.
     */

    Vector2 o = tmp1.set(origin.x, origin.y);
    Vector2 t = tmp2.set(tangent.x, tangent.y);
    Vector2 n = tmp3.set(normal.x, normal.y);

    Vector2 vt = tmp4.set(t).sub(o);
    Vector2 vn = tmp5.set(n).sub(o);

    // Ignore rotation
    float rotation = influencedActor.getRotation();
    vt.rotate(-rotation);
    vn.rotate(-rotation);

    t.set(vt).add(o);
    n.set(vn).add(o);

    float a = (t.x - o.x) / influencedActor.getWidth();
    float c = (t.y - o.y) / influencedActor.getWidth();
    float b = (n.x - o.x) / influencedActor.getHeight();
    float d = (n.y - o.y) / influencedActor.getHeight();

    // Math.sqrt gives a positive value, but it also have a negatives.
    // The
    // signum is calculated computing the current rotation
    float signumX = vt.angle() > 90.0f && vt.angle() < 270.0f ? -1.0f : 1.0f;
    float signumY = vn.angle() > 180.0f ? -1.0f : 1.0f;

    float scaleX = (float) Math.sqrt(a * a + b * b) * signumX;
    float scaleY = (float) Math.sqrt(c * c + d * d) * signumY;

    influencedActor.setScale(scaleX, scaleY);

    /*
     * To obtain the correct translation value we need to subtract the
     * amount of translation due to the origin.
     */
    tmpMatrix.setToTranslation(influencedActor.getOriginX(), influencedActor.getOriginY());
    tmpMatrix.rotate(influencedActor.getRotation());
    tmpMatrix.scale(influencedActor.getScaleX(), influencedActor.getScaleY());
    tmpMatrix.translate(-influencedActor.getOriginX(), -influencedActor.getOriginY());

    /*
     * Now, the matrix has how much translation is due to the origin
     * involved in the rotation and scaling operations
     */
    float x = o.x - tmpMatrix.getValues()[Matrix3.M02];
    float y = o.y - tmpMatrix.getValues()[Matrix3.M12];
    influencedActor.setPosition(x, y);
}

From source file:es.eucm.ead.engine.utils.EngineUtils.java

License:Open Source License

/**
 * Sets position, rotation, scale and origin in actor to meet the 3 given
 * points//w  ww .j av a2s  .  c  o m
 */
public static void applyTransformation(Actor actor, Vector2 origin, Vector2 tangent, Vector2 normal) {
    /*
     * We are going to calculate the affine transformation for the actor to
     * fit the bounds represented by the handles. The affine transformation
     * is defined as follows:
     */
    // |a b tx|
    // |c d ty|=|Translation Matrix| x |Scale Matrix| x |Rotation
    // Matrix|
    // |0 0 1 |
    /*
     * More info about affine transformations:
     * https://people.gnome.org/~mathieu
     * /libart/libart-affine-transformation-matrices.html, To obtain the
     * matrix, we want to resolve the following equation system:
     */
    // | a b tx| |0| |o.x|
    // | c d ty|*|0|=|o.y|
    // | 0 0 1 | |1| | 1 |
    //
    // | a b tx| |w| |t.x|
    // | c d ty|*|0|=|t.y|
    // | 0 0 1 | |1| | 1 |
    //
    // | a b tx| |0| |n.x|
    // | c d ty|*|h|=|n.y|
    // | 0 0 1 | |1| | 1 |
    /*
     * where o is handles[0] (origin), t is handles[2] (tangent) and n is
     * handles[6] (normal), w is actor.getWidth() and h is
     * actor.getHeight().
     * 
     * This matrix defines that the 3 points defining actor bounds are
     * transformed to the 3 points defining modifier bounds. E.g., we want
     * that actor origin (0,0) is transformed to (handles[0].x,
     * handles[0].y), and that is expressed in the first equation.
     * 
     * Resolving these equations is obtained:
     */
    // a = (t.x - o.y) / w
    // b = (t.y - o.y) / w
    // c = (n.x - o.x) / h
    // d = (n.y - o.y) / h
    /*
     * Values for translation, scale and rotation contained by the matrix
     * can be obtained directly making operations over a, b, c and d:
     */
    // tx = o.x
    // ty = o.y
    // sx = sqrt(a^2+b^2)
    // sy = sqrt(c^2+d^2)
    // rotation = atan(c/d)
    // or
    // rotation = atan(-b/a)
    /*
     * Rotation can give two different values (this happens when there is
     * more than one way of obtaining the same transformation). To avoid
     * that, we ignore the rotation to obtain the final values.
     */

    Vector2 tmp1 = Pools.obtain(Vector2.class);
    Vector2 tmp2 = Pools.obtain(Vector2.class);
    Vector2 tmp3 = Pools.obtain(Vector2.class);
    Vector2 tmp4 = Pools.obtain(Vector2.class);
    Vector2 tmp5 = Pools.obtain(Vector2.class);

    Vector2 o = tmp1.set(origin.x, origin.y);
    Vector2 t = tmp2.set(tangent.x, tangent.y);
    Vector2 n = tmp3.set(normal.x, normal.y);

    Vector2 vt = tmp4.set(t).sub(o);
    Vector2 vn = tmp5.set(n).sub(o);

    // Ignore rotation
    float rotation = actor.getRotation();
    vt.rotate(-rotation);
    vn.rotate(-rotation);

    t.set(vt).add(o);
    n.set(vn).add(o);

    Vector2 bottomLeft = Pools.obtain(Vector2.class);
    Vector2 size = Pools.obtain(Vector2.class);

    calculateBounds(actor, bottomLeft, size);

    float a = (t.x - o.x) / size.x;
    float c = (t.y - o.y) / size.x;
    float b = (n.x - o.x) / size.y;
    float d = (n.y - o.y) / size.y;

    Pools.free(tmp1);
    Pools.free(tmp2);
    Pools.free(tmp3);
    Pools.free(tmp4);
    Pools.free(tmp5);
    Pools.free(bottomLeft);
    Pools.free(size);

    // Math.sqrt gives a positive value, but it also have a negatives.
    // The
    // signum is calculated computing the current rotation
    float signumX = vt.angle() > 90.0f && vt.angle() < 270.0f ? -1.0f : 1.0f;
    float signumY = vn.angle() > 180.0f ? -1.0f : 1.0f;

    float scaleX = (float) Math.sqrt(a * a + b * b) * signumX;
    float scaleY = (float) Math.sqrt(c * c + d * d) * signumY;

    actor.setScale(scaleX, scaleY);

    /*
     * To obtain the correct translation value we need to subtract the
     * amount of translation due to the origin.
     */
    tmpMatrix.setToTranslation(actor.getOriginX(), actor.getOriginY());
    tmpMatrix.rotate(actor.getRotation());
    tmpMatrix.scale(actor.getScaleX(), actor.getScaleY());
    tmpMatrix.translate(-actor.getOriginX(), -actor.getOriginY());

    /*
     * Now, the matrix has how much translation is due to the origin
     * involved in the rotation and scaling operations
     */
    float x = o.x - tmpMatrix.getValues()[Matrix3.M02];
    float y = o.y - tmpMatrix.getValues()[Matrix3.M12];
    actor.setPosition(x, y);
}

From source file:es.eucm.ead.engine.utils.EngineUtils.java

License:Open Source License

/**
 * For a given actor computes and applies the transformation to keep the
 * same screen transformation in a new group
 * /* w  ww. ja va  2s  . com*/
 * @param actor
 * @param parent
 */
public static void computeTransformFor(Actor actor, Group parent) {
    Vector2 tmp1 = Pools.obtain(Vector2.class);
    Vector2 tmp2 = Pools.obtain(Vector2.class);
    Vector2 tmp3 = Pools.obtain(Vector2.class);
    Vector2 tmp4 = Pools.obtain(Vector2.class);
    Vector2 tmp5 = Pools.obtain(Vector2.class);

    calculateBounds(actor, tmp4, tmp5);
    Vector2 o = tmp1.set(tmp4.x, tmp4.y);
    Vector2 t = tmp2.set(tmp4.x + tmp5.x, tmp4.y);
    Vector2 n = tmp3.set(tmp4.x, tmp4.y + tmp5.y);
    actor.localToAscendantCoordinates(parent, o);
    actor.localToAscendantCoordinates(parent, t);
    actor.localToAscendantCoordinates(parent, n);
    actor.setRotation(actor.getRotation() + actor.getParent().getRotation());
    applyTransformation(actor, o, t, n);

    Pools.free(tmp1);
    Pools.free(tmp2);
    Pools.free(tmp3);
    Pools.free(tmp4);
    Pools.free(tmp5);
}

From source file:mobi.shad.s3lib.gui.GuiUtil.java

License:Apache License

/**
 * @param source/*from   w  w  w  .j  a va  2 s .  c  o m*/
 * @param destination
 */
public static void copyActor(Actor source, Actor destination) {
    destination.setBounds(source.getX(), source.getY(), source.getWidth(), source.getHeight());
    destination.setColor(source.getColor());
    destination.setName(source.getName());
    destination.setOrigin(source.getOriginX(), source.getOriginY());
    destination.setRotation(source.getRotation());
    destination.setScale(source.getScaleX(), source.getScaleY());
    destination.setTouchable(source.getTouchable());
    destination.setUserObject(source.getUserObject());
    destination.setVisible(source.isVisible());
    destination.setZIndex(source.getZIndex());
    destination.getStage();
}

From source file:net.mwplay.cocostudio.ui.parser.WidgetParser.java

License:Apache License

/**
 * ??/*from   w w  w  .  j a v a2 s .c o  m*/
 */
public Group widgetChildrenParse(CocoStudioUIEditor editor, ObjectData widget, Group parent, Actor actor) {
    Table table = new Table();
    table.setClip(widget.isClipAble());
    table.setName(actor.getName());

    Scale scale = widget.getScale();

    if (scale != null) {
        table.setScale(scale.getScaleX(), scale.getScaleY());
    }

    table.setRotation(actor.getRotation());
    table.setVisible(actor.isVisible());

    table.setTouchable(widget.isTouchEnable() ? Touchable.enabled : Touchable.childrenOnly);

    // editor.getActors().get(actor.getName()).removeValue(actor, true);
    //
    // addActor(editor, table, option);

    actor.setVisible(true);
    actor.setTouchable(Touchable.disabled);

    if (scale != null || widget.getRotation() != 0) {
        table.setTransform(true);
    }

    table.setSize(actor.getWidth(), actor.getHeight());
    table.setPosition(actor.getX(), actor.getY());

    // ?

    Scale anchorPoint = widget.getAnchorPoint();
    if (anchorPoint != null) {

        table.setOrigin(anchorPoint.getScaleX() * table.getWidth(),
                anchorPoint.getScaleY() * table.getHeight());
    }
    for (ObjectData childrenWidget : widget.getChildren()) {
        Actor childrenActor = editor.parseWidget(table, childrenWidget);
        if (childrenActor == null) {
            continue;
        }
        table.addActor(childrenActor);
    }
    sort(widget, table);

    // Widget?Table??.Widget?Table
    actor.setPosition(0, 0);
    actor.setScale(1, 1);
    table.addActorAt(0, actor);
    return table;
}