/* * ****************************************************************************** * * Copyright 2015 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.uwsoft.editor.controller.commands; import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.utils.Array; import com.uwsoft.editor.Overlap2DFacade; import com.uwsoft.editor.proxy.ProjectManager; import com.uwsoft.editor.renderer.factory.EntityFactory; import com.uwsoft.editor.renderer.components.MainItemComponent; import com.uwsoft.editor.renderer.components.NodeComponent; import com.uwsoft.editor.renderer.data.CompositeItemVO; import com.uwsoft.editor.renderer.utils.ComponentRetriever; import com.uwsoft.editor.utils.runtime.EntityUtils; import java.util.HashMap; /** * Created by azakhary on 6/15/2015. */ public abstract class EntityModifyRevertableCommand extends RevertableCommand { @Override public void callDoAction() { super.callDoAction(); postChange(); } @Override public void callUndoAction() { super.callUndoAction(); postChange(); } protected void postChange() { Integer parentId = EntityUtils.getEntityId(sandbox.getCurrentViewingEntity()); Entity entity = EntityUtils.getByUniqueId(parentId); // Update item library data if it was in library MainItemComponent mainItemComponent = ComponentRetriever.get(entity, MainItemComponent.class); String link = mainItemComponent.libraryLink; if(link != null && link.length() > 0) { ProjectManager projectManager = Overlap2DFacade.getInstance().retrieveProxy(ProjectManager.NAME); HashMap<String, CompositeItemVO> libraryItems = projectManager.currentProjectInfoVO.libraryItems; if (libraryItems.containsKey(mainItemComponent.libraryLink)) { CompositeItemVO itemVO = new CompositeItemVO(); itemVO.loadFromEntity(entity); itemVO.cleanIds(); libraryItems.put(mainItemComponent.libraryLink, itemVO); } Array<Entity> linkedEntities = EntityUtils.getByLibraryLink(link); for (Entity dependable : linkedEntities) { if(dependable == entity) continue; NodeComponent nodeComponent = ComponentRetriever.get(dependable, NodeComponent.class); for(Entity child: nodeComponent.children) { sandbox.getEngine().removeEntity(child); } nodeComponent.children.clear(); Engine engine = sandbox.getSceneControl().sceneLoader.engine; EntityFactory factory = sandbox.getSceneControl().sceneLoader.entityFactory; factory.initAllChildren(engine, dependable, libraryItems.get(link).composite); } } } }