SHARE
TWEET

Water Project

a guest Sep 2nd, 2011 276 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top