#include "mapblock_mesh.h"
#include <IMaterialRenderer.h>
#include <matrix4.h>
-#include "log.h"
#include "mapsector.h"
-#include "nodedef.h"
#include "mapblock.h"
#include "profiler.h"
#include "settings.h"
scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(),
RenderingEngine::get_scene_manager(), id),
m_client(client),
- m_control(control),
- m_camera_position(0,0,0),
- m_camera_direction(0,0,1),
- m_camera_fov(M_PI)
+ m_control(control)
{
m_box = aabb3f(-BS*1000000,-BS*1000000,-BS*1000000,
BS*1000000,BS*1000000,BS*1000000);
}
-ClientMap::~ClientMap()
-{
-}
-
MapSector * ClientMap::emergeSector(v2s16 p2d)
{
DSTACK(FUNCTION_NAME);
p_nodes_max.Z / MAP_BLOCKSIZE + 1);
}
-void ClientMap::updateDrawList(video::IVideoDriver* driver)
+void ClientMap::updateDrawList()
{
ScopeProfiler sp(g_profiler, "CM::updateDrawList()", SPT_AVG);
g_profiler->add("CM::updateDrawList() count", 1);
- for (std::map<v3s16, MapBlock*>::iterator i = m_drawlist.begin();
- i != m_drawlist.end(); ++i) {
- MapBlock *block = i->second;
+ for (auto &i : m_drawlist) {
+ MapBlock *block = i.second;
block->refDrop();
}
m_drawlist.clear();
occlusion_culling_enabled = false;
}
- for (std::map<v2s16, MapSector*>::iterator si = m_sectors.begin();
- si != m_sectors.end(); ++si) {
- MapSector *sector = si->second;
+ for (const auto §or_it : m_sectors) {
+ MapSector *sector = sector_it.second;
v2s16 sp = sector->getPos();
- if (m_control.range_all == false) {
+ if (!m_control.range_all) {
if (sp.X < p_blocks_min.X || sp.X > p_blocks_max.X ||
sp.Y < p_blocks_min.Z || sp.Y > p_blocks_max.Z)
continue;
u32 sector_blocks_drawn = 0;
- for (MapBlockVect::iterator i = sectorblocks.begin();
- i != sectorblocks.end(); ++i) {
- MapBlock *block = *i;
-
+ for (auto block : sectorblocks) {
/*
- Compare block position to camera position, skip
- if not seen on display
- */
+ Compare block position to camera position, skip
+ if not seen on display
+ */
if (block->mesh)
block->mesh->updateCameraOffset(m_camera_offset);
m_last_drawn_sectors.insert(sp);
}
- m_control.blocks_would_have_drawn = blocks_would_have_drawn;
- m_control.blocks_drawn = blocks_drawn;
- m_control.farthest_drawn = farthest_drawn;
-
g_profiler->avg("CM: blocks in range", blocks_in_range);
g_profiler->avg("CM: blocks occlusion culled", blocks_occlusion_culled);
if (blocks_in_range != 0)
MeshBufListList drawbufs;
- for (std::map<v3s16, MapBlock*>::iterator i = m_drawlist.begin();
- i != m_drawlist.end(); ++i) {
- MapBlock *block = i->second;
+ for (auto &i : m_drawlist) {
+ MapBlock *block = i.second;
// If the mesh of the block happened to get deleted, ignore it
if (!block->mesh)
if (blocks_drawn != 0)
g_profiler->avg(prefix + "empty blocks (frac)",
(float)blocks_without_stuff / blocks_drawn);
-
- /*infostream<<"renderMap(): is_transparent_pass="<<is_transparent_pass
- <<", rendered "<<vertex_count<<" vertices."<<std::endl;*/
}
-static bool getVisibleBrightness(Map *map, v3f p0, v3f dir, float step,
+static bool getVisibleBrightness(Map *map, const v3f &p0, v3f dir, float step,
float step_multiplier, float start_distance, float end_distance,
INodeDefManager *ndef, u32 daylight_factor, float sunlight_min_d,
int *result, bool *sunlight_seen)
sunlight_min_d = 0;
}
}
- for(int i=0; distance < end_distance; i++){
+ for (int i=0; distance < end_distance; i++) {
pf += dir * step;
distance += step;
step *= step_multiplier;
v3s16 p = floatToInt(pf, BS);
MapNode n = map->getNodeNoEx(p);
- if(allow_allowing_non_sunlight_propagates && i == 0 &&
+ if (allow_allowing_non_sunlight_propagates && i == 0 &&
ndef->get(n).param_type == CPT_LIGHT &&
- !ndef->get(n).sunlight_propagates){
+ !ndef->get(n).sunlight_propagates) {
allow_non_sunlight_propagates = true;
}
- if(ndef->get(n).param_type != CPT_LIGHT ||
+
+ if (ndef->get(n).param_type != CPT_LIGHT ||
(!ndef->get(n).sunlight_propagates &&
!allow_non_sunlight_propagates)){
nonlight_seen = true;
break;
continue;
}
- if(distance >= sunlight_min_d && *sunlight_seen == false
- && nonlight_seen == false)
- if(n.getLight(LIGHTBANK_DAY, ndef) == LIGHT_SUN)
+
+ if (distance >= sunlight_min_d && !*sunlight_seen && !nonlight_seen)
+ if (n.getLight(LIGHTBANK_DAY, ndef) == LIGHT_SUN)
*sunlight_seen = true;
noncount = 0;
brightness_sum += decode_light(n.getLightBlend(daylight_factor, ndef));
int ClientMap::getBackgroundBrightness(float max_d, u32 daylight_factor,
int oldvalue, bool *sunlight_seen_result)
{
- const bool debugprint = false;
static v3f z_directions[50] = {
v3f(-100, 0, 0)
};
static f32 z_offsets[sizeof(z_directions)/sizeof(*z_directions)] = {
-1000,
};
+
if(z_directions[0].X < -99){
for(u32 i=0; i<sizeof(z_directions)/sizeof(*z_directions); i++){
// Assumes FOV of 72 and 16/9 aspect ratio
z_offsets[i] = 0.01 * myrand_range(0,100);
}
}
- if(debugprint)
- std::cerr<<"In goes "<<PP(m_camera_direction)<<", out comes ";
+
int sunlight_seen_count = 0;
float sunlight_min_d = max_d*0.8;
if(sunlight_min_d > 35*BS)
else if(num_values_to_use >= 7)
num_values_to_use -= num_values_to_use/3;
u32 first_value_i = (values.size() - num_values_to_use) / 2;
- if(debugprint){
- for(u32 i=0; i < first_value_i; i++)
- std::cerr<<values[i]<<" ";
- std::cerr<<"[";
- }
- for(u32 i=first_value_i; i < first_value_i+num_values_to_use; i++){
- if(debugprint)
- std::cerr<<values[i]<<" ";
+
+ for (u32 i=first_value_i; i < first_value_i + num_values_to_use; i++) {
brightness_sum += values[i];
brightness_count++;
}
- if(debugprint){
- std::cerr<<"]";
- for(u32 i=first_value_i+num_values_to_use; i < values.size(); i++)
- std::cerr<<values[i]<<" ";
- }
+
int ret = 0;
if(brightness_count == 0){
MapNode n = getNodeNoEx(floatToInt(m_camera_position, BS));
ret = oldvalue;
}
} else {
- /*float pre = (float)brightness_sum / (float)brightness_count;
- float tmp = pre;
- const float d = 0.2;
- pre *= 1.0 + d*2;
- pre -= tmp * d;
- int preint = pre;
- ret = MYMAX(0, MYMIN(255, preint));*/
ret = brightness_sum / brightness_count;
}
- if(debugprint)
- std::cerr<<"Result: "<<ret<<" sunlight_seen_count="
- <<sunlight_seen_count<<std::endl;
+
*sunlight_seen_result = (sunlight_seen_count > 0);
return ret;
}
u32 wanted_max_blocks = 0;
// show a wire frame for debugging
bool show_wireframe = false;
- // Number of blocks rendered is written here by the renderer
- u32 blocks_drawn = 0;
- // Number of blocks that would have been drawn in wanted_range
- u32 blocks_would_have_drawn = 0;
- // Distance to the farthest block drawn
- float farthest_drawn = 0;
};
class Client;
s32 id
);
- ~ClientMap();
+ virtual ~ClientMap() = default;
s32 mapType() const
{
ISceneNode::drop();
}
- void updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset)
+ void updateCamera(const v3f &pos, const v3f &dir, f32 fov, const v3s16 &offset)
{
m_camera_position = pos;
m_camera_direction = dir;
void getBlocksInViewRange(v3s16 cam_pos_nodes,
v3s16 *p_blocks_min, v3s16 *p_blocks_max);
- void updateDrawList(video::IVideoDriver* driver);
+ void updateDrawList();
void renderMap(video::IVideoDriver* driver, s32 pass);
int getBackgroundBrightness(float max_d, u32 daylight_factor,
MapDrawControl &m_control;
- v3f m_camera_position;
+ v3f m_camera_position = v3f(0,0,0);
v3f m_camera_direction = v3f(0,0,1);
f32 m_camera_fov = M_PI;
v3s16 m_camera_offset;
#include "client.h"
#include "filecache.h"
#include "filesys.h"
-#include "debug.h"
#include "log.h"
#include "porting.h"
#include "settings.h"
-#include "network/networkprotocol.h"
#include "util/hex.h"
#include "util/serialize.h"
#include "util/sha1.h"
if (m_httpfetch_caller != HTTPFETCH_DISCARD)
httpfetch_caller_free(m_httpfetch_caller);
- for (std::map<std::string, FileStatus*>::iterator it = m_files.begin();
- it != m_files.end(); ++it)
- delete it->second;
+ for (auto &file_it : m_files)
+ delete file_it.second;
- for (u32 i = 0; i < m_remotes.size(); ++i)
- delete m_remotes[i];
+ for (auto &remote : m_remotes)
+ delete remote;
}
void ClientMediaDownloader::addFile(const std::string &name, const std::string &sha1)
return;
}
- FileStatus *filestatus = new FileStatus;
+ FileStatus *filestatus = new FileStatus();
filestatus->received = false;
filestatus->sha1 = sha1;
filestatus->current_remote = -1;
infostream << "Client: Adding remote server \""
<< baseurl << "\" for media download" << std::endl;
- RemoteServerStatus *remote = new RemoteServerStatus;
+ RemoteServerStatus *remote = new RemoteServerStatus();
remote->baseurl = baseurl;
remote->active_count = 0;
remote->request_by_filename = false;
{
// Check media cache
m_uncached_count = m_files.size();
- for (std::map<std::string, FileStatus*>::iterator
- it = m_files.begin();
- it != m_files.end(); ++it) {
- std::string name = it->first;
- FileStatus *filestatus = it->second;
+ for (auto &file_it : m_files) {
+ std::string name = file_it.first;
+ FileStatus *filestatus = file_it.second;
const std::string &sha1 = filestatus->sha1;
std::ostringstream tmp_os(std::ios_base::binary);
fetch_request.timeout = m_httpfetch_timeout;
fetch_request.connect_timeout = m_httpfetch_timeout;
fetch_request.post_data = required_hash_set;
- fetch_request.extra_headers.push_back(
+ fetch_request.extra_headers.emplace_back(
"Content-Type: application/octet-stream");
httpfetch_async(fetch_request);
if (filestatus->available_remotes.empty())
return -1;
- else {
- // Of all servers that claim to provide the file (and haven't
- // been unsuccessfully tried before), find the one with the
- // smallest number of currently active transfers
-
- s32 best = 0;
- s32 best_remote_id = filestatus->available_remotes[best];
- s32 best_active_count = m_remotes[best_remote_id]->active_count;
-
- for (u32 i = 1; i < filestatus->available_remotes.size(); ++i) {
- s32 remote_id = filestatus->available_remotes[i];
- s32 active_count = m_remotes[remote_id]->active_count;
- if (active_count < best_active_count) {
- best = i;
- best_remote_id = remote_id;
- best_active_count = active_count;
- }
+
+ // Of all servers that claim to provide the file (and haven't
+ // been unsuccessfully tried before), find the one with the
+ // smallest number of currently active transfers
+
+ s32 best = 0;
+ s32 best_remote_id = filestatus->available_remotes[best];
+ s32 best_active_count = m_remotes[best_remote_id]->active_count;
+
+ for (u32 i = 1; i < filestatus->available_remotes.size(); ++i) {
+ s32 remote_id = filestatus->available_remotes[i];
+ s32 active_count = m_remotes[remote_id]->active_count;
+ if (active_count < best_active_count) {
+ best = i;
+ best_remote_id = remote_id;
+ best_active_count = active_count;
}
+ }
- filestatus->available_remotes.erase(
- filestatus->available_remotes.begin() + best);
+ filestatus->available_remotes.erase(
+ filestatus->available_remotes.begin() + best);
+
+ return best_remote_id;
- return best_remote_id;
- }
}
void ClientMediaDownloader::startRemoteMediaTransfers()
// Some media files have not been received yet, use the
// conventional slow method (minetest protocol) to get them
std::vector<std::string> file_requests;
- for (std::map<std::string, FileStatus*>::iterator
- it = m_files.begin();
- it != m_files.end(); ++it) {
- if (!it->second->received)
- file_requests.push_back(it->first);
+ for (auto &file : m_files) {
+ if (!file.second->received)
+ file_requests.push_back(file.first);
}
assert((s32) file_requests.size() ==
m_uncached_count - m_uncached_received_count);