• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * To change this template, choose Tools | Templates and open the template in
3  * the editor.
4  */
5 package jme3test.batching;
6 
7 import com.jme3.app.SimpleApplication;
8 import com.jme3.input.KeyInput;
9 import com.jme3.input.controls.ActionListener;
10 import com.jme3.input.controls.KeyTrigger;
11 import com.jme3.material.Material;
12 import com.jme3.math.ColorRGBA;
13 import com.jme3.math.FastMath;
14 import com.jme3.math.Quaternion;
15 import com.jme3.math.Vector3f;
16 import com.jme3.post.FilterPostProcessor;
17 import com.jme3.post.filters.BloomFilter;
18 import com.jme3.scene.*;
19 import com.jme3.scene.debug.Arrow;
20 import com.jme3.scene.shape.Box;
21 import com.jme3.system.AppSettings;
22 import com.jme3.system.NanoTimer;
23 import java.util.ArrayList;
24 import java.util.Random;
25 
26 public class TestBatchNodeCluster extends SimpleApplication {
27 
main(String[] args)28     public static void main(String[] args) {
29         TestBatchNodeCluster app = new TestBatchNodeCluster();
30         settingst = new AppSettings(true);
31         //settingst.setFrameRate(75);
32         settingst.setResolution(640, 480);
33         settingst.setVSync(false);
34         settingst.setFullscreen(false);
35         app.setSettings(settingst);
36         app.setShowSettings(false);
37         app.start();
38     }
39     private ActionListener al = new ActionListener() {
40 
41         public void onAction(String name, boolean isPressed, float tpf) {
42             if (name.equals("Start Game")) {
43 //              randomGenerator();
44             }
45         }
46     };
47     protected Random rand = new Random();
48     protected int maxCubes = 2000;
49     protected int startAt = 0;
50     protected static int xPositions = 0, yPositions = 0, zPositions = 0;
51     protected int returner = 0;
52     protected ArrayList<Integer> xPosition = new ArrayList<Integer>();
53     protected ArrayList<Integer> yPosition = new ArrayList<Integer>();
54     protected ArrayList<Integer> zPosition = new ArrayList<Integer>();
55     protected int xLimitf = 60, xLimits = -60, yLimitf = 60, yLimits = -20, zLimitf = 60, zLimits = -60;
56     protected int circ = 8;//increases by 8 every time.
57     protected int dynamic = 4;
58     protected static AppSettings settingst;
59     protected boolean isTrue = true;
60     private int lineLength = 50;
61     protected BatchNode batchNode;
62     Material mat1;
63     Material mat2;
64     Material mat3;
65     Material mat4;
66     Node terrain;
67     //protected
68 //    protected Geometry player;
69 
70     @Override
simpleInitApp()71     public void simpleInitApp() {
72         timer = new NanoTimer();
73 
74         batchNode = new SimpleBatchNode("BatchNode");
75 
76 
77         xPosition.add(0);
78         yPosition.add(0);
79         zPosition.add(0);
80 
81         mat1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
82         mat1.setColor("Color", ColorRGBA.White);
83         mat1.setColor("GlowColor", ColorRGBA.Blue.mult(10));
84 
85         mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
86         mat2.setColor("Color", ColorRGBA.White);
87         mat2.setColor("GlowColor", ColorRGBA.Red.mult(10));
88 
89         mat3 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
90         mat3.setColor("Color", ColorRGBA.White);
91         mat3.setColor("GlowColor", ColorRGBA.Yellow.mult(10));
92 
93         mat4 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
94         mat4.setColor("Color", ColorRGBA.White);
95         mat4.setColor("GlowColor", ColorRGBA.Orange.mult(10));
96 
97         randomGenerator();
98 
99         //rootNode.attachChild(SkyFactory.createSky(
100         //  assetManager, "Textures/SKY02.zip", false));
101         inputManager.addMapping("Start Game", new KeyTrigger(KeyInput.KEY_J));
102         inputManager.addListener(al, new String[]{"Start Game"});
103 
104 
105         cam.setLocation(new Vector3f(-34.403286f, 126.65158f, 434.791f));
106         cam.setRotation(new Quaternion(0.022630932f, 0.9749435f, -0.18736298f, 0.11776358f));
107 
108 
109         batchNode.batch();
110 
111 
112         terrain = new Node("terrain");
113         terrain.setLocalTranslation(50, 0, 50);
114         terrain.attachChild(batchNode);
115 
116         flyCam.setMoveSpeed(100);
117         rootNode.attachChild(terrain);
118         Vector3f pos = new Vector3f(-40, 0, -40);
119         batchNode.setLocalTranslation(pos);
120 
121 
122         Arrow a = new Arrow(new Vector3f(0, 50, 0));
123         Geometry g = new Geometry("a", a);
124         g.setLocalTranslation(terrain.getLocalTranslation());
125         Material m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
126         m.setColor("Color", ColorRGBA.Blue);
127         g.setMaterial(m);
128 
129 
130 
131         FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
132         fpp.addFilter(new BloomFilter(BloomFilter.GlowMode.Objects));
133 //        SSAOFilter ssao = new SSAOFilter(8.630104f,22.970434f,2.9299977f,0.2999997f);
134 //        fpp.addFilter(ssao);
135         viewPort.addProcessor(fpp);
136         //   viewPort.setBackgroundColor(ColorRGBA.DarkGray);
137     }
138 
randomGenerator()139     public void randomGenerator() {
140         for (int i = startAt; i < maxCubes - 1; i++) {
141             randomize();
142             Geometry box = new Geometry("Box" + i, new Box(Vector3f.ZERO, 1, 1, 1));
143             box.setLocalTranslation(new Vector3f(xPosition.get(xPosition.size() - 1),
144                     yPosition.get(yPosition.size() - 1),
145                     zPosition.get(zPosition.size() - 1)));
146             batchNode.attachChild(box);
147             if (i < 500) {
148                 box.setMaterial(mat1);
149             } else if (i < 1000) {
150 
151                 box.setMaterial(mat2);
152             } else if (i < 1500) {
153 
154                 box.setMaterial(mat3);
155             } else {
156 
157                 box.setMaterial(mat4);
158             }
159 
160         }
161     }
162 
163 //    public BatchNode randomBatch() {
164 //
165 //        int randomn = rand.nextInt(4);
166 //        if (randomn == 0) {
167 //            return blue;
168 //        } else if (randomn == 1) {
169 //            return brown;
170 //        } else if (randomn == 2) {
171 //            return pink;
172 //        } else if (randomn == 3) {
173 //            return orange;
174 //        }
175 //        return null;
176 //    }
randomColor()177     public ColorRGBA randomColor() {
178         ColorRGBA color = ColorRGBA.Black;
179         int randomn = rand.nextInt(4);
180         if (randomn == 0) {
181             color = ColorRGBA.Orange;
182         } else if (randomn == 1) {
183             color = ColorRGBA.Blue;
184         } else if (randomn == 2) {
185             color = ColorRGBA.Brown;
186         } else if (randomn == 3) {
187             color = ColorRGBA.Magenta;
188         }
189         return color;
190     }
191 
randomize()192     public void randomize() {
193         int xpos = xPosition.get(xPosition.size() - 1);
194         int ypos = yPosition.get(yPosition.size() - 1);
195         int zpos = zPosition.get(zPosition.size() - 1);
196         int x = 0;
197         int y = 0;
198         int z = 0;
199         boolean unTrue = true;
200         while (unTrue) {
201             unTrue = false;
202             boolean xChanged = false;
203             x = 0;
204             y = 0;
205             z = 0;
206             if (xpos >= lineLength * 2) {
207                 x = 2;
208                 xChanged = true;
209             } else {
210                 x = xPosition.get(xPosition.size() - 1) + 2;
211             }
212             if (xChanged) {
213                 //y = yPosition.get(yPosition.size() - lineLength) + 2;
214             } else {
215                 y = rand.nextInt(3);
216                 if (yPosition.size() > lineLength) {
217                     if (yPosition.size() > 51) {
218                         if (y == 0 && ypos < yLimitf && getym(lineLength) > ypos - 2) {
219                             y = ypos + 2;
220                         } else if (y == 1 && ypos > yLimits && getym(lineLength) < ypos + 2) {
221                             y = ypos - 2;
222                         } else if (y == 2 && getym(lineLength) > ypos - 2 && getym(lineLength) < ypos + 2) {
223                             y = ypos;
224                         } else {
225                             if (ypos >= yLimitf) {
226                                 y = ypos - 2;
227                             } else if (ypos <= yLimits) {
228                                 y = ypos + 2;
229                             } else if (y == 0 && getym(lineLength) >= ypos - 4) {
230                                 y = ypos - 2;
231                             } else if (y == 0 && getym(lineLength) >= ypos - 2) {
232                                 y = ypos;
233                             } else if (y == 1 && getym(lineLength) >= ypos + 4) {
234                                 y = ypos + 2;
235                             } else if (y == 1 && getym(lineLength) >= ypos + 2) {
236                                 y = ypos;
237                             } else if (y == 2 && getym(lineLength) <= ypos - 2) {
238                                 y = ypos - 2;
239                             } else if (y == 2 && getym(lineLength) >= ypos + 2) {
240                                 y = ypos + 2;
241                             } else {
242                                 System.out.println("wtf");
243                             }
244                         }
245                     } else if (yPosition.size() == lineLength) {
246                         if (y == 0 && ypos < yLimitf) {
247                             y = getym(lineLength) + 2;
248                         } else if (y == 1 && ypos > yLimits) {
249                             y = getym(lineLength) - 2;
250                         }
251                     }
252                 } else {
253                     if (y == 0 && ypos < yLimitf) {
254                         y = ypos + 2;
255                     } else if (y == 1 && ypos > yLimits) {
256                         y = ypos - 2;
257                     } else if (y == 2) {
258                         y = ypos;
259                     } else if (y == 0 && ypos >= yLimitf) {
260                         y = ypos - 2;
261                     } else if (y == 1 && ypos <= yLimits) {
262                         y = ypos + 2;
263                     }
264                 }
265             }
266             if (xChanged) {
267                 z = zpos + 2;
268             } else {
269                 z = zpos;
270             }
271 //          for (int i = 0; i < xPosition.size(); i++)
272 //          {
273 //              if (x - xPosition.get(i) <= 1 && x - xPosition.get(i) >= -1 &&
274 //                      y - yPosition.get(i) <= 1 && y - yPosition.get(i) >= -1
275 //                      &&z - zPosition.get(i) <= 1 && z - zPosition.get(i) >=
276 //                      -1)
277 //              {
278 //                  unTrue = true;
279 //              }
280 //          }
281         }
282         xPosition.add(x);
283         yPosition.add(y);
284         zPosition.add(z);
285     }
286 
getxm(int i)287     public int getxm(int i) {
288         return xPosition.get(xPosition.size() - i);
289     }
290 
getym(int i)291     public int getym(int i) {
292         return yPosition.get(yPosition.size() - i);
293     }
294 
getzm(int i)295     public int getzm(int i) {
296         return zPosition.get(zPosition.size() - i);
297     }
298 
getx(int i)299     public int getx(int i) {
300         return xPosition.get(i);
301     }
302 
gety(int i)303     public int gety(int i) {
304         return yPosition.get(i);
305     }
306 
getz(int i)307     public int getz(int i) {
308         return zPosition.get(i);
309     }
310     long nbFrames = 0;
311     long cullTime = 0;
312     float time = 0;
313     Vector3f lookAtPos = new Vector3f(0, 0, 0);
314     float xpos = 0;
315     Spatial box;
316 
317     @Override
simpleUpdate(float tpf)318     public void simpleUpdate(float tpf) {
319         time += tpf;
320         int random = rand.nextInt(2000);
321         float mult1 = 1.0f;
322         float mult2 = 1.0f;
323         if (random < 500) {
324             mult1 = 1.0f;
325             mult2 = 1.0f;
326         } else if (random < 1000) {
327             mult1 = -1.0f;
328             mult2 = 1.0f;
329         } else if (random < 1500) {
330             mult1 = 1.0f;
331             mult2 = -1.0f;
332         } else if (random <= 2000) {
333             mult1 = -1.0f;
334             mult2 = -1.0f;
335         }
336         box = batchNode.getChild("Box" + random);
337         if (box != null) {
338             Vector3f v = box.getLocalTranslation();
339             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);
340         }
341         terrain.setLocalRotation(new Quaternion().fromAngleAxis(time, Vector3f.UNIT_Y));
342 
343 
344     }
345 }
346