package org.shadebob.skineditor.screens; import org.shadebob.skineditor.SkinEditorGame; import org.shadebob.skineditor.actors.MenuBar; import org.shadebob.skineditor.actors.OptionsPane; import org.shadebob.skineditor.actors.PreviewPane; import org.shadebob.skineditor.actors.WidgetsBar; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.tools.texturepacker.TexturePacker; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.utils.viewport.ExtendViewport; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.ScreenViewport; public class MainScreen implements Screen { private SkinEditorGame game; public MenuBar barMenu; public WidgetsBar barWidgets; public PreviewPane panePreview; public OptionsPane paneOptions; public Stage stage; private String currentProject = ""; public MainScreen(SkinEditorGame game) { this.game = game; barMenu = new MenuBar(game); barWidgets = new WidgetsBar(game); panePreview = new PreviewPane(game); paneOptions = new OptionsPane(game); stage = new Stage(new ScreenViewport()); Table table = new Table(); table.setFillParent(true); table.top().left().add(barMenu).expandX().fillX().colspan(2).row(); table.top().left().add(barWidgets).expandX().fillX().colspan(2).row(); table.top().left().add(paneOptions).width(420).left().fill().expandY(); ScrollPane scrollPane = new ScrollPane(panePreview); table.add(scrollPane).fill().expand(); stage.addActor(table); barWidgets.initializeButtons(); } @Override public void render(float delta) { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); stage.act(delta); stage.draw(); } /** * * @param project */ public void setCurrentProject(String project) { currentProject = project; } public String getcurrentProject() { return currentProject; } /** * */ @Override public void resize(int width, int height) { stage.getViewport().update(width, height, true); } /** * */ @Override public void show() { if (currentProject == "") { Gdx.app.error("MainScreen", "Current project not set!"); Gdx.app.exit(); } refreshResources(); barMenu.update(currentProject); panePreview.refresh(); paneOptions.refresh(); barWidgets.resetButtonSelection(); Gdx.input.setInputProcessor(stage); } @Override public void hide() { } @Override public void pause() { // Do nothing } @Override public void resume() { // Do nothing } @Override public void dispose() { // Do nothing } /** * Save everything to skin */ public void saveToSkin() { FileHandle projectFolder = Gdx.files.local("projects").child(currentProject); FileHandle[] items = projectFolder.child("backups").list(); Array<String> sortedItems = new Array<String>(); for(FileHandle item: items) { sortedItems.add(item.name()); } sortedItems.sort(); // Keep only last ten files int count = 0; for (String item : sortedItems) { if (count++ > 8) { // Remove file projectFolder.child("backups").child(item).delete(); } } FileHandle projectFile = projectFolder.child("uiskin.json"); FileHandle backupFile = projectFolder.child("backups").child("uiskin_" +(TimeUtils.millis()/1000) +".json"); projectFile.copyTo(backupFile); game.skinProject.save(projectFile); } /** * */ public void refreshResources() { TexturePacker.Settings settings = new TexturePacker.Settings(); settings.combineSubdirectories = true; settings.maxWidth = 2048; settings.maxHeight = 2048; TexturePacker.process(settings, "projects/" + currentProject +"/assets/", "projects/" + currentProject, "uiskin"); // Load project skin if (game.skinProject != null) { game.skinProject.dispose(); } game.skinProject = new Skin(); game.skinProject.addRegions(new TextureAtlas(Gdx.files.local("projects/" + currentProject +"/uiskin.atlas"))); game.skinProject.load(Gdx.files.local("projects/" + currentProject +"/uiskin.json")); } }