Guest User

Water Project

a guest
Sep 2nd, 2011
315
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.robin.water.data
  2. {
  3.     import flash.geom.Vector3D;
  4.  
  5.     public class WaterSimulator
  6.     {
  7.         private var blocks:SpatialDB;
  8.        
  9.         private var bucket:Array; // Will hold all locations of water
  10.         public function WaterSimulator(blocks:SpatialDB)
  11.         {
  12.             this.blocks = blocks;
  13.            
  14.             bucket = new Array();
  15.         }
  16.        
  17.         public function addWater(tile:Vector3D):void {
  18.             var i:uint = 0;
  19.             var inBucket:Boolean = false;
  20.             while(i < bucket.length) {
  21.                 if(tile.equals(bucket[i])) {
  22.                     inBucket = true;
  23.                     break;
  24.                 }
  25.                
  26.                 i++;
  27.             }
  28.            
  29.             if(!inBucket) {
  30.                 bucket.push(tile);
  31.                 blocks.changeTile(tile.x,tile.z,tile.y,9);
  32.             }
  33.            
  34.         }
  35.        
  36.        
  37.         public function step():void {
  38.             var counter:int = bucket.length-1;
  39.  
  40.             while(counter >= 0) {
  41.                 var loc:Vector3D = bucket[counter];
  42.                
  43.                 if(blocks.getTile(loc.x, loc.z, loc.y - 1) == 0 || blocks.getTile(loc.x, loc.z, loc.y - 1) >= 4) {
  44.                     addWater(new Vector3D(loc.x, loc.y - 1, loc.z));
  45.                 }
  46.                
  47.                
  48.                 if(blocks.getTile(loc.x, loc.z, loc.y - 1) == 1) {
  49.                     if(blocks.getTile(loc.x-1, loc.z, loc.y) == 0)
  50.                         addWater(new Vector3D(loc.x-1, loc.y, loc.z));
  51.                     if(blocks.getTile(loc.x+1, loc.z, loc.y) == 0)
  52.                         addWater(new Vector3D(loc.x+1, loc.y, loc.z));
  53.                     if(blocks.getTile(loc.x, loc.z-1, loc.y) == 0)
  54.                         addWater(new Vector3D(loc.x, loc.y, loc.z-1));
  55.                     if(blocks.getTile(loc.x, loc.z+1, loc.y) == 0)
  56.                         addWater(new Vector3D(loc.x, loc.y, loc.z+1));
  57.                 }
  58.            
  59.                
  60.                
  61.                 counter--;
  62.             }// While
  63.         }
  64.        
  65.        
  66.     }
  67. }
RAW Paste Data