X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Futility.cpp;h=87c81cb2abdba5cd2526b281ab20f39efb2f2952;hb=581f950e10b40f2af4ede56c3fa78f13eccb610b;hp=3c6c2f286ea7f05800f976d9c5a8ef0a5142b786;hpb=3e012122d1607a6269af4e4522305d8b5efcd9d4;p=dragonfireclient.git diff --git a/src/utility.cpp b/src/utility.cpp index 3c6c2f286..87c81cb2a 100644 --- a/src/utility.cpp +++ b/src/utility.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gettime.h" #include "sha1.h" #include "base64.h" +#include "log.h" TimeTaker::TimeTaker(const char *name, u32 *result) { @@ -47,7 +48,7 @@ u32 TimeTaker::stop(bool quiet) else { if(quiet == false) - std::cout< MYRAND_MAX) + { + errorstream<<"WARNING: myrand_range: max-min > MYRAND_MAX"< max) + { + assert(0); + return max; + } + return (myrand()%(max-min+1))+min; +} + +#ifndef SERVER // Sets the color of all vertices in the mesh void setMeshVerticesColor(scene::IMesh* mesh, video::SColor& color) { @@ -174,6 +191,7 @@ void setMeshVerticesColor(scene::IMesh* mesh, video::SColor& color) } } } +#endif /* blockpos: position of block in block coordinates @@ -218,21 +236,21 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, // If block is (nearly) touching the camera, don't // bother validating further (that is, render it anyway) - if(d > block_max_radius * 1.5) - { - // Cosine of the angle between the camera direction - // and the block direction (camera_dir is an unit vector) - f32 cosangle = dforward / d; - - // Compensate for the size of the block - // (as the block has to be shown even if it's a bit off FOV) - // This is an estimate. - cosangle += block_max_radius / dforward; - - // If block is not in the field of view, skip it - if(cosangle < cos(camera_fov / 2)) - return false; - } + if(d < block_max_radius) + return true; + + // Cosine of the angle between the camera direction + // and the block direction (camera_dir is an unit vector) + f32 cosangle = dforward / d; + + // Compensate for the size of the block + // (as the block has to be shown even if it's a bit off FOV) + // This is an estimate, plus an arbitary factor + cosangle += block_max_radius / d * 0.5; + + // If block is not in the field of view, skip it + if(cosangle < cos(camera_fov / 2)) + return false; return true; } @@ -258,3 +276,103 @@ std::string translatePassword(std::string playername, std::wstring password) +PointedThing::PointedThing(): + type(POINTEDTHING_NOTHING), + node_undersurface(0,0,0), + node_abovesurface(0,0,0), + object_id(-1) +{} + +std::string PointedThing::dump() const +{ + std::ostringstream os(std::ios::binary); + if(type == POINTEDTHING_NOTHING) + { + os<<"[nothing]"; + } + else if(type == POINTEDTHING_NODE) + { + const v3s16 &u = node_undersurface; + const v3s16 &a = node_abovesurface; + os<<"[node under="<