package com.uwsoft.editor.controller.commands.component;
import com.badlogic.ashley.core.Entity;
import com.badlogic.gdx.graphics.g2d.Animation;
import com.uwsoft.editor.controller.commands.EntityModifyRevertableCommand;
import com.uwsoft.editor.renderer.components.sprite.SpriteAnimationComponent;
import com.uwsoft.editor.renderer.components.sprite.SpriteAnimationStateComponent;
import com.uwsoft.editor.renderer.utils.ComponentRetriever;
import com.uwsoft.editor.utils.runtime.EntityUtils;
/**
* Created by CyberJoe on 6/18/2015.
*/
public class UpdateSpriteAnimationDataCommand extends EntityModifyRevertableCommand {
private Integer entityId;
private int previousFps;
private String previousAnimationName;
@Override
public void doAction() {
Object[] payload = getNotification().getBody();
Entity entity = (Entity) payload[0];
entityId = EntityUtils.getEntityId(entity);
int fps = (int) payload[1];
String animName = (String) payload[2];
Animation.PlayMode playMode = (Animation.PlayMode) payload[3];
SpriteAnimationComponent spriteAnimationComponent = ComponentRetriever.get(entity, SpriteAnimationComponent.class);
SpriteAnimationStateComponent spriteAnimationStateComponent = ComponentRetriever.get(entity, SpriteAnimationStateComponent.class);
previousFps = spriteAnimationComponent.fps;
previousAnimationName = spriteAnimationComponent.currentAnimation;
spriteAnimationComponent.fps = fps;
spriteAnimationComponent.currentAnimation = animName;
spriteAnimationComponent.playMode = playMode;
spriteAnimationStateComponent.set(spriteAnimationComponent);
}
@Override
public void undoAction() {
Entity entity = EntityUtils.getByUniqueId(entityId);
SpriteAnimationComponent spriteAnimationComponent = ComponentRetriever.get(entity, SpriteAnimationComponent.class);
SpriteAnimationStateComponent spriteAnimationStateComponent = ComponentRetriever.get(entity, SpriteAnimationStateComponent.class);
spriteAnimationComponent.fps = previousFps;
spriteAnimationComponent.currentAnimation = previousAnimationName;
spriteAnimationStateComponent.set(spriteAnimationComponent);
}
public static Object payload(Entity entity, int fps, String animName, Animation.PlayMode playMode) {
Object[] payload = new Object[4];
payload[0] = entity;
payload[1] = fps;
payload[2] = animName;
payload[3] = playMode;
return payload;
}
}