package squidpony.squidgrid.gui.gdx;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import squidpony.squidgrid.Direction;

import java.util.Collection;

/**
 * A simple class that wraps an Actor with its grid position, animating state, and if it is a double-width Actor.
 * Created by Tommy Ettinger on 7/22/2015.
 */
public class AnimatedEntity {
    public Actor actor;
    public int gridX, gridY;
    public boolean animating = false;
    public boolean doubleWidth = false;
    public AnimatedEntity(Actor actor, int x, int y)
    {
        this.actor = actor;
        gridX = x;
        gridY = y;
    }
    public AnimatedEntity(Actor actor, int x, int y, boolean doubleWidth)
    {
        this.actor = actor;
        gridX = x;
        gridY = y;
        this.doubleWidth = doubleWidth;
    }
    public void setText(String text)
    {
        if(actor.getClass() == Label.class)
        {
            ((Label)actor).setText(text);
        }
    }

    /**
     * Rotates this so that "up" points in the specified direction. Only some Actors can actually be rotated; Images
     * can, for example, but Labels cannot. This method is most likely to be used with
     * {@link TextCellFactory#makeDirectionMarker(Color)},
     * {@link TextCellFactory#makeDirectionMarker(Collection, float, boolean)}, or one of the directionMarker methods
     * in SquidPanel or SquidLayers, since those produce an Image (or {@link ColorChangeImage}) that can be sensibly
     * rotated to indicate a direction over a cell.
     * @param dir the direction that "up" for this should point toward
     */
    public void setDirection(Direction dir) {
        actor.setRotation(directionToDegrees(dir));
    }
    static float directionToDegrees(Direction d)
    {
        switch (d)
        {
            case UP_LEFT: return 45f;
            case LEFT: return 90f;
            case DOWN_LEFT: return 135f;
            case DOWN: return 180f;
            case DOWN_RIGHT: return 225f;
            case RIGHT: return 270f;
            case UP_RIGHT: return 315f;
            default: return 0f;
        }
    }
}
