/* * Copyright 2012 Benjamin Glatzel <benjamin.glatzel@me.com> <benjamin.glatzel@me.com> * * 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 org.terasology.componentSystem.controllers; import org.lwjgl.input.Keyboard; import org.terasology.components.LocalPlayerComponent; import org.terasology.entitySystem.EntityRef; import org.terasology.entitySystem.EventHandlerSystem; import org.terasology.entitySystem.ReceiveEvent; import org.terasology.entitySystem.RegisterComponentSystem; import org.terasology.events.DamageEvent; import org.terasology.events.input.KeyDownEvent; import org.terasology.events.input.KeyEvent; import org.terasology.game.CoreRegistry; import org.terasology.logic.manager.Config; import org.terasology.logic.manager.GUIManager; import org.terasology.logic.world.WorldProvider; import org.terasology.rendering.gui.menus.UIMetrics; import org.terasology.rendering.world.WorldRenderer; /** * @author Benjamin Glatzel <benjamin.glatzel@me.com> * @author Immortius */ @RegisterComponentSystem public class DebugControlSystem implements EventHandlerSystem { private UIMetrics metrics; private WorldProvider world; private WorldRenderer worldRenderer; @Override public void initialise() { metrics = new UIMetrics(); GUIManager.getInstance().addWindow(metrics, "engine:metrics"); world = CoreRegistry.get(WorldProvider.class); worldRenderer = CoreRegistry.get(WorldRenderer.class); } @Override public void shutdown() { } @ReceiveEvent(components = LocalPlayerComponent.class) public void onKeyEvent(KeyEvent event, EntityRef entity) { boolean debugEnabled = Config.getInstance().isDebug(); // Features for debug mode only if (debugEnabled && event.isDown()) { switch (event.getKey()) { case Keyboard.KEY_UP: world.setTimeInDays(world.getTimeInDays() + 0.005f); event.consume(); break; case Keyboard.KEY_DOWN: world.setTimeInDays(world.getTimeInDays() - 0.005f); event.consume(); break; case Keyboard.KEY_RIGHT: world.setTimeInDays(world.getTimeInDays() + 0.02f); event.consume(); break; case Keyboard.KEY_LEFT: world.setTimeInDays(world.getTimeInDays() - 0.02f); event.consume(); break; } } } @ReceiveEvent(components = LocalPlayerComponent.class) public void onKeyDown(KeyDownEvent event, EntityRef entity) { boolean debugEnabled = Config.getInstance().isDebug(); // Features for debug mode only if (debugEnabled) { switch (event.getKey()) { case Keyboard.KEY_R: worldRenderer.setWireframe(!worldRenderer.isWireframe()); event.consume(); break; case Keyboard.KEY_P: worldRenderer.setCameraMode(WorldRenderer.CAMERA_MODE.PLAYER); event.consume(); break; case Keyboard.KEY_O: worldRenderer.setCameraMode(WorldRenderer.CAMERA_MODE.SPAWN); event.consume(); break; case Keyboard.KEY_K: entity.send(new DamageEvent(9999, null)); break; case Keyboard.KEY_H: GUIManager.getInstance().getWindowById("engine:hud").setVisible(!GUIManager.getInstance().getWindowById("engine:hud").isVisible()); event.consume(); break; } } switch (event.getKey()) { case Keyboard.KEY_F3: Config.getInstance().setDebug(!Config.getInstance().isDebug()); event.consume(); break; case Keyboard.KEY_F: toggleViewingDistance(); event.consume(); break; case Keyboard.KEY_F4: metrics.toggleMode(); event.consume(); break; } } private void toggleViewingDistance() { Config.getInstance().setViewingDistanceById((Config.getInstance().getActiveViewingDistanceId() + 1) % 4); } }