/*
* ******************************************************************************
* * 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.proxy;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.puremvc.patterns.proxy.BaseProxy;
import com.uwsoft.editor.Overlap2DFacade;
import com.uwsoft.editor.renderer.data.SceneVO;
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 BaseProxy {
private static final String TAG = SceneDataManager.class.getCanonicalName();
public static final String NAME = TAG;
public SceneDataManager() {
super(NAME);
}
@Override
public void onRegister() {
super.onRegister();
facade = Overlap2DFacade.getInstance();
}
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 void loadScene(SceneVO sceneVO, String resolution) {
/*
if (sceneVO == null || sceneVO.composite == null) return;
FontSizePair[] fonts = sceneVO.composite.getRecursiveFontList();
TextureManager textureManager = facade.retrieveProxy(TextureManager.NAME);
ResolutionManager resolutionManager = facade.retrieveProxy(ResolutionManager.NAME);
textureManager.loadBitmapFonts(fonts, resolutionManager.getCurrentMul());*/
// Apparently all was loaded when project was loaded
}
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");
} 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);
File fileTarget = new File(targetPath + "/" + scenesDirectoryHandle.name());
try {
FileUtils.copyDirectory(scenesDirectoryHandle.file(), fileTarget);
} 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();
}
}
}