/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
******************************************************************************/
package com.badlogic.gdx.scenes.scene2d.actions;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.utils.Pool;
import com.badlogic.gdx.utils.Pools;
/**
* Static convenience methods for using pooled actions, intended for static import.
*
* @author Nathan Sweet
*/
public class Actions {
/** Returns a new or pooled action of the specified type. */
static public <T extends Action> T action(Class<T> type) {
Pool<T> pool = Pools.get(type);
T action = pool.obtain();
action.setPool(pool);
return action;
}
static public AddAction add(Actor targetActor, Action action) {
AddAction addAction = action(AddAction.class);
addAction.setTargetActor(targetActor);
addAction.setAction(action);
return addAction;
}
/** Moves the actor instantly. */
static public MoveToAction moveTo(float x, float y) {
return moveTo(x, y, 0, null);
}
static public MoveToAction moveTo(float x, float y, float duration) {
return moveTo(x, y, duration, null);
}
static public MoveToAction moveTo(float x, float y, float duration, Interpolation interpolation) {
MoveToAction action = action(MoveToAction.class);
action.setPosition(x, y);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Moves the actor instantly. */
static public MoveByAction moveBy(float amountX, float amountY) {
return moveBy(amountX, amountY, 0, null);
}
static public MoveByAction moveBy(float amountX, float amountY, float duration) {
return moveBy(amountX, amountY, duration, null);
}
static public MoveByAction moveBy(float amountX, float amountY, float duration, Interpolation interpolation) {
MoveByAction action = action(MoveByAction.class);
action.setAmount(amountX, amountY);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Sizes the actor instantly. */
static public SizeToAction sizeTo(float x, float y) {
return sizeTo(x, y, 0, null);
}
static public SizeToAction sizeTo(float x, float y, float duration) {
return sizeTo(x, y, duration, null);
}
static public SizeToAction sizeTo(float x, float y, float duration, Interpolation interpolation) {
SizeToAction action = action(SizeToAction.class);
action.setSize(x, y);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Sizes the actor instantly. */
static public SizeByAction sizeBy(float amountX, float amountY) {
return sizeBy(amountX, amountY, 0, null);
}
static public SizeByAction sizeBy(float amountX, float amountY, float duration) {
return sizeBy(amountX, amountY, duration, null);
}
static public SizeByAction sizeBy(float amountX, float amountY, float duration, Interpolation interpolation) {
SizeByAction action = action(SizeByAction.class);
action.setAmount(amountX, amountY);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Scales the actor instantly. */
static public ScaleToAction scaleTo(float x, float y) {
return scaleTo(x, y, 0, null);
}
static public ScaleToAction scaleTo(float x, float y, float duration) {
return scaleTo(x, y, duration, null);
}
static public ScaleToAction scaleTo(float x, float y, float duration, Interpolation interpolation) {
ScaleToAction action = action(ScaleToAction.class);
action.setScale(x, y);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Scales the actor instantly. */
static public ScaleByAction scaleBy(float amountX, float amountY) {
return scaleBy(amountX, amountY, 0, null);
}
static public ScaleByAction scaleBy(float amountX, float amountY, float duration) {
return scaleBy(amountX, amountY, duration, null);
}
static public ScaleByAction scaleBy(float amountX, float amountY, float duration, Interpolation interpolation) {
ScaleByAction action = action(ScaleByAction.class);
action.setAmount(amountX, amountY);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Rotates the actor instantly. */
static public RotateToAction rotateTo(float rotation) {
return rotateTo(rotation, 0, null);
}
static public RotateToAction rotateTo(float rotation, float duration) {
return rotateTo(rotation, duration, null);
}
static public RotateToAction rotateTo(float rotation, float duration, Interpolation interpolation) {
RotateToAction action = action(RotateToAction.class);
action.setRotation(rotation);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Rotates the actor instantly. */
static public RotateByAction rotateBy(float rotationAmount) {
return rotateBy(rotationAmount, 0, null);
}
static public RotateByAction rotateBy(float rotationAmount, float duration) {
return rotateBy(rotationAmount, duration, null);
}
static public RotateByAction rotateBy(float rotationAmount, float duration, Interpolation interpolation) {
RotateByAction action = action(RotateByAction.class);
action.setAmount(rotationAmount);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Sets the actor's color instantly. */
static public ColorAction color(Color color) {
return color(color, 0, null);
}
/** Transitions from the color at the time this action starts to the specified color. */
static public ColorAction color(Color color, float duration) {
return color(color, duration, null);
}
/** Transitions from the color at the time this action starts to the specified color. */
static public ColorAction color(Color color, float duration, Interpolation interpolation) {
ColorAction action = action(ColorAction.class);
action.setEndColor(color);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Sets the actor's alpha instantly. */
static public AlphaAction alpha(float a) {
return alpha(a, 0, null);
}
/** Transitions from the alpha at the time this action starts to the specified alpha. */
static public AlphaAction alpha(float a, float duration) {
return alpha(a, duration, null);
}
/** Transitions from the alpha at the time this action starts to the specified alpha. */
static public AlphaAction alpha(float a, float duration, Interpolation interpolation) {
AlphaAction action = action(AlphaAction.class);
action.setAlpha(a);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Transitions from the alpha at the time this action starts to an alpha of 0. */
static public AlphaAction fadeOut(float duration) {
return alpha(0, duration, null);
}
/** Transitions from the alpha at the time this action starts to an alpha of 0. */
static public AlphaAction fadeOut(float duration, Interpolation interpolation) {
AlphaAction action = action(AlphaAction.class);
action.setAlpha(0);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
/** Transitions from the alpha at the time this action starts to an alpha of 1. */
static public AlphaAction fadeIn(float duration) {
return alpha(1, duration, null);
}
/** Transitions from the alpha at the time this action starts to an alpha of 1. */
static public AlphaAction fadeIn(float duration, Interpolation interpolation) {
AlphaAction action = action(AlphaAction.class);
action.setAlpha(1);
action.setDuration(duration);
action.setInterpolation(interpolation);
return action;
}
static public VisibleAction show() {
return visible(true);
}
static public VisibleAction hide() {
return visible(false);
}
static public VisibleAction visible(boolean visible) {
VisibleAction action = action(VisibleAction.class);
action.setVisible(visible);
return action;
}
static public TouchableAction touchable(Touchable touchable) {
TouchableAction action = action(TouchableAction.class);
action.setTouchable(touchable);
return action;
}
static public RemoveActorAction removeActor() {
return action(RemoveActorAction.class);
}
static public RemoveActorAction removeActor(Actor removeActor) {
RemoveActorAction action = action(RemoveActorAction.class);
action.setRemoveActor(removeActor);
return action;
}
static public DelayAction delay(float duration) {
DelayAction action = action(DelayAction.class);
action.setDuration(duration);
return action;
}
static public DelayAction delay(float duration, Action delayedAction) {
DelayAction action = action(DelayAction.class);
action.setDuration(duration);
action.setAction(delayedAction);
return action;
}
static public SequenceAction sequence(Action action1) {
SequenceAction action = action(SequenceAction.class);
action.addAction(action1);
return action;
}
static public SequenceAction sequence(Action action1, Action action2) {
SequenceAction action = action(SequenceAction.class);
action.addAction(action1);
action.addAction(action2);
return action;
}
static public SequenceAction sequence(Action action1, Action action2, Action action3) {
SequenceAction action = action(SequenceAction.class);
action.addAction(action1);
action.addAction(action2);
action.addAction(action3);
return action;
}
static public SequenceAction sequence(Action action1, Action action2, Action action3, Action action4) {
SequenceAction action = action(SequenceAction.class);
action.addAction(action1);
action.addAction(action2);
action.addAction(action3);
action.addAction(action4);
return action;
}
static public SequenceAction sequence(Action action1, Action action2, Action action3, Action action4, Action action5) {
SequenceAction action = action(SequenceAction.class);
action.addAction(action1);
action.addAction(action2);
action.addAction(action3);
action.addAction(action4);
action.addAction(action5);
return action;
}
static public SequenceAction sequence(Action... actions) {
SequenceAction action = action(SequenceAction.class);
for (int i = 0, n = actions.length; i < n; i++)
action.addAction(actions[i]);
return action;
}
static public SequenceAction sequence() {
return action(SequenceAction.class);
}
static public ParallelAction parallel(Action action1) {
ParallelAction action = action(ParallelAction.class);
action.addAction(action1);
return action;
}
static public ParallelAction parallel(Action action1, Action action2) {
ParallelAction action = action(ParallelAction.class);
action.addAction(action1);
action.addAction(action2);
return action;
}
static public ParallelAction parallel(Action action1, Action action2, Action action3) {
ParallelAction action = action(ParallelAction.class);
action.addAction(action1);
action.addAction(action2);
action.addAction(action3);
return action;
}
static public ParallelAction parallel(Action action1, Action action2, Action action3, Action action4) {
ParallelAction action = action(ParallelAction.class);
action.addAction(action1);
action.addAction(action2);
action.addAction(action3);
action.addAction(action4);
return action;
}
static public ParallelAction parallel(Action action1, Action action2, Action action3, Action action4, Action action5) {
ParallelAction action = action(ParallelAction.class);
action.addAction(action1);
action.addAction(action2);
action.addAction(action3);
action.addAction(action4);
action.addAction(action5);
return action;
}
static public ParallelAction parallel(Action... actions) {
ParallelAction action = action(ParallelAction.class);
for (int i = 0, n = actions.length; i < n; i++)
action.addAction(actions[i]);
return action;
}
static public ParallelAction parallel() {
return action(ParallelAction.class);
}
static public RepeatAction repeat(int count, Action repeatedAction) {
RepeatAction action = action(RepeatAction.class);
action.setCount(count);
action.setAction(repeatedAction);
return action;
}
static public RepeatAction forever(Action repeatedAction) {
RepeatAction action = action(RepeatAction.class);
action.setCount(RepeatAction.FOREVER);
action.setAction(repeatedAction);
return action;
}
static public RunnableAction run(Runnable runnable) {
RunnableAction action = action(RunnableAction.class);
action.setRunnable(runnable);
return action;
}
static public LayoutAction layout(boolean enabled) {
LayoutAction action = action(LayoutAction.class);
action.setLayoutEnabled(enabled);
return action;
}
static public AfterAction after(Action action) {
AfterAction afterAction = action(AfterAction.class);
afterAction.setAction(action);
return afterAction;
}
}