159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/*
259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * To change this template, choose Tools | Templates and open the template in
359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the editor.
459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */
559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage jme3test.batching;
659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.app.SimpleApplication;
859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.input.KeyInput;
959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.input.controls.ActionListener;
1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.input.controls.KeyTrigger;
1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.material.Material;
1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.ColorRGBA;
1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.FastMath;
1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.Quaternion;
1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.Vector3f;
1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.post.FilterPostProcessor;
1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.post.filters.BloomFilter;
1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.*;
1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.debug.Arrow;
2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.shape.Box;
2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.system.AppSettings;
2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.system.NanoTimer;
2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.ArrayList;
2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.Random;
2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class TestBatchNodeCluster extends SimpleApplication {
2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public static void main(String[] args) {
2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        TestBatchNodeCluster app = new TestBatchNodeCluster();
3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        settingst = new AppSettings(true);
3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        //settingst.setFrameRate(75);
3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        settingst.setResolution(640, 480);
3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        settingst.setVSync(false);
3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        settingst.setFullscreen(false);
3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        app.setSettings(settingst);
3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        app.setShowSettings(false);
3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        app.start();
3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    private ActionListener al = new ActionListener() {
4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        public void onAction(String name, boolean isPressed, float tpf) {
4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            if (name.equals("Start Game")) {
4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//              randomGenerator();
4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            }
4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        }
4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    };
4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected Random rand = new Random();
4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected int maxCubes = 2000;
4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected int startAt = 0;
5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected static int xPositions = 0, yPositions = 0, zPositions = 0;
5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected int returner = 0;
5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected ArrayList<Integer> xPosition = new ArrayList<Integer>();
5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected ArrayList<Integer> yPosition = new ArrayList<Integer>();
5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected ArrayList<Integer> zPosition = new ArrayList<Integer>();
5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected int xLimitf = 60, xLimits = -60, yLimitf = 60, yLimits = -20, zLimitf = 60, zLimits = -60;
5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected int circ = 8;//increases by 8 every time.
5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected int dynamic = 4;
5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected static AppSettings settingst;
5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected boolean isTrue = true;
6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    private int lineLength = 50;
6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    protected BatchNode batchNode;
6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Material mat1;
6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Material mat2;
6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Material mat3;
6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Material mat4;
6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Node terrain;
6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    //protected
6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//    protected Geometry player;
6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    @Override
7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public void simpleInitApp() {
7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        timer = new NanoTimer();
7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        batchNode = new SimpleBatchNode("BatchNode");
7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        xPosition.add(0);
7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        yPosition.add(0);
7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        zPosition.add(0);
8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat1.setColor("Color", ColorRGBA.White);
8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat1.setColor("GlowColor", ColorRGBA.Blue.mult(10));
8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat2.setColor("Color", ColorRGBA.White);
8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat2.setColor("GlowColor", ColorRGBA.Red.mult(10));
8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat3 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat3.setColor("Color", ColorRGBA.White);
9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat3.setColor("GlowColor", ColorRGBA.Yellow.mult(10));
9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat4 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat4.setColor("Color", ColorRGBA.White);
9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        mat4.setColor("GlowColor", ColorRGBA.Orange.mult(10));
9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        randomGenerator();
9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        //rootNode.attachChild(SkyFactory.createSky(
10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        //  assetManager, "Textures/SKY02.zip", false));
10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        inputManager.addMapping("Start Game", new KeyTrigger(KeyInput.KEY_J));
10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        inputManager.addListener(al, new String[]{"Start Game"});
10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        cam.setLocation(new Vector3f(-34.403286f, 126.65158f, 434.791f));
10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        cam.setRotation(new Quaternion(0.022630932f, 0.9749435f, -0.18736298f, 0.11776358f));
10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        batchNode.batch();
11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        terrain = new Node("terrain");
11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        terrain.setLocalTranslation(50, 0, 50);
11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        terrain.attachChild(batchNode);
11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        flyCam.setMoveSpeed(100);
11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        rootNode.attachChild(terrain);
11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        Vector3f pos = new Vector3f(-40, 0, -40);
11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        batchNode.setLocalTranslation(pos);
12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        Arrow a = new Arrow(new Vector3f(0, 50, 0));
12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        Geometry g = new Geometry("a", a);
12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        g.setLocalTranslation(terrain.getLocalTranslation());
12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        Material m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        m.setColor("Color", ColorRGBA.Blue);
12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        g.setMaterial(m);
12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        fpp.addFilter(new BloomFilter(BloomFilter.GlowMode.Objects));
13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        SSAOFilter ssao = new SSAOFilter(8.630104f,22.970434f,2.9299977f,0.2999997f);
13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        fpp.addFilter(ssao);
13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        viewPort.addProcessor(fpp);
13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        //   viewPort.setBackgroundColor(ColorRGBA.DarkGray);
13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public void randomGenerator() {
14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        for (int i = startAt; i < maxCubes - 1; i++) {
14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            randomize();
14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            Geometry box = new Geometry("Box" + i, new Box(Vector3f.ZERO, 1, 1, 1));
14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            box.setLocalTranslation(new Vector3f(xPosition.get(xPosition.size() - 1),
14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    yPosition.get(yPosition.size() - 1),
14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    zPosition.get(zPosition.size() - 1)));
14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            batchNode.attachChild(box);
14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            if (i < 500) {
14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                box.setMaterial(mat1);
14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            } else if (i < 1000) {
15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                box.setMaterial(mat2);
15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            } else if (i < 1500) {
15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                box.setMaterial(mat3);
15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            } else {
15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                box.setMaterial(mat4);
15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            }
15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        }
16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//    public BatchNode randomBatch() {
16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//
16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        int randomn = rand.nextInt(4);
16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        if (randomn == 0) {
16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//            return blue;
16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        } else if (randomn == 1) {
16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//            return brown;
17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        } else if (randomn == 2) {
17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//            return pink;
17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        } else if (randomn == 3) {
17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//            return orange;
17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        }
17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//        return null;
17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//    }
17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public ColorRGBA randomColor() {
17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        ColorRGBA color = ColorRGBA.Black;
17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int randomn = rand.nextInt(4);
18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        if (randomn == 0) {
18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            color = ColorRGBA.Orange;
18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        } else if (randomn == 1) {
18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            color = ColorRGBA.Blue;
18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        } else if (randomn == 2) {
18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            color = ColorRGBA.Brown;
18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        } else if (randomn == 3) {
18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            color = ColorRGBA.Magenta;
18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        }
18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        return color;
19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public void randomize() {
19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int xpos = xPosition.get(xPosition.size() - 1);
19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int ypos = yPosition.get(yPosition.size() - 1);
19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int zpos = zPosition.get(zPosition.size() - 1);
19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int x = 0;
19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int y = 0;
19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int z = 0;
19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        boolean unTrue = true;
20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        while (unTrue) {
20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            unTrue = false;
20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            boolean xChanged = false;
20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            x = 0;
20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            y = 0;
20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            z = 0;
20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            if (xpos >= lineLength * 2) {
20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                x = 2;
20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                xChanged = true;
20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            } else {
21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                x = xPosition.get(xPosition.size() - 1) + 2;
21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            }
21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            if (xChanged) {
21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                //y = yPosition.get(yPosition.size() - lineLength) + 2;
21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            } else {
21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                y = rand.nextInt(3);
21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                if (yPosition.size() > lineLength) {
21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    if (yPosition.size() > 51) {
21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        if (y == 0 && ypos < yLimitf && getym(lineLength) > ypos - 2) {
21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            y = ypos + 2;
22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        } else if (y == 1 && ypos > yLimits && getym(lineLength) < ypos + 2) {
22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            y = ypos - 2;
22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        } else if (y == 2 && getym(lineLength) > ypos - 2 && getym(lineLength) < ypos + 2) {
22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            y = ypos;
22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        } else {
22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            if (ypos >= yLimitf) {
22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos - 2;
22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else if (ypos <= yLimits) {
22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos + 2;
22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else if (y == 0 && getym(lineLength) >= ypos - 4) {
23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos - 2;
23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else if (y == 0 && getym(lineLength) >= ypos - 2) {
23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos;
23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else if (y == 1 && getym(lineLength) >= ypos + 4) {
23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos + 2;
23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else if (y == 1 && getym(lineLength) >= ypos + 2) {
23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos;
23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else if (y == 2 && getym(lineLength) <= ypos - 2) {
23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos - 2;
23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else if (y == 2 && getym(lineLength) >= ypos + 2) {
24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                y = ypos + 2;
24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            } else {
24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                                System.out.println("wtf");
24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            }
24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        }
24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    } else if (yPosition.size() == lineLength) {
24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        if (y == 0 && ypos < yLimitf) {
24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            y = getym(lineLength) + 2;
24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        } else if (y == 1 && ypos > yLimits) {
24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                            y = getym(lineLength) - 2;
25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        }
25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    }
25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                } else {
25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    if (y == 0 && ypos < yLimitf) {
25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        y = ypos + 2;
25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    } else if (y == 1 && ypos > yLimits) {
25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        y = ypos - 2;
25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    } else if (y == 2) {
25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        y = ypos;
25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    } else if (y == 0 && ypos >= yLimitf) {
26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        y = ypos - 2;
26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    } else if (y == 1 && ypos <= yLimits) {
26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                        y = ypos + 2;
26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                    }
26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                }
26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            }
26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            if (xChanged) {
26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                z = zpos + 2;
26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            } else {
26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta                z = zpos;
27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            }
27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//          for (int i = 0; i < xPosition.size(); i++)
27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//          {
27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//              if (x - xPosition.get(i) <= 1 && x - xPosition.get(i) >= -1 &&
27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//                      y - yPosition.get(i) <= 1 && y - yPosition.get(i) >= -1
27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//                      &&z - zPosition.get(i) <= 1 && z - zPosition.get(i) >=
27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//                      -1)
27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//              {
27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//                  unTrue = true;
27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//              }
28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta//          }
28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        }
28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        xPosition.add(x);
28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        yPosition.add(y);
28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        zPosition.add(z);
28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public int getxm(int i) {
28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        return xPosition.get(xPosition.size() - i);
28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public int getym(int i) {
29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        return yPosition.get(yPosition.size() - i);
29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public int getzm(int i) {
29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        return zPosition.get(zPosition.size() - i);
29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public int getx(int i) {
30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        return xPosition.get(i);
30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public int gety(int i) {
30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        return yPosition.get(i);
30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public int getz(int i) {
30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        return zPosition.get(i);
30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    long nbFrames = 0;
31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    long cullTime = 0;
31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    float time = 0;
31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Vector3f lookAtPos = new Vector3f(0, 0, 0);
31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    float xpos = 0;
31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Spatial box;
31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    @Override
31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public void simpleUpdate(float tpf) {
31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        time += tpf;
32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        int random = rand.nextInt(2000);
32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        float mult1 = 1.0f;
32259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        float mult2 = 1.0f;
32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        if (random < 500) {
32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult1 = 1.0f;
32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult2 = 1.0f;
32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        } else if (random < 1000) {
32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult1 = -1.0f;
32859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult2 = 1.0f;
32959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        } else if (random < 1500) {
33059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult1 = 1.0f;
33159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult2 = -1.0f;
33259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        } else if (random <= 2000) {
33359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult1 = -1.0f;
33459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            mult2 = -1.0f;
33559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        }
33659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        box = batchNode.getChild("Box" + random);
33759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        if (box != null) {
33859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            Vector3f v = box.getLocalTranslation();
33959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta            box.setLocalTranslation(v.x + FastMath.sin(time * mult1) * 20, v.y + (FastMath.sin(time * mult1) * FastMath.cos(time * mult1) * 20), v.z + FastMath.cos(time * mult2) * 20);
34059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        }
34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta        terrain.setLocalRotation(new Quaternion().fromAngleAxis(time, Vector3f.UNIT_Y));
34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
34359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    }
34559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta}
346