Package net.anzix.fsz

Source Code of net.anzix.fsz.App

package net.anzix.fsz;

import java.awt.EventQueue;
import java.net.URL;
import java.util.Stack;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.ardor3d.annotation.MainThread;
import com.ardor3d.example.ExampleBase;
import com.ardor3d.example.PropertiesDialog;
import com.ardor3d.example.PropertiesGameSettings;

import com.ardor3d.framework.DisplaySettings;
import com.ardor3d.framework.FrameHandler;
import com.ardor3d.framework.NativeCanvas;
import com.ardor3d.framework.Scene;
import com.ardor3d.framework.lwjgl.LwjglCanvas;
import com.ardor3d.framework.lwjgl.LwjglCanvasRenderer;
import com.ardor3d.input.MouseManager;
import com.ardor3d.input.PhysicalLayer;
import com.ardor3d.input.logical.LogicalLayer;
import com.ardor3d.input.lwjgl.LwjglControllerWrapper;
import com.ardor3d.input.lwjgl.LwjglKeyboardWrapper;
import com.ardor3d.input.lwjgl.LwjglMouseManager;
import com.ardor3d.input.lwjgl.LwjglMouseWrapper;
import com.ardor3d.intersection.PickResults;
import com.ardor3d.intersection.PrimitivePickResults;

import com.ardor3d.math.Ray3;
import com.ardor3d.renderer.Renderer;
import com.ardor3d.renderer.TextureRendererFactory;
import com.ardor3d.renderer.lwjgl.LwjglTextureRendererProvider;
import com.ardor3d.renderer.pass.BasicPassManager;
import com.ardor3d.renderer.pass.RenderPass;
import com.ardor3d.renderer.state.LightState;
import com.ardor3d.renderer.state.WireframeState;
import com.ardor3d.scenegraph.Node;
import com.ardor3d.util.ContextGarbageCollector;
import com.ardor3d.util.GameTaskQueue;
import com.ardor3d.util.GameTaskQueueManager;
import com.ardor3d.util.Timer;
import com.ardor3d.util.resource.ResourceLocatorTool;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import net.anzix.fsz.element.Sun;
import net.anzix.fsz.eventbus.EventBus;
import net.anzix.fsz.player.Player;
import net.anzix.fsz.voxelworld.DetailLevel;
import net.anzix.fsz.voxelworld.VoxelBlockPool;
import net.anzix.fsz.voxelworld.VoxelWorld;
import net.anzix.fsz.voxelworld.layers.LayerBlockPool;
import net.anzix.fsz.world.FlatTerrain;
import net.anzix.fsz.world.Physics;
import net.anzix.fsz.world.Terrain;

public class App implements Scene {

    private MouseManager _mouseManager;

    private static final Logger logger = Logger.getLogger(ExampleBase.class.getName());

    private final LogicalLayer _logicalLayer = new LogicalLayer();

    private PhysicalLayer _physicalLayer;

    private final Timer _timer = new Timer();

    private final FrameHandler _frameHandler = new FrameHandler(_timer);

    private DisplaySettings _settings;

    private final Node _root = new Node();

    private LightState _lightState;

    private WireframeState _wireframeState;

    private static boolean _stereo = false;

    private NativeCanvas _canvas;

   

    private static int _minDepthBits = -1;

    private static int _minAlphaBits = -1;

    private static int _minStencilBits = -1;

    private Injector injector;
   
   
    @Inject
    private EventBus eventBus;
   
    @Inject
    private NodeRepository nodeRepository;
   
   
    BasicPassManager passManager = new BasicPassManager();
   
   
    VoxelWorld voxelWorld;
   
    @MainThread
    public boolean renderUnto(final Renderer renderer) {
        // Execute renderQueue item
        GameTaskQueueManager.getManager(_canvas.getCanvasRenderer().getRenderContext()).getQueue(GameTaskQueue.RENDER).execute(renderer);

        // Clean up card garbage such as textures, vbos, etc.
        ContextGarbageCollector.doRuntimeCleanup(renderer);

       
       
       
       
        /** Draw the rootNode and all its children. */
        if (!_canvas.isClosing()) {
            /** Call renderExample in any derived classes. */
           
            voxelWorld.getShadow().initShadowPass(renderer);
            passManager.renderPasses(renderer);
           
            //_root.onDraw(renderer);
            //renderer.renderBuckets();
            //renderer.draw(hud);

            return true;
        } else {
            return false;
        }
    }

    public PickResults doPick(final Ray3 pickRay) {
        final PrimitivePickResults pickResults = new PrimitivePickResults();
        return pickResults;
    }

    public static void main(String[] args) {
        // Ask for properties
        final PropertiesGameSettings prefs = getAttributes(new PropertiesGameSettings("ardorSettings.properties", null));

        // Convert to DisplayProperties (XXX: maybe merge these classes?)
        final DisplaySettings settings = new DisplaySettings(prefs.getWidth(), prefs.getHeight(), prefs.getDepth(),
                prefs.getFrequency(),
                // alpha
                _minAlphaBits != -1 ? _minAlphaBits : prefs.getAlphaBits(),
                // depth
                _minDepthBits != -1 ? _minDepthBits : prefs.getDepthBits(),
                // stencil
                _minStencilBits != -1 ? _minStencilBits : prefs.getStencilBits(),
                // samples
                prefs.getSamples(),
                // other
                prefs.isFullscreen(), _stereo);

        App app = new App();
        app._settings = settings;

        app.start();
    }

    /*public URL getMapTile(int posx, int posy, DetailLevel level) {
        if (level.getLevelID() >= VoxelWorld.NUM_OF_BLOCK_LEVELS)
            return null;
       
        VoxelWorld voxelWorldForMap = new VoxelWorld(null);
        LayerBlockPool layerBlockPool = (LayerBlockPool) voxelWorldForMap.getLayerPoolContainer().get(level.getLevelID());
        VoxelBlockPool voxelBlockPool = (VoxelBlockPool) voxelWorldForMap.getVoxelPoolContainer().get(level.getLevelID());
       
       
        return null;
    } */
    public void start() {



        // get our framework

        final LwjglCanvasRenderer canvasRenderer = new LwjglCanvasRenderer(this);
        _canvas = new LwjglCanvas( _settings, canvasRenderer);
        _physicalLayer = new PhysicalLayer(new LwjglKeyboardWrapper(), new LwjglMouseWrapper(),
                new LwjglControllerWrapper(), (LwjglCanvas) _canvas);
        _mouseManager = new LwjglMouseManager();
        TextureRendererFactory.INSTANCE.setProvider(new LwjglTextureRendererProvider());


        _logicalLayer.registerInput(_canvas, _physicalLayer);

        MainUpdater updater = new MainUpdater(_mouseManager, _lightState, _wireframeState, _canvas, _logicalLayer, _timer, passManager);
        // Register our example as an updater.
        _frameHandler.addUpdater(updater);

        // register our native canvas
        _frameHandler.addCanvas(_canvas);
       
        //
        voxelWorld = updater.getVoxelWorld();

       
        injector = Guice.createInjector(new AbstractModule() {

            @Override
            protected void configure() {
                bind(Terrain.class).to(FlatTerrain.class).asEagerSingleton();
            }
        });
       
        injector.injectMembers(this);
        injector.injectMembers(updater);
        nodeRepository.addNode(NodeRepository.ROOT_NODE, _root);
       
        eventBus.registerListener(injector.getInstance(Physics.class));
        eventBus.registerListener(injector.getInstance(Sun.class));      
        eventBus.registerListener(injector.getInstance(Terrain.class));              
        eventBus.registerListener(injector.getInstance(Player.class));
       
        net.anzix.fsz.MainThread thread = new net.anzix.fsz.MainThread(_frameHandler, _canvas);
        eventBus.registerListener(thread);
       
        final RenderPass rootPass = new RenderPass();
        rootPass.add(_root);
       
        passManager.add(rootPass);
                       
        new Thread(thread).start();
    }

    protected static PropertiesGameSettings getAttributes(final PropertiesGameSettings settings) {
        // Always show the dialog in these examples.
        URL dialogImage = null;
        final String dflt = settings.getDefaultSettingsWidgetImage();
        if (dflt != null) {
            try {
                dialogImage = ResourceLocatorTool.getClassPathResource(ExampleBase.class, dflt);
            } catch (final Exception e) {
                logger.log(Level.SEVERE, "Resource lookup of '" + dflt + "' failed.  Proceeding.");
            }
        }
        if (dialogImage == null) {
            logger.fine("No dialog image loaded");
        } else {
            logger.fine("Using dialog image '" + dialogImage + "'");
        }

        final URL dialogImageRef = dialogImage;
        final AtomicReference<PropertiesDialog> dialogRef = new AtomicReference<PropertiesDialog>();
        final Stack<Runnable> mainThreadTasks = new Stack<Runnable>();
        try {
            if (EventQueue.isDispatchThread()) {
                dialogRef.set(new PropertiesDialog(settings, dialogImageRef, mainThreadTasks));
            } else {
                EventQueue.invokeLater(new Runnable()                      {

                    public void run() {
                        dialogRef.set(new PropertiesDialog(settings, dialogImageRef, mainThreadTasks));
                    }
                });
            }
        } catch (final Exception e) {
            logger.logp(Level.SEVERE, ExampleBase.class.getClass().toString(), "ExampleBase.getAttributes(settings)",
                    "Exception", e);
            return null;
        }

        PropertiesDialog dialogCheck = dialogRef.get();
        while (dialogCheck == null || dialogCheck.isVisible()) {
            try {
                // check worker queue for work
                while (!mainThreadTasks.isEmpty()) {
                    mainThreadTasks.pop().run();
                }
                // go back to sleep for a while
                Thread.sleep(50);
            } catch (final InterruptedException e) {
                logger.warning("Error waiting for dialog system, using defaults.");
            }

            dialogCheck = dialogRef.get();
        }

        if (dialogCheck.isCancelled()) {
            System.exit(0);
        }
        return settings;
    }
}
TOP

Related Classes of net.anzix.fsz.App

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.