/* * ****************************************************************************** * * 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.view; import java.io.File; import com.badlogic.ashley.core.Engine; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.Vector2; import com.commons.MsgAPI; import com.uwsoft.editor.view.ui.widget.actors.basic.SandboxBackUI; import com.uwsoft.editor.view.stage.Sandbox; import com.uwsoft.editor.Overlap2DFacade; import com.uwsoft.editor.proxy.ProjectManager; import com.uwsoft.editor.view.stage.UIStage; import com.uwsoft.editor.view.stage.input.SandboxInputAdapter; import com.uwsoft.editor.renderer.data.SceneVO; public class Overlap2DScreen implements Screen, InputProcessor { private static final String TAG = Overlap2DScreen.class.getCanonicalName(); //public SandboxStage sandboxStage; public UIStage uiStage; private Engine engine; private InputMultiplexer multiplexer; private Overlap2DFacade facade; private ProjectManager projectManager; private boolean paused = false; private Sandbox sandbox; private SandboxBackUI sandboxBackUI; private Batch batch; private Color bgColor; private Texture bgLogo; private Vector2 screenSize; private boolean isDrawingBgLogo; public Overlap2DScreen() { facade = Overlap2DFacade.getInstance(); bgColor = new Color(0.094f, 0.094f, 0.094f, 1.0f); isDrawingBgLogo = true; batch = new SpriteBatch(); bgLogo = new Texture(Gdx.files.internal("style/bglogo.png")); screenSize = new Vector2(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); } @Override public void render(float deltaTime) { if (paused) { return; } GL20 gl = Gdx.gl; gl.glClearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if(isDrawingBgLogo) { batch.begin(); batch.setColor(1, 1, 1, 0.12f); batch.draw(bgLogo, screenSize.x/2 - bgLogo.getWidth()/2, screenSize.y/2 - bgLogo.getHeight()/2); batch.end(); } else { if (sandboxBackUI != null) sandboxBackUI.render(deltaTime); engine.update(deltaTime); } uiStage.act(deltaTime); uiStage.draw(); } public void disableDrawingBgLogo() { if(!isDrawingBgLogo) return; this.isDrawingBgLogo = false; bgLogo.dispose(); batch.dispose(); batch = null; bgLogo = null; } public void setBgColor(Color color) { bgColor = color; } @Override public void pause() { } @Override public void resume() { } @Override public void dispose() { } @Override public void show() { sandbox = Sandbox.getInstance(); uiStage = sandbox.getUIStage(); //sandboxStage = commands.getSandboxStage(); //sandboxStage.commands = commands; projectManager = facade.retrieveProxy(ProjectManager.NAME); // check for demo project File demoDir = new File(projectManager.getRootPath() + File.separator + "examples" + File.separator + "OverlapDemo"); //if (demoDir.isDirectory() && demoDir.exists()) { // TODO: temp not opening the demo if (false) { projectManager.openProjectFromPath(demoDir.getAbsolutePath() + File.separator + "project.pit"); sandbox.loadCurrentProject(); if(sandbox.getViewport() != null) { sandbox.getViewport().update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); } facade.sendNotification(ProjectManager.PROJECT_OPENED); } multiplexer = new InputMultiplexer(); multiplexer.addProcessor(this); multiplexer.addProcessor(uiStage); multiplexer.addProcessor(new SandboxInputAdapter()); Gdx.input.setInputProcessor(multiplexer); } @Override public void hide() { } @Override public void resize(int width, int height) { uiStage.resize(width, height); if(Sandbox.getInstance().getViewport() != null) { Sandbox.getInstance().getViewport().update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); } } @Override public boolean keyDown(int keycode) { if (Gdx.input.isKeyPressed(Input.Keys.SYM) || Gdx.input.isKeyPressed(Input.Keys.CONTROL_LEFT) || Gdx.input.isKeyPressed(Input.Keys.CONTROL_RIGHT)) { switch (keycode) { case Input.Keys.N: //uiStage.menuMediator.showDialog("createNewProjectDialog"); break; case Input.Keys.O: //uiStage.menuMediator.showOpenProject(); break; case Input.Keys.S: SceneVO vo = sandbox.sceneVoFromItems(); projectManager.saveCurrentProject(vo); break; case Input.Keys.E: facade.sendNotification(MsgAPI.ACTION_EXPORT_PROJECT); break; } } return false; } @Override public boolean keyUp(int keycode) { return false; } @Override public boolean keyTyped(char character) { return false; } @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { return false; } @Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { return false; } @Override public boolean touchDragged(int screenX, int screenY, int pointer) { return false; } @Override public boolean mouseMoved(int screenX, int screenY) { return false; } @Override public boolean scrolled(int amount) { return false; } public void setEngine(Engine engine) { this.engine = engine; } public void setBackUI(SandboxBackUI sandboxBackUI) { this.sandboxBackUI = sandboxBackUI; } }