X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futility.cpp;h=7ffbe716066cf467df04d392687494a1e3845313;hb=013921782b1a8506f4aee1d1be0312002eddd575;hp=3da2f48d56766f947c218827ab417b3a7d0ebc97;hpb=123e8fdf53ffb40c7464d0559a49e048fed79d7d;p=oweals%2Fminetest.git diff --git a/src/utility.cpp b/src/utility.cpp index 3da2f48d5..7ffbe7160 100644 --- a/src/utility.cpp +++ b/src/utility.cpp @@ -22,34 +22,24 @@ 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, IrrlichtWrapper *irrlicht, u32 *result) +TimeTaker::TimeTaker(const char *name, u32 *result) { m_name = name; - m_irrlicht = irrlicht; m_result = result; m_running = true; - if(irrlicht == NULL) - { - m_time1 = 0; - return; - } - m_time1 = m_irrlicht->getTime(); + m_time1 = getTimeMs(); } u32 TimeTaker::stop(bool quiet) { if(m_running) { - if(m_irrlicht == NULL) - { - /*if(quiet == false) - std::cout<<"Couldn't measure time for "<getTime(); + u32 time2 = getTimeMs(); u32 dtime = time2 - m_time1; if(m_result != NULL) { @@ -58,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; + + // Maximum radius of a block + f32 block_max_radius = 0.5*1.44*1.44*MAP_BLOCKSIZE*BS; + + // If block is (nearly) touching the camera, don't + // bother validating further (that is, render it anyway) + 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; +} + +