Files
HyperLap2D/src/main/java/games/rednblack/editor/proxy/SceneDataManager.java
T
2023-07-06 00:14:02 +02:00

149 lines
6.0 KiB
Java

/*
* ******************************************************************************
* * 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 games.rednblack.editor.proxy;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import games.rednblack.editor.renderer.data.CompositeItemVO;
import games.rednblack.editor.renderer.data.MainItemVO;
import games.rednblack.editor.renderer.data.SceneVO;
import games.rednblack.editor.renderer.utils.HyperJson;
import games.rednblack.puremvc.Proxy;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
/**
* Created by sargis on 3/23/15.
*/
public class SceneDataManager extends Proxy {
private static final String TAG = SceneDataManager.class.getCanonicalName();
public static final String NAME = TAG;
public SceneDataManager() {
super(NAME, null);
}
public SceneVO createNewScene(String name) {
SceneVO vo = new SceneVO();
vo.sceneName = name;
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
try {
String projPath = projectManager.getCurrentProjectPath();
FileUtils.writeStringToFile(new File(projPath + "/project.dt"), projectManager.currentProjectInfoVO.constructJsonString(), "utf-8");
FileUtils.writeStringToFile(new File(projPath + "/scenes/" + vo.sceneName + ".dt"), vo.constructJsonString(), "utf-8");
projectManager.currentProjectInfoVO.scenes.add(vo);
} catch (IOException e) {
e.printStackTrace();
}
return vo;
}
public String getCurrProjectScenePathByName(String sceneName) {
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
return projectManager.getCurrentProjectPath() + "/scenes/" + sceneName + ".dt";
}
public void saveScene(SceneVO vo) {
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
try {
FileUtils.writeStringToFile(new File(projectManager.getCurrentProjectPath() + "/scenes/" + vo.sceneName + ".dt"),
vo.constructJsonString(), "utf-8");
CommandManager commandManager = facade.retrieveProxy(CommandManager.NAME);
commandManager.saveEvent();
} catch (IOException e) {
e.printStackTrace();
}
}
public void deleteCurrentScene() {
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
if (projectManager.currentProjectVO.lastOpenScene.equals("MainScene")) {
return;
}
deleteScene(projectManager.currentProjectVO.lastOpenScene);
}
private void deleteScene(String sceneName) {
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
ArrayList<SceneVO> scenes = projectManager.currentProjectInfoVO.scenes;
SceneVO sceneToDelete = null;
for (SceneVO scene : scenes) {
if (scene.sceneName.equals(sceneName)) {
sceneToDelete = scene;
break;
}
}
if (sceneToDelete != null) {
scenes.remove(sceneToDelete);
}
projectManager.currentProjectInfoVO.scenes = scenes;
String projPath = projectManager.getCurrentProjectPath();
try {
FileUtils.writeStringToFile(new File(projPath + "/project.dt"), projectManager.currentProjectInfoVO.constructJsonString(), "utf-8");
FileUtils.forceDelete(new File(projPath + "/scenes/" + sceneName + ".dt"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void buildScenes(String targetPath) {
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
String srcPath = projectManager.getCurrentProjectPath() + "/scenes";
FileHandle scenesDirectoryHandle = Gdx.files.absolute(srcPath);
try {
for (File scene : scenesDirectoryHandle.file().listFiles()) {
File fileTarget = new File(targetPath + File.separator + scenesDirectoryHandle.name() + File.separator + scene.getName());
Json json = HyperJson.getJson();
SceneVO sceneToExport = json.fromJson(SceneVO.class, FileUtils.readFileToString(scene, "utf-8"));
clearCompositesForExport(sceneToExport.composite);
FileUtils.writeStringToFile(fileTarget, sceneToExport.constructJsonString(), "utf-8");
}
} catch (IOException e) {
e.printStackTrace();
}
//copy project dt
try {
FileUtils.copyFile(new File(projectManager.getCurrentProjectPath() + "/project.dt"), new File(targetPath + "/project.dt"));
} catch (IOException e) {
e.printStackTrace();
}
}
private void clearCompositesForExport(CompositeItemVO compositeVO) {
if (compositeVO == null)
return;
compositeVO.sStickyNotes.clear();
Array<MainItemVO> sComposites = compositeVO.content.get(CompositeItemVO.class.getName());
if (sComposites != null) {
for (MainItemVO mainItemVO : sComposites) {
CompositeItemVO c = (CompositeItemVO) mainItemVO;
clearCompositesForExport(c);
}
}
}
}