X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futility.cpp;h=7ffbe716066cf467df04d392687494a1e3845313;hb=013921782b1a8506f4aee1d1be0312002eddd575;hp=ae4fe435f83dea493a89f087fd2e7c1afe6e76b1;hpb=2990f5d90bd556684c07d60872a707e649bd71ee;p=oweals%2Fminetest.git diff --git a/src/utility.cpp b/src/utility.cpp index ae4fe435f..7ffbe7160 100644 --- a/src/utility.cpp +++ b/src/utility.cpp @@ -22,8 +22,10 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "utility.h" -#include "irrlichtwrapper.h" #include "gettime.h" +#include "sha1.h" +#include "base64.h" +#include "log.h" TimeTaker::TimeTaker(const char *name, u32 *result) { @@ -46,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) +{ + if(mesh == NULL) + return; + + u16 mc = mesh->getMeshBufferCount(); + for(u16 j=0; jgetMeshBuffer(j); + video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); + u16 vc = buf->getVertexCount(); + for(u16 i=0; i range * BS) return false; @@ -194,23 +236,43 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, f32 range, // 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(FOV_ANGLE/2)) - if(cosangle < cos(FOV_ANGLE/2. * 4./3.)) - 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; } +// Get an sha-1 hash of the player's name combined with +// the password entered. That's what the server uses as +// their password. (Exception : if the password field is +// blank, we send a blank password - this is for backwards +// compatibility with password-less players). +std::string translatePassword(std::string playername, std::wstring password) +{ + if(password.length() == 0) + return ""; + + std::string slt = playername + wide_to_narrow(password); + SHA1 sha1; + sha1.addBytes(slt.c_str(), slt.length()); + unsigned char *digest = sha1.getDigest(); + std::string pwd = base64_encode(digest, 20); + free(digest); + return pwd; +} + + +