aboutsummaryrefslogtreecommitdiff
path: root/src/client/game.cpp
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2021-04-29 08:51:17 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2021-05-03 19:49:19 +0200
commit1bc855646e2c920c1df55bb73416f72295c020f4 (patch)
treedb872efec84c5daa6d37b6e2d1c71e4450255c3b /src/client/game.cpp
parent258101a91031f3ff9ee01a974030b02529ffdac0 (diff)
downloadhax-minetest-server-1bc855646e2c920c1df55bb73416f72295c020f4.tar.gz
hax-minetest-server-1bc855646e2c920c1df55bb73416f72295c020f4.zip
refacto: protect some RenderingEngine::get_scene_manager
* protect it from Camera, Sky, ClientMap object calls * rename Game::sky to Game::m_sky
Diffstat (limited to 'src/client/game.cpp')
-rw-r--r--src/client/game.cpp83
1 files changed, 42 insertions, 41 deletions
diff --git a/src/client/game.cpp b/src/client/game.cpp
index 33707df4a..aa794a755 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -839,7 +839,7 @@ private:
MapDrawControl *draw_control = nullptr;
Camera *camera = nullptr;
Clouds *clouds = nullptr; // Free using ->Drop()
- Sky *sky = nullptr; // Free using ->Drop()
+ Sky *m_sky = nullptr; // Free using ->Drop()
Hud *hud = nullptr;
Minimap *mapper = nullptr;
@@ -1159,8 +1159,8 @@ void Game::shutdown()
if (gui_chat_console)
gui_chat_console->drop();
- if (sky)
- sky->drop();
+ if (m_sky)
+ m_sky->drop();
/* cleanup menus */
while (g_menumgr.menuCount() > 0) {
@@ -1293,7 +1293,7 @@ bool Game::createClient(const GameStartData &start_data)
{
showOverlayMessage(N_("Creating client..."), 0, 10);
- draw_control = new MapDrawControl;
+ draw_control = new MapDrawControl();
if (!draw_control)
return false;
@@ -1334,7 +1334,7 @@ bool Game::createClient(const GameStartData &start_data)
/* Camera
*/
- camera = new Camera(*draw_control, client);
+ camera = new Camera(*draw_control, client, m_rendering_engine);
if (!camera->successfullyCreated(*error_message))
return false;
client->setCamera(camera);
@@ -1346,8 +1346,8 @@ bool Game::createClient(const GameStartData &start_data)
/* Skybox
*/
- sky = new Sky(-1, texture_src, shader_src);
- scsf->setSky(sky);
+ m_sky = new Sky(-1, m_rendering_engine, texture_src, shader_src);
+ scsf->setSky(m_sky);
skybox = NULL; // This is used/set later on in the main run loop
/* Pre-calculated values
@@ -2754,23 +2754,23 @@ void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *ca
void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
{
- sky->setVisible(false);
+ m_sky->setVisible(false);
// Whether clouds are visible in front of a custom skybox.
- sky->setCloudsEnabled(event->set_sky->clouds);
+ m_sky->setCloudsEnabled(event->set_sky->clouds);
if (skybox) {
skybox->remove();
skybox = NULL;
}
// Clear the old textures out in case we switch rendering type.
- sky->clearSkyboxTextures();
+ m_sky->clearSkyboxTextures();
// Handle according to type
if (event->set_sky->type == "regular") {
// Shows the mesh skybox
- sky->setVisible(true);
+ m_sky->setVisible(true);
// Update mesh based skybox colours if applicable.
- sky->setSkyColors(event->set_sky->sky_color);
- sky->setHorizonTint(
+ m_sky->setSkyColors(event->set_sky->sky_color);
+ m_sky->setHorizonTint(
event->set_sky->fog_sun_tint,
event->set_sky->fog_moon_tint,
event->set_sky->fog_tint_type
@@ -2778,61 +2778,62 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
} else if (event->set_sky->type == "skybox" &&
event->set_sky->textures.size() == 6) {
// Disable the dyanmic mesh skybox:
- sky->setVisible(false);
+ m_sky->setVisible(false);
// Set fog colors:
- sky->setFallbackBgColor(event->set_sky->bgcolor);
+ m_sky->setFallbackBgColor(event->set_sky->bgcolor);
// Set sunrise and sunset fog tinting:
- sky->setHorizonTint(
+ m_sky->setHorizonTint(
event->set_sky->fog_sun_tint,
event->set_sky->fog_moon_tint,
event->set_sky->fog_tint_type
);
// Add textures to skybox.
for (int i = 0; i < 6; i++)
- sky->addTextureToSkybox(event->set_sky->textures[i], i, texture_src);
+ m_sky->addTextureToSkybox(event->set_sky->textures[i], i, texture_src);
} else {
// Handle everything else as plain color.
if (event->set_sky->type != "plain")
infostream << "Unknown sky type: "
<< (event->set_sky->type) << std::endl;
- sky->setVisible(false);
- sky->setFallbackBgColor(event->set_sky->bgcolor);
+ m_sky->setVisible(false);
+ m_sky->setFallbackBgColor(event->set_sky->bgcolor);
// Disable directional sun/moon tinting on plain or invalid skyboxes.
- sky->setHorizonTint(
+ m_sky->setHorizonTint(
event->set_sky->bgcolor,
event->set_sky->bgcolor,
"custom"
);
}
+
delete event->set_sky;
}
void Game::handleClientEvent_SetSun(ClientEvent *event, CameraOrientation *cam)
{
- sky->setSunVisible(event->sun_params->visible);
- sky->setSunTexture(event->sun_params->texture,
+ m_sky->setSunVisible(event->sun_params->visible);
+ m_sky->setSunTexture(event->sun_params->texture,
event->sun_params->tonemap, texture_src);
- sky->setSunScale(event->sun_params->scale);
- sky->setSunriseVisible(event->sun_params->sunrise_visible);
- sky->setSunriseTexture(event->sun_params->sunrise, texture_src);
+ m_sky->setSunScale(event->sun_params->scale);
+ m_sky->setSunriseVisible(event->sun_params->sunrise_visible);
+ m_sky->setSunriseTexture(event->sun_params->sunrise, texture_src);
delete event->sun_params;
}
void Game::handleClientEvent_SetMoon(ClientEvent *event, CameraOrientation *cam)
{
- sky->setMoonVisible(event->moon_params->visible);
- sky->setMoonTexture(event->moon_params->texture,
+ m_sky->setMoonVisible(event->moon_params->visible);
+ m_sky->setMoonTexture(event->moon_params->texture,
event->moon_params->tonemap, texture_src);
- sky->setMoonScale(event->moon_params->scale);
+ m_sky->setMoonScale(event->moon_params->scale);
delete event->moon_params;
}
void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam)
{
- sky->setStarsVisible(event->star_params->visible);
- sky->setStarCount(event->star_params->count, false);
- sky->setStarColor(event->star_params->starcolor);
- sky->setStarScale(event->star_params->scale);
+ m_sky->setStarsVisible(event->star_params->visible);
+ m_sky->setStarCount(event->star_params->count, false);
+ m_sky->setStarColor(event->star_params->starcolor);
+ m_sky->setStarScale(event->star_params->scale);
delete event->star_params;
}
@@ -3709,7 +3710,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
direct_brightness = time_brightness;
sunlight_seen = true;
} else {
- float old_brightness = sky->getBrightness();
+ float old_brightness = m_sky->getBrightness();
direct_brightness = client->getEnv().getClientMap()
.getBackgroundBrightness(MYMIN(runData.fog_range * 1.2, 60 * BS),
daynight_ratio, (int)(old_brightness * 255.5), &sunlight_seen)
@@ -3736,7 +3737,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
runData.time_of_day_smooth = time_of_day_smooth;
- sky->update(time_of_day_smooth, time_brightness, direct_brightness,
+ m_sky->update(time_of_day_smooth, time_brightness, direct_brightness,
sunlight_seen, camera->getCameraMode(), player->getYaw(),
player->getPitch());
@@ -3744,7 +3745,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
Update clouds
*/
if (clouds) {
- if (sky->getCloudsVisible()) {
+ if (m_sky->getCloudsVisible()) {
clouds->setVisible(true);
clouds->step(dtime);
// camera->getPosition is not enough for 3rd person views
@@ -3754,14 +3755,14 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
camera_node_position.Y = camera_node_position.Y + camera_offset.Y * BS;
camera_node_position.Z = camera_node_position.Z + camera_offset.Z * BS;
clouds->update(camera_node_position,
- sky->getCloudColor());
+ m_sky->getCloudColor());
if (clouds->isCameraInsideCloud() && m_cache_enable_fog) {
// if inside clouds, and fog enabled, use that as sky
// color(s)
video::SColor clouds_dark = clouds->getColor()
.getInterpolated(video::SColor(255, 0, 0, 0), 0.9);
- sky->overrideColors(clouds_dark, clouds->getColor());
- sky->setInClouds(true);
+ m_sky->overrideColors(clouds_dark, clouds->getColor());
+ m_sky->setInClouds(true);
runData.fog_range = std::fmin(runData.fog_range * 0.5f, 32.0f * BS);
// do not draw clouds after all
clouds->setVisible(false);
@@ -3782,7 +3783,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
if (m_cache_enable_fog) {
driver->setFog(
- sky->getBgColor(),
+ m_sky->getBgColor(),
video::EFT_FOG_LINEAR,
runData.fog_range * m_cache_fog_start,
runData.fog_range * 1.0,
@@ -3792,7 +3793,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
);
} else {
driver->setFog(
- sky->getBgColor(),
+ m_sky->getBgColor(),
video::EFT_FOG_LINEAR,
100000 * BS,
110000 * BS,
@@ -3872,7 +3873,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
/*
Drawing begins
*/
- const video::SColor &skycolor = sky->getSkyColor();
+ const video::SColor &skycolor = m_sky->getSkyColor();
TimeTaker tt_draw("Draw scene");
driver->beginScene(true, true, skycolor);