/*******************************************************************************
* Copyright 2014 Rafael Garcia Moreno.
*
* 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.bladecoder.engineeditor.ui;
import java.io.File;
import java.io.IOException;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.ChangeEvent;
import com.badlogic.gdx.utils.Timer;
import com.badlogic.gdx.utils.Timer.Task;
import com.bladecoder.engine.actions.Param;
import com.bladecoder.engineeditor.Ctx;
import com.bladecoder.engineeditor.common.ImageUtils;
import com.bladecoder.engineeditor.common.Message;
import com.bladecoder.engineeditor.model.Project;
import com.bladecoder.engineeditor.ui.panels.EditDialog;
import com.bladecoder.engineeditor.ui.panels.InputPanel;
import com.bladecoder.engineeditor.ui.panels.InputPanelFactory;
public class CreateResolutionDialog extends EditDialog {
private static final String INFO = "Create a new resolution. Scale all atlases and images of the game.";
private InputPanel scale;
protected ChangeListener listener;
String atlasDir = Ctx.project.getProjectPath() + "/" + Project.ATLASES_PATH;
String uiDir = Ctx.project.getProjectPath() + "/" + Project.UI_PATH;
String imageDir = Ctx.project.getProjectPath() + "/" + Project.IMAGE_PATH;
public CreateResolutionDialog(Skin skin) {
super("CREATE RESOLUTION", skin);
scale = InputPanelFactory.createInputPanel(skin, "Scale",
"Scale relative to the world resolution", Param.Type.FLOAT, true);
addInputPanel(scale);
setInfo(INFO);
}
@Override
protected void ok() {
Message.showMsg(getStage(), "Creating resolution...", true);
Timer.schedule(new Task() {
@Override
public void run() {
createResolution();
String msg = scaleImages();
if(listener != null)
listener.changed(new ChangeEvent(), CreateResolutionDialog.this);
Message.hideMsg();
if(msg != null)
Message.showMsgDialog(getStage(), "Error creating resolution", msg);
}
},1);
}
private void createResolution() {
// float s = Float.parseFloat(scale.getText());
// String prefix = (int)(Ctx.project.getWorld().getWidth() * s) + "_" + (int)(Ctx.project.getWorld().getHeight() * s);
String prefix = scale.getText().trim();
new File(atlasDir + "/" + prefix).mkdir();
new File(uiDir + "/" + prefix).mkdir();
new File(imageDir + "/" + prefix).mkdir();
}
private String scaleImages() {
float s = Float.parseFloat(scale.getText());
// String prefix = (int)(Ctx.project.getWorld().getWidth() * s) + "_" + (int)(Ctx.project.getWorld().getHeight() * s);
String prefix = scale.getText().trim();
// COPY ASSETS FROM WORLD RESOLUTION SCALED
String wPrefix = Ctx.project.getResDir();
try {
ImageUtils.scaleDirFiles(new File(uiDir + "/" + wPrefix), new File(uiDir + "/" + prefix), s);
ImageUtils.scaleDirFiles(new File(imageDir + "/" + wPrefix), new File(imageDir + "/" + prefix), s);
ImageUtils.scaleDirAtlases(new File(atlasDir + "/" + wPrefix), new File(atlasDir + "/" + prefix), s);
ImageUtils.scaleDirAtlases(new File(uiDir + "/" + wPrefix), new File(uiDir + "/" + prefix), s);
} catch (IOException e) {
return e.getMessage();
}
return null;
}
@Override
protected boolean validateFields() {
boolean ok = true;
if (!scale.validateField())
ok = false;
return ok;
}
public void setListener(ChangeListener changeListener) {
this.listener = changeListener;
}
}