Fix object visuals flashing brightly or disappearing when switching them at night
parent
6b20ea0752
commit
bbf3eebb1a
|
@ -575,6 +575,7 @@ private:
|
||||||
float m_reset_textures_timer;
|
float m_reset_textures_timer;
|
||||||
bool m_visuals_expired;
|
bool m_visuals_expired;
|
||||||
float m_step_distance_counter;
|
float m_step_distance_counter;
|
||||||
|
u8 m_last_light;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
|
GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
|
||||||
|
@ -604,7 +605,8 @@ public:
|
||||||
m_anim_timer(0),
|
m_anim_timer(0),
|
||||||
m_reset_textures_timer(-1),
|
m_reset_textures_timer(-1),
|
||||||
m_visuals_expired(false),
|
m_visuals_expired(false),
|
||||||
m_step_distance_counter(0)
|
m_step_distance_counter(0),
|
||||||
|
m_last_light(255)
|
||||||
{
|
{
|
||||||
if(gamedef == NULL)
|
if(gamedef == NULL)
|
||||||
ClientActiveObject::registerType(getType(), create);
|
ClientActiveObject::registerType(getType(), create);
|
||||||
|
@ -707,8 +709,8 @@ public:
|
||||||
m_spritenode->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
|
m_spritenode->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
m_spritenode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
|
m_spritenode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
|
||||||
m_spritenode->setMaterialFlag(video::EMF_FOG_ENABLE, true);
|
m_spritenode->setMaterialFlag(video::EMF_FOG_ENABLE, true);
|
||||||
m_spritenode->setColor(video::SColor(255,0,0,0));
|
u8 li = m_last_light;
|
||||||
m_spritenode->setVisible(false); /* Set visible when brightness is known */
|
m_spritenode->setColor(video::SColor(255,li,li,li));
|
||||||
m_spritenode->setSize(m_prop.visual_size*BS);
|
m_spritenode->setSize(m_prop.visual_size*BS);
|
||||||
{
|
{
|
||||||
const float txs = 1.0 / 1;
|
const float txs = 1.0 / 1;
|
||||||
|
@ -724,7 +726,8 @@ public:
|
||||||
double dy = BS*m_prop.visual_size.Y/2;
|
double dy = BS*m_prop.visual_size.Y/2;
|
||||||
{ // Front
|
{ // Front
|
||||||
scene::IMeshBuffer *buf = new scene::SMeshBuffer();
|
scene::IMeshBuffer *buf = new scene::SMeshBuffer();
|
||||||
video::SColor c(255,255,255,255);
|
u8 li = m_last_light;
|
||||||
|
video::SColor c(255,li,li,li);
|
||||||
video::S3DVertex vertices[4] =
|
video::S3DVertex vertices[4] =
|
||||||
{
|
{
|
||||||
video::S3DVertex(-dx,-dy,0, 0,0,0, c, 0,1),
|
video::S3DVertex(-dx,-dy,0, 0,0,0, c, 0,1),
|
||||||
|
@ -745,7 +748,8 @@ public:
|
||||||
}
|
}
|
||||||
{ // Back
|
{ // Back
|
||||||
scene::IMeshBuffer *buf = new scene::SMeshBuffer();
|
scene::IMeshBuffer *buf = new scene::SMeshBuffer();
|
||||||
video::SColor c(255,255,255,255);
|
u8 li = m_last_light;
|
||||||
|
video::SColor c(255,li,li,li);
|
||||||
video::S3DVertex vertices[4] =
|
video::S3DVertex vertices[4] =
|
||||||
{
|
{
|
||||||
video::S3DVertex(dx,-dy,0, 0,0,0, c, 1,1),
|
video::S3DVertex(dx,-dy,0, 0,0,0, c, 1,1),
|
||||||
|
@ -777,8 +781,8 @@ public:
|
||||||
mesh->drop();
|
mesh->drop();
|
||||||
|
|
||||||
m_meshnode->setScale(v3f(1));
|
m_meshnode->setScale(v3f(1));
|
||||||
// Will be shown when we know the brightness
|
u8 li = m_last_light;
|
||||||
m_meshnode->setVisible(false);
|
setMeshColor(m_meshnode->getMesh(), video::SColor(255,li,li,li));
|
||||||
} else {
|
} else {
|
||||||
infostream<<"GenericCAO::addToScene(): \""<<m_prop.visual
|
infostream<<"GenericCAO::addToScene(): \""<<m_prop.visual
|
||||||
<<"\" not supported"<<std::endl;
|
<<"\" not supported"<<std::endl;
|
||||||
|
@ -811,6 +815,7 @@ public:
|
||||||
{
|
{
|
||||||
bool is_visible = (m_hp != 0);
|
bool is_visible = (m_hp != 0);
|
||||||
u8 li = decode_light(light_at_pos);
|
u8 li = decode_light(light_at_pos);
|
||||||
|
m_last_light = li;
|
||||||
video::SColor color(255,li,li,li);
|
video::SColor color(255,li,li,li);
|
||||||
if(m_meshnode){
|
if(m_meshnode){
|
||||||
setMeshColor(m_meshnode->getMesh(), color);
|
setMeshColor(m_meshnode->getMesh(), color);
|
||||||
|
|
Loading…
Reference in New Issue