1/* 2 * Copyright (c) 2009-2010 jMonkeyEngine 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33package com.jme3.niftygui; 34 35import com.jme3.asset.AssetInfo; 36import com.jme3.asset.AssetKey; 37import com.jme3.asset.AssetManager; 38import com.jme3.asset.AssetNotFoundException; 39import com.jme3.audio.AudioRenderer; 40import com.jme3.input.InputManager; 41import com.jme3.post.SceneProcessor; 42import com.jme3.renderer.RenderManager; 43import com.jme3.renderer.Renderer; 44import com.jme3.renderer.ViewPort; 45import com.jme3.renderer.queue.RenderQueue; 46import com.jme3.texture.FrameBuffer; 47import de.lessvoid.nifty.Nifty; 48import de.lessvoid.nifty.tools.TimeProvider; 49import de.lessvoid.nifty.tools.resourceloader.ResourceLocation; 50import java.io.InputStream; 51import java.net.URL; 52 53public class NiftyJmeDisplay implements SceneProcessor { 54 55 protected boolean inited = false; 56 protected Nifty nifty; 57 protected AssetManager assetManager; 58 protected RenderManager renderManager; 59 protected RenderDeviceJme renderDev; 60 protected InputSystemJme inputSys; 61 protected SoundDeviceJme soundDev; 62 protected Renderer renderer; 63 protected ViewPort vp; 64 65 protected ResourceLocationJme resourceLocation; 66 67 protected int w, h; 68 69 protected class ResourceLocationJme implements ResourceLocation { 70 71 public InputStream getResourceAsStream(String path) { 72 AssetKey<Object> key = new AssetKey<Object>(path); 73 AssetInfo info = assetManager.locateAsset(key); 74 if (info != null){ 75 return info.openStream(); 76 }else{ 77 throw new AssetNotFoundException(path); 78 } 79 } 80 81 public URL getResource(String path) { 82 throw new UnsupportedOperationException(); 83 } 84 } 85 86 //Empty constructor needed for jMP to create replacement input system 87 public NiftyJmeDisplay() { 88 } 89 90 public NiftyJmeDisplay(AssetManager assetManager, 91 InputManager inputManager, 92 AudioRenderer audioRenderer, 93 ViewPort vp){ 94 this.assetManager = assetManager; 95 96 w = vp.getCamera().getWidth(); 97 h = vp.getCamera().getHeight(); 98 99 soundDev = new SoundDeviceJme(assetManager, audioRenderer); 100 renderDev = new RenderDeviceJme(this); 101 inputSys = new InputSystemJme(inputManager); 102 if (inputManager != null) 103 inputManager.addRawInputListener(inputSys); 104 105 nifty = new Nifty(renderDev, soundDev, inputSys, new TimeProvider()); 106 inputSys.setNifty(nifty); 107 108 resourceLocation = new ResourceLocationJme(); 109 nifty.getResourceLoader().removeAllResourceLocations(); 110 nifty.getResourceLoader().addResourceLocation(resourceLocation); 111 } 112 113 public void initialize(RenderManager rm, ViewPort vp) { 114 this.renderManager = rm; 115 renderDev.setRenderManager(rm); 116 inited = true; 117 this.vp = vp; 118 this.renderer = rm.getRenderer(); 119 120 inputSys.setHeight(vp.getCamera().getHeight()); 121 } 122 123 public Nifty getNifty() { 124 return nifty; 125 } 126 127 RenderDeviceJme getRenderDevice() { 128 return renderDev; 129 } 130 131 AssetManager getAssetManager() { 132 return assetManager; 133 } 134 135 RenderManager getRenderManager() { 136 return renderManager; 137 } 138 139 int getHeight() { 140 return h; 141 } 142 143 int getWidth() { 144 return w; 145 } 146 147 Renderer getRenderer(){ 148 return renderer; 149 } 150 151 public void reshape(ViewPort vp, int w, int h) { 152 this.w = w; 153 this.h = h; 154 inputSys.setHeight(h); 155 nifty.resolutionChanged(); 156 } 157 158 public boolean isInitialized() { 159 return inited; 160 } 161 162 public void preFrame(float tpf) { 163 } 164 165 public void postQueue(RenderQueue rq) { 166 // render nifty before anything else 167 renderManager.setCamera(vp.getCamera(), true); 168 //nifty.update(); 169 nifty.render(false); 170 renderManager.setCamera(vp.getCamera(), false); 171 } 172 173 public void postFrame(FrameBuffer out) { 174 } 175 176 public void cleanup() { 177 inited = false; 178// nifty.exit(); 179 } 180 181} 182