1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

organizing stuff.

This commit is contained in:
Perttu Ahola 2010-12-21 18:08:24 +02:00
parent 3b0bff2f74
commit 3f5bad938a
23 changed files with 805 additions and 374 deletions

View file

@ -40,6 +40,8 @@ MapBlock::MapBlock(NodeContainer *parent, v3s16 pos, bool dummy):
data = NULL;
if(dummy == false)
reallocate();
m_spawn_timer = -10000;
#ifndef SERVER
m_mesh_expired = false;
@ -237,8 +239,8 @@ void MapBlock::makeFastFace(TileSpec tile, u8 light, v3f p,
v3f zerovector = v3f(0,0,0);
u8 li = decode_light(light);
//u8 li = 150;
//u8 li = decode_light(light);
u8 li = light;
u8 alpha = 255;
@ -435,14 +437,14 @@ void MapBlock::updateFastFaceRow(
// If node at sp (tile0) is more solid
if(mf == 1)
{
makeFastFace(tile0, light,
makeFastFace(tile0, decode_light(light),
sp, face_dir, scale,
posRelative_f, dest);
}
// If node at sp is less solid (mf == 2)
else
{
makeFastFace(tile1, light,
makeFastFace(tile1, decode_light(light),
sp+face_dir_f, -face_dir, scale,
posRelative_f, dest);
}
@ -992,6 +994,52 @@ void MapBlock::copyTo(VoxelManipulator &dst)
core::array<DistanceSortedObject> &dest)
{
}*/
void MapBlock::stepObjects(float dtime, bool server, u32 daynight_ratio)
{
/*
Step objects
*/
m_objects.step(dtime, server, daynight_ratio);
/*
Spawn some objects at random.
Use dayNightDiffed() to approximate being near ground level
*/
if(m_spawn_timer < -999)
{
m_spawn_timer = 60;
}
if(dayNightDiffed() == true && getObjectCount() == 0)
{
m_spawn_timer -= dtime;
if(m_spawn_timer <= 0.0)
{
m_spawn_timer += rand() % 300;
v2s16 p2d(
(rand()%(MAP_BLOCKSIZE-1))+0,
(rand()%(MAP_BLOCKSIZE-1))+0
);
s16 y = getGroundLevel(p2d);
if(y >= 0)
{
v3s16 p(p2d.X, y+1, p2d.Y);
if(getNode(p).d == CONTENT_AIR
&& getNode(p).getLightBlend(daynight_ratio) <= 11)
{
RatObject *obj = new RatObject(NULL, -1, intToFloat(p));
addObject(obj);
}
}
}
}
setChangedFlag();
}
void MapBlock::updateDayNightDiff()
@ -1041,6 +1089,31 @@ void MapBlock::updateDayNightDiff()
m_day_night_differs = differs;
}
s16 MapBlock::getGroundLevel(v2s16 p2d)
{
if(isDummy())
return -3;
try
{
s16 y = MAP_BLOCKSIZE-1;
for(; y>=0; y--)
{
if(is_ground_content(getNodeRef(p2d.X, y, p2d.Y).d))
{
if(y == MAP_BLOCKSIZE-1)
return -2;
else
return y;
}
}
return -1;
}
catch(InvalidPositionException &e)
{
return -3;
}
}
/*
Serialization
*/