#include "map.h"
// For TimeTaker
-#include "main.h"
#include "utility.h"
+#include "gettime.h"
/*
Debug stuff
if(m_area.contains(area))
return;
- TimeTaker timer("addArea", g_device, &addarea_time);
+ TimeTaker timer("addArea", &addarea_time);
// Calculate new area
VoxelArea new_area;
}
}
-void VoxelManipulator::interpolate(VoxelArea area)
-{
- VoxelArea emerge_area = area;
- emerge_area.MinEdge -= v3s16(1,1,1);
- emerge_area.MaxEdge += v3s16(1,1,1);
- emerge(emerge_area);
-
- SharedBuffer<u8> buf(area.getVolume());
-
- for(s32 z=area.MinEdge.Z; z<=area.MaxEdge.Z; z++)
- for(s32 y=area.MinEdge.Y; y<=area.MaxEdge.Y; y++)
- for(s32 x=area.MinEdge.X; x<=area.MaxEdge.X; x++)
- {
- v3s16 p(x,y,z);
-
- v3s16 dirs[] = {
- v3s16(1,1,0),
- v3s16(1,0,1),
- v3s16(1,-1,0),
- v3s16(1,0,-1),
- v3s16(-1,1,0),
- v3s16(-1,0,1),
- v3s16(-1,-1,0),
- v3s16(-1,0,-1),
- };
- //const v3s16 *dirs = g_26dirs;
-
- s16 total = 0;
- s16 airness = 0;
- u8 m = CONTENT_IGNORE;
-
- for(s16 i=0; i<8; i++)
- //for(s16 i=0; i<26; i++)
- {
- v3s16 p2 = p + dirs[i];
-
- u8 f = m_flags[m_area.index(p2)];
- assert(!(f & VOXELFLAG_NOT_LOADED));
- if(f & VOXELFLAG_INEXISTENT)
- continue;
-
- MapNode &n = m_data[m_area.index(p2)];
-
- airness += (n.d == CONTENT_AIR) ? 1 : -1;
- total++;
-
- if(m == CONTENT_IGNORE && n.d != CONTENT_AIR)
- m = n.d;
- }
-
- // 1 if air, 0 if not
- buf[area.index(p)] = airness > -total/2 ? CONTENT_AIR : m;
- //buf[area.index(p)] = airness > -total ? CONTENT_AIR : m;
- //buf[area.index(p)] = airness >= -7 ? CONTENT_AIR : m;
- }
-
- for(s32 z=area.MinEdge.Z; z<=area.MaxEdge.Z; z++)
- for(s32 y=area.MinEdge.Y; y<=area.MaxEdge.Y; y++)
- for(s32 x=area.MinEdge.X; x<=area.MaxEdge.X; x++)
- {
- v3s16 p(x,y,z);
- m_data[m_area.index(p)].d = buf[area.index(p)];
- }
-}
-
void VoxelManipulator::clearFlag(u8 flags)
{
// 0-1ms on moderate area
- TimeTaker timer("clearFlag", g_device, &clearflag_time);
+ TimeTaker timer("clearFlag", &clearflag_time);
v3s16 s = m_area.getExtent();
int pr;
// If at ocean surface
- if(n.pressure == 1 && n.d == CONTENT_OCEAN)
+ if(n.pressure == 1 && n.d == CONTENT_WATERSOURCE)
//if(n.pressure == 1) // Causes glitches but is fast
{
pr = 1;
core::map<v3s16, u8> &active_nodes,
bool checked3_is_clear)
{
- TimeTaker timer("updateAreaWaterPressure", g_device,
- &updateareawaterpressure_time);
+ TimeTaker timer("updateAreaWaterPressure", &updateareawaterpressure_time);
emerge(a, 3);
try
{
// 0-1ms @ recur_count <= 100
- //TimeTaker timer("getWaterPressure", g_device);
+ //TimeTaker timer("getWaterPressure", g_irrlicht);
pr = getWaterPressure(p, highest_y, recur_count);
}
catch(ProcessingLimitException &e)
try
{
// 0ms
- //TimeTaker timer("spreadWaterPressure", g_device);
+ //TimeTaker timer("spreadWaterPressure", g_irrlicht);
spreadWaterPressure(p, pr, a, active_nodes, 0);
}
catch(ProcessingLimitException &e)
//dstream<<"s1="<<s1<<", s2="<<s2<<std::endl;
{
- TimeTaker timer1("flowWater pre", g_device, &flowwater_pre_time);
+ TimeTaker timer1("flowWater pre", &flowwater_pre_time);
// Load neighboring nodes
emerge(VoxelArea(removed_pos - v3s16(1,1,1), removed_pos + v3s16(1,1,1)), 4);
u8 m = m_data[m_area.index(p)].d;
u8 f = m_flags[m_area.index(p)];
- if(m == CONTENT_OCEAN)
+ if(m == CONTENT_WATERSOURCE)
from_ocean = true;
// Move air bubble if not taking water from ocean
/*
NOTE: This does not work as-is
- if(m == CONTENT_OCEAN)
+ if(m == CONTENT_WATERSOURCE)
{
// If block was raised to surface, increase pressure of
// source node
debugprint, stoptime);
}
- if(stoptime != 0 && g_device != NULL)
+ if(stoptime != 0)
{
- u32 timenow = g_device->getTimer()->getRealTime();
- if(timenow >= stoptime ||
- (stoptime < 0x80000000 && timenow > 0x80000000))
+ u32 timenow = getTimeMs();
+ // Well, it is a bit hard to guess because we don't know the
+ // start time...
+ bool overflow = timenow < stoptime - 100000;
+ if(timenow >= stoptime || overflow)
{
dstream<<"flowWater: stoptime reached"<<std::endl;
throw ProcessingLimitException("flowWater stoptime reached");
return;
}
- //TimeTaker timer1("flowWater (active_nodes)", g_device);
+ //TimeTaker timer1("flowWater (active_nodes)", g_irrlicht);
//dstream<<"active_nodes.size() = "<<active_nodes.size()<<std::endl;
u32 stoptime = 0;
- if(g_device != NULL)
- {
- stoptime = g_device->getTimer()->getRealTime() + timelimit;
- }
+ stoptime = getTimeMs() + timelimit;
// Count of handled active nodes
u32 handled_count = 0;
*/
s32 k = 0;
if(active_nodes.size() != 0)
- k = (s32)rand() % (s32)active_nodes.size();
+ k = (s32)myrand() % (s32)active_nodes.size();
// Flow water to active nodes
for(;;)