Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.robin.water.data
- {
- import flash.geom.Vector3D;
- public class WaterSimulator
- {
- private var blocks:SpatialDB;
- private var bucket:Array; // Will hold all locations of water
- public function WaterSimulator(blocks:SpatialDB)
- {
- this.blocks = blocks;
- bucket = new Array();
- }
- public function addWater(tile:Vector3D):void {
- var i:uint = 0;
- var inBucket:Boolean = false;
- while(i < bucket.length) {
- if(tile.equals(bucket[i])) {
- inBucket = true;
- break;
- }
- i++;
- }
- if(!inBucket) {
- bucket.push(tile);
- blocks.changeTile(tile.x,tile.z,tile.y,9);
- }
- }
- public function step():void {
- var counter:int = bucket.length-1;
- while(counter >= 0) {
- var loc:Vector3D = bucket[counter];
- if(blocks.getTile(loc.x, loc.z, loc.y - 1) == 0 || blocks.getTile(loc.x, loc.z, loc.y - 1) >= 4) {
- addWater(new Vector3D(loc.x, loc.y - 1, loc.z));
- }
- if(blocks.getTile(loc.x, loc.z, loc.y - 1) == 1) {
- if(blocks.getTile(loc.x-1, loc.z, loc.y) == 0)
- addWater(new Vector3D(loc.x-1, loc.y, loc.z));
- if(blocks.getTile(loc.x+1, loc.z, loc.y) == 0)
- addWater(new Vector3D(loc.x+1, loc.y, loc.z));
- if(blocks.getTile(loc.x, loc.z-1, loc.y) == 0)
- addWater(new Vector3D(loc.x, loc.y, loc.z-1));
- if(blocks.getTile(loc.x, loc.z+1, loc.y) == 0)
- addWater(new Vector3D(loc.x, loc.y, loc.z+1));
- }
- counter--;
- }// While
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement