From be851871cd43316d12fd9a5f2cc6dec98a1c9ce0 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 30 Jan 2011 01:44:54 +0200 Subject: map generation framework under development... not quite operational at this point. --- src/mapblock.cpp | 65 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 25 deletions(-) (limited to 'src/mapblock.cpp') diff --git a/src/mapblock.cpp b/src/mapblock.cpp index b346b0980..a7bc730ce 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -293,7 +293,8 @@ void MapBlock::makeFastFace(TileSpec tile, u8 light, v3f p, Gets node tile from any place relative to block. Returns TILE_NODE if doesn't exist or should not be drawn. */ -TileSpec MapBlock::getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir) +TileSpec MapBlock::getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir, + NodeModMap &temp_mods) { TileSpec spec; spec = mn.getTile(face_dir); @@ -301,13 +302,15 @@ TileSpec MapBlock::getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir) /* Check temporary modifications on this node */ - core::map::Node *n; + /*core::map::Node *n; n = m_temp_mods.find(p); - // If modified if(n != NULL) { - struct NodeMod mod = n->getValue(); + struct NodeMod mod = n->getValue();*/ + NodeMod mod; + if(temp_mods.get(p, &mod)) + { if(mod.type == NODEMOD_CHANGECONTENT) { MapNode mn2(mod.param); @@ -326,18 +329,20 @@ TileSpec MapBlock::getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir) return spec; } -u8 MapBlock::getNodeContent(v3s16 p, MapNode mn) +u8 MapBlock::getNodeContent(v3s16 p, MapNode mn, NodeModMap &temp_mods) { /* Check temporary modifications on this node */ - core::map::Node *n; + /*core::map::Node *n; n = m_temp_mods.find(p); - // If modified if(n != NULL) { - struct NodeMod mod = n->getValue(); + struct NodeMod mod = n->getValue();*/ + NodeMod mod; + if(temp_mods.get(p, &mod)) + { if(mod.type == NODEMOD_CHANGECONTENT) { // Overrides content @@ -376,7 +381,8 @@ void MapBlock::updateFastFaceRow( v3f translate_dir_f, v3s16 face_dir, v3f face_dir_f, - core::array &dest) + core::array &dest, + NodeModMap &temp_mods) { v3s16 p = startpos; @@ -387,8 +393,8 @@ void MapBlock::updateFastFaceRow( u8 light = getFaceLight(daynight_ratio, n0, n1, face_dir); - TileSpec tile0 = getNodeTile(n0, p, face_dir); - TileSpec tile1 = getNodeTile(n1, p + face_dir, -face_dir); + TileSpec tile0 = getNodeTile(n0, p, face_dir, temp_mods); + TileSpec tile1 = getNodeTile(n1, p + face_dir, -face_dir, temp_mods); for(u16 j=0; j &dest) -{ -}*/ void MapBlock::stepObjects(float dtime, bool server, u32 daynight_ratio) { /* @@ -1501,6 +1513,8 @@ void MapBlock::serialize(std::ostream &os, u8 version) flags |= 1; if(m_day_night_differs) flags |= 2; + if(m_lighting_expired) + flags |= 3; os.write((char*)&flags, 1); u32 nodecount = MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; @@ -1622,6 +1636,7 @@ void MapBlock::deSerialize(std::istream &is, u8 version) is.read((char*)&flags, 1); is_underground = (flags & 1) ? true : false; m_day_night_differs = (flags & 2) ? true : false; + m_lighting_expired = (flags & 3) ? true : false; // Uncompress data std::ostringstream os(std::ios_base::binary); -- cgit v1.2.3