package com.uwsoft.editor.controller.commands; import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.SnapshotArray; import com.commons.MsgAPI; import com.uwsoft.editor.Overlap2DFacade; import com.uwsoft.editor.renderer.components.DimensionsComponent; import com.uwsoft.editor.renderer.components.NodeComponent; import com.uwsoft.editor.renderer.components.TransformComponent; import com.uwsoft.editor.renderer.utils.ComponentRetriever; import com.uwsoft.editor.utils.runtime.EntityUtils; import java.util.ArrayList; /** * Created by Osman on 01.08.2015. */ public class ItemTransformCommand extends EntityModifyRevertableCommand { private Array<Object> payload; private Integer entityId; @Override public void doAction() { payload = getNotification().getBody(); Entity entity = (Entity) payload.get(0); Object[] newData = (Object[]) payload.get(2); entityId = EntityUtils.getEntityId(entity); Vector2 newPos = (Vector2) newData[0]; Vector2 newSize = (Vector2) newData[1]; Vector2 newScale = (Vector2) newData[2]; Float newRotation = (Float) newData[3]; TransformComponent transformComponent = ComponentRetriever.get(entity, TransformComponent.class); DimensionsComponent dimensionsComponent = ComponentRetriever.get(entity, DimensionsComponent.class); if(newPos != null) transformComponent.x = newPos.x; if(newPos != null) transformComponent.y = newPos.y; if(newSize != null) dimensionsComponent.width = newSize.x; if(newSize != null) dimensionsComponent.height = newSize.y; if(newScale != null) transformComponent.scaleX = newScale.x; if(newScale != null) transformComponent.scaleY = newScale.y; if(newRotation != null) transformComponent.rotation = newRotation; Overlap2DFacade.getInstance().sendNotification(MsgAPI.ITEM_DATA_UPDATED, entity); } @Override public void undoAction() { Entity entity = EntityUtils.getByUniqueId(entityId); Object[] prevData = (Object[]) payload.get(1); Vector2 prevPos = (Vector2) prevData[0]; Vector2 prevSize = (Vector2) prevData[1]; Vector2 prevScale = (Vector2) prevData[2]; Float prevRotation = (Float) prevData[3]; TransformComponent transformComponent = ComponentRetriever.get(entity, TransformComponent.class); DimensionsComponent dimensionsComponent = ComponentRetriever.get(entity, DimensionsComponent.class); transformComponent.x = prevPos.x; transformComponent.y = prevPos.y; dimensionsComponent.width = prevSize.x; dimensionsComponent.height = prevSize.y; if (dimensionsComponent.boundBox != null) { dimensionsComponent.boundBox.width = dimensionsComponent.width; dimensionsComponent.boundBox.height = dimensionsComponent.height; } transformComponent.scaleX = prevScale.x; transformComponent.scaleY = prevScale.y; transformComponent.rotation = prevRotation; Overlap2DFacade.getInstance().sendNotification(MsgAPI.ITEM_DATA_UPDATED, entity); } }