Support libGDX atlas importing
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
= Editor =
|
||||
- Use Distance Field fonts for GUI
|
||||
- Add Editor performance settings (MSAA, OpenGL 3)
|
||||
- Add multiple atlas packing settings
|
||||
- Add Import libGDX atlas format
|
||||
- Huge improvements to Tiled Plugin:
|
||||
* Sprite and Spine animated Tiles
|
||||
* UI improvements and general refactoring
|
||||
|
||||
@@ -631,7 +631,7 @@ public class ProjectManager extends Proxy {
|
||||
private boolean deleteSingleImage(String resolutionName, String imageName) {
|
||||
String imagesPath = currentProjectPath + "/assets/" + resolutionName + "/images" + File.separator;
|
||||
String filePath = imagesPath + imageName + ".png";
|
||||
currentProjectInfoVO.imagesPacks.get("main").regions.remove(imageName);
|
||||
deleteRegionFromPack(currentProjectInfoVO.imagesPacks, imageName);
|
||||
if (!(new File(filePath)).delete()) {
|
||||
filePath = imagesPath + imageName + ".9.png";
|
||||
return (new File(filePath)).delete();
|
||||
@@ -670,7 +670,7 @@ public class ProjectManager extends Proxy {
|
||||
for (JsonValue entry = slotEntry.child; entry != null; entry = entry.next) {
|
||||
String name = spineName + entry.getString("name", entry.name);
|
||||
deleteSingleImage(resolutionName, name);
|
||||
currentProjectInfoVO.animationsPacks.get("main").regions.remove(name);
|
||||
deleteRegionFromPack(currentProjectInfoVO.animationsPacks, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -695,10 +695,15 @@ public class ProjectManager extends Proxy {
|
||||
f.delete();
|
||||
}
|
||||
}
|
||||
currentProjectInfoVO.animationsPacks.get("main").regions.remove(spriteName);
|
||||
deleteRegionFromPack(currentProjectInfoVO.animationsPacks, spriteName);
|
||||
return deleteDirectory(filePath);
|
||||
}
|
||||
|
||||
public void deleteRegionFromPack(HashMap<String, TexturePackVO> map, String region) {
|
||||
for (TexturePackVO vo : map.values())
|
||||
vo.regions.remove(region);
|
||||
}
|
||||
|
||||
public boolean deleteSpriteAnimationForAllResolutions(String spineName) {
|
||||
for (ResolutionEntryVO resolutionEntryVO : currentProjectInfoVO.resolutions) {
|
||||
if(!deleteSpriteAnimation(resolutionEntryVO.name, spineName))
|
||||
|
||||
@@ -212,7 +212,7 @@ public class ResolutionManager extends Proxy {
|
||||
|
||||
for (FileHandle entry : sourceDir.list()) {
|
||||
if (entry.extension().equals("png")) {
|
||||
String name = regionsReverse.get(entry.nameWithoutExtension().replace(".9", "").replaceAll("_.*", ""));
|
||||
String name = regionsReverse.get(entry.nameWithoutExtension().replace(".9", "").replaceAll("_[0-9]+", ""));
|
||||
name = name == null ? "pack" : name;
|
||||
TexturePacker tp = packerMap.get(name);
|
||||
tp.addImage(entry.file());
|
||||
|
||||
@@ -3,18 +3,20 @@ package games.rednblack.editor.utils.asset.impl;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.GdxRuntimeException;
|
||||
import games.rednblack.editor.renderer.data.TexturePackVO;
|
||||
import games.rednblack.editor.utils.ImportUtils;
|
||||
import games.rednblack.editor.utils.asset.Asset;
|
||||
import games.rednblack.h2d.common.ProgressHandler;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class AtlasAsset extends Asset {
|
||||
|
||||
@Override
|
||||
protected int getType() {
|
||||
//TODO Atlas not suported yet
|
||||
return ImportUtils.TYPE_UNKNOWN;
|
||||
//return ImportUtils.TYPE_TEXTURE_ATLAS;
|
||||
return ImportUtils.TYPE_TEXTURE_ATLAS;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -35,6 +37,34 @@ public class AtlasAsset extends Asset {
|
||||
|
||||
@Override
|
||||
public void importAsset(Array<FileHandle> files, ProgressHandler progressHandler, boolean skipRepack) {
|
||||
throw new GdxRuntimeException("Atlas not suported yet.");
|
||||
try {
|
||||
for (FileHandle fileHandle : new Array.ArrayIterator<>(files)) {
|
||||
FileHandle tmpDir = new FileHandle(projectManager.getCurrentProjectPath() + File.separator + "tmp");
|
||||
if (tmpDir.exists())
|
||||
FileUtils.forceDelete(tmpDir.file());
|
||||
FileUtils.forceMkdir(tmpDir.file());
|
||||
ImportUtils.unpackAtlasIntoTmpFolder(fileHandle.file(), null, tmpDir.path());
|
||||
Array<FileHandle> images = new Array<>(tmpDir.list());
|
||||
projectManager.copyImageFilesForAllResolutionsIntoProject(images, true, progressHandler);
|
||||
FileUtils.forceDelete(tmpDir.file());
|
||||
|
||||
TexturePackVO texturePackVO = projectManager.getCurrentProjectInfoVO().imagesPacks.get(fileHandle.nameWithoutExtension());
|
||||
if (texturePackVO == null) {
|
||||
texturePackVO = new TexturePackVO();
|
||||
texturePackVO.name = fileHandle.nameWithoutExtension();
|
||||
|
||||
projectManager.getCurrentProjectInfoVO().imagesPacks.put(texturePackVO.name, texturePackVO);
|
||||
}
|
||||
|
||||
for (FileHandle image : images) {
|
||||
texturePackVO.regions.add(image.nameWithoutExtension().replace(".9", ""));
|
||||
}
|
||||
}
|
||||
|
||||
resolutionManager.rePackProjectImagesForAllResolutionsSync();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
progressHandler.progressFailed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
-4
@@ -1,6 +1,9 @@
|
||||
package games.rednblack.editor.view.ui.dialog;
|
||||
|
||||
import games.rednblack.editor.HyperLap2DFacade;
|
||||
import games.rednblack.editor.controller.commands.resource.DeleteImageResource;
|
||||
import games.rednblack.editor.controller.commands.resource.DeleteSpineAnimation;
|
||||
import games.rednblack.editor.controller.commands.resource.DeleteSpriteAnimation;
|
||||
import games.rednblack.editor.proxy.ProjectManager;
|
||||
import games.rednblack.editor.renderer.data.TexturePackVO;
|
||||
import games.rednblack.editor.view.menu.ResourcesMenu;
|
||||
@@ -34,7 +37,11 @@ public class AnimationsPackDialogMediator extends Mediator<AtlasesPackDialog> {
|
||||
ProjectManager.PROJECT_OPENED,
|
||||
NEW_IMAGES_PACK,
|
||||
MOVE_REGION_TO_PACK,
|
||||
UPDATE_CURRENT_LIST
|
||||
UPDATE_CURRENT_LIST,
|
||||
ProjectManager.PROJECT_DATA_UPDATED,
|
||||
DeleteImageResource.DONE,
|
||||
DeleteSpineAnimation.DONE,
|
||||
DeleteSpriteAnimation.DONE
|
||||
};
|
||||
}
|
||||
|
||||
@@ -43,11 +50,20 @@ public class AnimationsPackDialogMediator extends Mediator<AtlasesPackDialog> {
|
||||
Sandbox sandbox = Sandbox.getInstance();
|
||||
UIStage uiStage = sandbox.getUIStage();
|
||||
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
|
||||
|
||||
String currentTab;
|
||||
switch (notification.getName()) {
|
||||
case ResourcesMenu.OPEN_ANIMATIONS_PACK:
|
||||
viewComponent.show(uiStage);
|
||||
break;
|
||||
case ProjectManager.PROJECT_DATA_UPDATED:
|
||||
case DeleteImageResource.DONE:
|
||||
case DeleteSpineAnimation.DONE:
|
||||
case DeleteSpriteAnimation.DONE:
|
||||
viewComponent.updateMainPack(projectManager.currentProjectInfoVO.animationsPacks.get("main").regions);
|
||||
currentTab = viewComponent.getSelectedTab();
|
||||
if (currentTab != null)
|
||||
viewComponent.updateCurrentPack(projectManager.currentProjectInfoVO.animationsPacks.get(currentTab).regions);
|
||||
break;
|
||||
case ProjectManager.PROJECT_OPENED:
|
||||
viewComponent.initPacks(projectManager.currentProjectInfoVO.animationsPacks.keySet());
|
||||
viewComponent.updateMainPack(projectManager.currentProjectInfoVO.animationsPacks.get("main").regions);
|
||||
@@ -61,8 +77,10 @@ public class AnimationsPackDialogMediator extends Mediator<AtlasesPackDialog> {
|
||||
viewComponent.addNewPack(newVo.name);
|
||||
break;
|
||||
case UPDATE_CURRENT_LIST:
|
||||
String currentTab = viewComponent.getSelectedTab();
|
||||
viewComponent.updateCurrentPack(projectManager.currentProjectInfoVO.animationsPacks.get(currentTab).regions);
|
||||
currentTab = viewComponent.getSelectedTab();
|
||||
System.out.println(currentTab);
|
||||
if (currentTab != null)
|
||||
viewComponent.updateCurrentPack(projectManager.currentProjectInfoVO.animationsPacks.get(currentTab).regions);
|
||||
break;
|
||||
case MOVE_REGION_TO_PACK:
|
||||
String toPack = viewComponent.getMainSelected() != null ? viewComponent.getSelectedTab() : "main";
|
||||
|
||||
@@ -202,6 +202,8 @@ public class AtlasesPackDialog extends H2DDialog {
|
||||
}
|
||||
|
||||
public String getSelectedTab() {
|
||||
if (tabbedPane.getActiveTab() == null)
|
||||
return null;
|
||||
return tabbedPane.getActiveTab().getTabTitle();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package games.rednblack.editor.view.ui.dialog;
|
||||
|
||||
import games.rednblack.editor.HyperLap2DFacade;
|
||||
import games.rednblack.editor.controller.commands.resource.DeleteImageResource;
|
||||
import games.rednblack.editor.controller.commands.resource.DeleteSpineAnimation;
|
||||
import games.rednblack.editor.controller.commands.resource.DeleteSpriteAnimation;
|
||||
import games.rednblack.editor.proxy.ProjectManager;
|
||||
import games.rednblack.editor.renderer.data.TexturePackVO;
|
||||
import games.rednblack.editor.view.menu.ResourcesMenu;
|
||||
@@ -34,7 +37,11 @@ public class ImagesPackDialogMediator extends Mediator<AtlasesPackDialog> {
|
||||
ProjectManager.PROJECT_OPENED,
|
||||
NEW_IMAGES_PACK,
|
||||
MOVE_REGION_TO_PACK,
|
||||
UPDATE_CURRENT_LIST
|
||||
UPDATE_CURRENT_LIST,
|
||||
ProjectManager.PROJECT_DATA_UPDATED,
|
||||
DeleteImageResource.DONE,
|
||||
DeleteSpineAnimation.DONE,
|
||||
DeleteSpriteAnimation.DONE
|
||||
};
|
||||
}
|
||||
|
||||
@@ -43,11 +50,20 @@ public class ImagesPackDialogMediator extends Mediator<AtlasesPackDialog> {
|
||||
Sandbox sandbox = Sandbox.getInstance();
|
||||
UIStage uiStage = sandbox.getUIStage();
|
||||
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
|
||||
|
||||
String currentTab;
|
||||
switch (notification.getName()) {
|
||||
case ResourcesMenu.OPEN_IMAGES_PACK:
|
||||
viewComponent.show(uiStage);
|
||||
break;
|
||||
case ProjectManager.PROJECT_DATA_UPDATED:
|
||||
case DeleteImageResource.DONE:
|
||||
case DeleteSpineAnimation.DONE:
|
||||
case DeleteSpriteAnimation.DONE:
|
||||
viewComponent.updateMainPack(projectManager.currentProjectInfoVO.imagesPacks.get("main").regions);
|
||||
currentTab = viewComponent.getSelectedTab();
|
||||
if (currentTab != null)
|
||||
viewComponent.updateCurrentPack(projectManager.currentProjectInfoVO.imagesPacks.get(currentTab).regions);
|
||||
break;
|
||||
case ProjectManager.PROJECT_OPENED:
|
||||
viewComponent.initPacks(projectManager.currentProjectInfoVO.imagesPacks.keySet());
|
||||
viewComponent.updateMainPack(projectManager.currentProjectInfoVO.imagesPacks.get("main").regions);
|
||||
@@ -61,8 +77,9 @@ public class ImagesPackDialogMediator extends Mediator<AtlasesPackDialog> {
|
||||
viewComponent.addNewPack(newVo.name);
|
||||
break;
|
||||
case UPDATE_CURRENT_LIST:
|
||||
String currentTab = viewComponent.getSelectedTab();
|
||||
viewComponent.updateCurrentPack(projectManager.currentProjectInfoVO.imagesPacks.get(currentTab).regions);
|
||||
currentTab = viewComponent.getSelectedTab();
|
||||
if (currentTab != null)
|
||||
viewComponent.updateCurrentPack(projectManager.currentProjectInfoVO.imagesPacks.get(currentTab).regions);
|
||||
break;
|
||||
case MOVE_REGION_TO_PACK:
|
||||
String toPack = viewComponent.getMainSelected() != null ? viewComponent.getSelectedTab() : "main";
|
||||
|
||||
Reference in New Issue
Block a user