Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 1.42 KB | None | 0 0
  1. private void treeTick(int i) {
  2.         int tree = trees[i];
  3.        
  4.         // Die
  5.         if (tree >= 100) {
  6.             trees[i] = -1;
  7.             return;
  8.         }
  9.        
  10.         // Grow
  11.         int shade = 0;
  12.         int[] neighbours = getNeighbours(i);
  13.         for (int nidx : neighbours) {
  14.             int nx = grid.getCellX(nidx),
  15.                 ny = grid.getCellY(nidx);
  16.             if (!(grid.isValid(nx,ny) && (grid.isFree(nx,ny) || grid.get(nx,ny) == Tree.COLOR_RGB)))
  17.                 continue;
  18.             int neighbour = trees[nidx];
  19.             if (neighbour > tree)
  20.                 shade += (neighbour - tree);
  21.         }
  22.         shade = Math.max((int)(shade * (100-tree) * .1),1);
  23.         double chanceToGrow = 1.0 / shade;
  24.         if (TestGame.rand.nextDouble() < chanceToGrow)
  25.             ++trees[i];
  26.        
  27.         // Multiply
  28.         if (TestGame.rand.nextDouble() < tree * .01) {
  29.             int dx = (TestGame.rand.nextBoolean() ? 1 : -1),
  30.                 dy = (TestGame.rand.nextBoolean() ? 1 : -1);
  31.             dx *= Math.pow(TestGame.rand.nextDouble(),3) * 10;
  32.             dy *= Math.pow(TestGame.rand.nextDouble(),3) * 10;
  33.            
  34.             int newTree = i + dy * grid.getWidth();
  35.             if (!EasyMath.isBetweenOrEqual(grid.getCellX(newTree) + dx,0,grid.getWidth()-1))
  36.                 return;
  37.             newTree += dx;
  38.             if (!EasyMath.isBetweenOrEqual(newTree,0,trees.length-1))
  39.                 return;
  40.             if (trees[newTree] == -1 && grid.isFree(grid.getCellX(newTree),grid.getCellY(newTree)))
  41.                 trees[newTree] = 0;
  42.         }
  43.     }
  44.    
  45.     private int[] getNeighbours(int i) {
  46.         int i1 = i - grid.getWidth(),
  47.             i2 = i,
  48.             i3 = i + grid.getWidth();
  49.         return new int[]{i1 - 1,i1,i1 + 1,i2 - 1,i2,i2 + 1,i3 - 1,i3,i3 + 1};
  50.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement