removed accidental double flowWater
authorPerttu Ahola <celeron55@gmail.com>
Sat, 11 Dec 2010 16:12:18 +0000 (18:12 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Sat, 11 Dec 2010 16:12:18 +0000 (18:12 +0200)
src/voxel.cpp

index 15624feed5950cc1e0ba0c1244df0fa1b936e427..b85ba866642e5dd6747b771c621ed2e9460fcf4b 100644 (file)
@@ -725,183 +725,6 @@ bool VoxelManipulator::flowWater(v3s16 removed_pos,
        flowWater(p, active_nodes, recursion_depth,
                        debugprint, counter, counterlimit);
        
-find_again:
-       // Try flowing water to empty positions around removed_pos.
-       // They are checked in reverse order compared to the previous loop.
-       for(s32 i=5; i>=0; i--)
-       {
-               //v3s16 p = removed_pos + dirs[i];
-               p = removed_pos + v3s16(s1*dirs[i].X, dirs[i].Y, s2*dirs[i].Z);
-
-               u8 f = m_flags[m_area.index(p)];
-               // Water can't move to inexistent nodes
-               if(f & VOXELFLAG_INEXISTENT)
-                       continue;
-               MapNode &n = m_data[m_area.index(p)];
-               // Water can only move to air
-               if(n.d != MATERIAL_AIR)
-                       continue;
-                       
-               // Flow water to node
-               bool moved =
-               flowWater(p, active_nodes, recursion_depth,
-                               debugprint, counter, counterlimit);
-               
-               if(moved)
-               {
-                       // Search again from all neighbors
-                       goto find_again;
-               }
-       }
-
-       if(counter != NULL)
-       {
-               (*counter)++;
-               if((*counter) % 10 == 0)
-                       dstream<<"flowWater(): moved "<<(*counter)<<" nodes"
-                                       <<std::endl;
-
-               if(counterlimit != -1 && (*counter) > counterlimit)
-               {
-                       dstream<<"Counter limit reached; returning"<<std::endl;
-                       throw ProcessingLimitException("flowWater counterlimit reached");
-               }
-       }
-       
-       return true;
-}
-bool VoxelManipulator::flowWater(v3s16 removed_pos,
-               core::map<v3s16, u8> &active_nodes,
-               int recursion_depth, bool debugprint,
-               int *counter, int counterlimit)
-{
-       v3s16 dirs[6] = {
-               v3s16(0,1,0), // top
-               v3s16(-1,0,0), // left
-               v3s16(1,0,0), // right
-               v3s16(0,0,-1), // front
-               v3s16(0,0,1), // back
-               v3s16(0,-1,0), // bottom
-       };
-
-       recursion_depth++;
-
-       v3s16 p;
-       
-       // Randomize horizontal order
-       static s32 cs = 0;
-       if(cs < 3)
-               cs++;
-       else
-               cs = 0;
-       s16 s1 = (cs & 1) ? 1 : -1;
-       s16 s2 = (cs & 2) ? 1 : -1;
-       //dstream<<"s1="<<s1<<", s2="<<s2<<std::endl;
-
-       {
-       TimeTaker timer1("flowWater pre", g_device, &flowwater_pre_time);
-       
-       // Load neighboring nodes
-       emerge(VoxelArea(removed_pos - v3s16(1,1,1), removed_pos + v3s16(1,1,1)));
-       
-       // Ignore incorrect removed_pos
-       {
-               u8 f = m_flags[m_area.index(removed_pos)];
-               // Ignore inexistent or checked node
-               if(f & (VOXELFLAG_INEXISTENT | VOXELFLAG_CHECKED))
-                       return false;
-               MapNode &n = m_data[m_area.index(removed_pos)];
-               // Water can move only to air
-               if(n.d != MATERIAL_AIR)
-                       return false;
-       }
-       
-       s32 i;
-       for(i=0; i<6; i++)
-       {
-               p = removed_pos + v3s16(s1*dirs[i].X, dirs[i].Y, s2*dirs[i].Z);
-
-               u8 f = m_flags[m_area.index(p)];
-               // Inexistent or checked nodes can't move
-               if(f & (VOXELFLAG_INEXISTENT | VOXELFLAG_CHECKED))
-                       continue;
-               MapNode &n = m_data[m_area.index(p)];
-               // Only liquid nodes can move
-               if(material_liquid(n.d) == false)
-                       continue;
-               // If block is at top, select it always
-               if(i == 0)
-               {
-                       break;
-               }
-               // If block is at bottom, select it if it has enough pressure
-               if(i == 5)
-               {
-                       if(n.pressure >= 3)
-                               break;
-                       continue;
-               }
-               // Else block is at some side. Select it if it has enough pressure
-               if(n.pressure >= 2)
-               {
-                       break;
-               }
-       }
-
-       // If there is nothing to move, return
-       if(i==6)
-               return false;
-
-       // Switch nodes at p and removed_pos
-       u8 m = m_data[m_area.index(p)].d;
-       u8 f = m_flags[m_area.index(p)];
-       m_data[m_area.index(p)].d = m_data[m_area.index(removed_pos)].d;
-       m_flags[m_area.index(p)] = m_flags[m_area.index(removed_pos)];
-       m_data[m_area.index(removed_pos)].d = m;
-       m_flags[m_area.index(removed_pos)] = f;
-
-       // Mark removed_pos checked
-       m_flags[m_area.index(removed_pos)] |= VOXELFLAG_CHECKED;
-       // If block was dropped from surface, increase pressure
-       if(i == 0 && m_data[m_area.index(removed_pos)].pressure == 1)
-       {
-               m_data[m_area.index(removed_pos)].pressure = 2;
-       }
-       
-       /*if(debugprint)
-       {
-               dstream<<"VoxelManipulator::flowWater(): Moved bubble:"<<std::endl;
-               print(dstream, VOXELPRINT_WATERPRESSURE);
-       }*/
-
-       // Update pressure
-       VoxelArea a;
-       a.addPoint(p - v3s16(1,1,1));
-       a.addPoint(p + v3s16(1,1,1));
-       a.addPoint(removed_pos - v3s16(1,1,1));
-       a.addPoint(removed_pos + v3s16(1,1,1));
-       updateAreaWaterPressure(a, active_nodes);
-       
-       /*if(debugprint)
-       {
-               dstream<<"VoxelManipulator::flowWater(): Pressure updated:"<<std::endl;
-               print(dstream, VOXELPRINT_WATERPRESSURE);
-               //std::cin.get();
-       }*/
-
-       if(debugprint)
-       {
-               dstream<<"VoxelManipulator::flowWater(): step done:"<<std::endl;
-               print(dstream, VOXELPRINT_WATERPRESSURE);
-               //std::cin.get();
-       }
-       
-       }//timer1
-
-       // Flow water to the newly created empty position
-       flowWater(p, active_nodes, recursion_depth,
-                       debugprint, counter, counterlimit);
-       
 find_again:
        // Try flowing water to empty positions around removed_pos.
        // They are checked in reverse order compared to the previous loop.