/*
* Copyright (C) 2014-2016 Helix Engine Developers
* (http://github.com/fauu/HelixEngine)
*
* This software is licensed under the GNU General Public License
* (version 3 or later). See the COPYING file in this distribution.
*
* You should have received a copy of the GNU Library General Public License
* along with this software. If not, see <http://www.gnu.org/licenses/>.
*
* Authored by: Piotr Grabowski <fau999@gmail.com>
*/
package com.github.fauu.helix.editor;
import com.artemis.managers.TagManager;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputMultiplexer;
import com.badlogic.gdx.utils.Array;
import com.github.fauu.helix.TilePermission;
import com.github.fauu.helix.editor.event.AreaLoadedEvent;
import com.github.fauu.helix.editor.event.AreaUnloadedEvent;
import com.github.fauu.helix.editor.screen.Overworld;
import com.github.fauu.helix.editor.state.TilePassageAreaListState;
import com.github.fauu.helix.editor.state.TilePassageTargetPositionFieldState;
import com.github.fauu.helix.editor.state.TilePermissionListState;
import com.github.fauu.helix.editor.state.ToolbarState;
import com.github.fauu.helix.editor.ui.UI;
import com.github.fauu.helix.manager.AreaManager;
import com.google.common.eventbus.EventBus;
public class HelixEditor extends Game {
private static HelixEditor instance;
private EventBus uiEventBus;
private EventBus worldEventBus;
private UI ui;
private TilePassageAreaListState tilePassageAreaListState;
private TilePassageTargetPositionFieldState
tilePassageTargetPositionFieldState;
private TilePermissionListState tilePermissionListState;
private ToolbarState toolbarState;
private Overworld overworld;
private TagManager tagManager;
private AreaManager areaManager;
@Override
public void create() {
instance = this;
uiEventBus = new EventBus();
worldEventBus = new EventBus();
overworld = new Overworld();
setScreen(overworld);
tagManager = overworld.getWorld().getManager(TagManager.class);
areaManager = overworld.getWorld().getManager(AreaManager.class);
tilePassageTargetPositionFieldState
= new TilePassageTargetPositionFieldState();
tilePermissionListState = new TilePermissionListState();
tilePermissionListState.initialize(TilePermission.LEVEL0);
toolbarState = new ToolbarState();
toolbarState.initialize(ToolType.TILE_PERMISSIONS);
ui = new UI();
tilePassageAreaListState = new TilePassageAreaListState();
Array<String> areaNames = areaManager.getAllNames();
tilePassageAreaListState.initialize(areaNames, areaNames.first());
Gdx.input.setInputProcessor(
new InputMultiplexer(ui.getStage(), new EditorInputEventProcessor()));
loadAreaAction("area1");
}
public static HelixEditor getInstance() {
return instance;
}
@Override
public void render() {
super.render();
ui.render(Gdx.graphics.getDeltaTime());
}
@Override
public void dispose() {
super.dispose();
ui.dispose();
}
public void newAreaAction() {
ui.showNewAreaDialog();
}
public void createAreaAction(String name, int width, int length) {
areaManager.create(name, width, length);
}
public void openAreaAction() {
ui.showOpenAreaFileChooser();
}
public void loadAreaAction(String name) {
if (areaManager.isAreaLoaded()) {
closeCurrentAreaAction();
}
areaManager.load(name);
worldEventBus.post(new AreaLoadedEvent());
ui.setSidebarVisibility(true);
if (toolbarState.getActiveTool() == ToolType.TILE_PERMISSIONS) {
fadeAreaModelAction(true);
}
}
public void saveAreaAction() {
areaManager.save();
}
public void closeCurrentAreaAction() {
areaManager.unloadCurrent();
worldEventBus.post(new AreaUnloadedEvent());
ui.setSidebarVisibility(false);
}
public void exitAction() {
Gdx.app.exit();
}
public void fadeAreaModelAction(boolean on) {
overworld.getDisplayableIntermediary().setAreaDisplayableOpacity(on ? 0.6f : 1);
}
public void centerCameraOnAreaAction() {
overworld.getCameraIntermediary().centerCameraOnArea();
}
public void toolSelected(ToolType type) {
if (type == ToolType.TILE_PERMISSIONS &&
areaManager != null &&
areaManager.isAreaLoaded()) {
fadeAreaModelAction(true);
}
}
public EventBus getUIEventBus() {
return uiEventBus;
}
public EventBus getWorldEventBus() {
return worldEventBus;
}
public TilePassageAreaListState getTilePassageAreaListState() {
return tilePassageAreaListState;
}
public TilePassageTargetPositionFieldState
getTilePassageTargetPositionFieldState() {
return tilePassageTargetPositionFieldState;
}
public TilePermissionListState getTilePermissionListState() {
return tilePermissionListState;
}
public ToolbarState getToolbarState() {
return toolbarState;
}
}