Very similar thing with DrawFront flag

colobot2
immibis 2023-11-18 14:53:58 +01:00
parent 74ab7afb23
commit 4251873f49
9 changed files with 13 additions and 39 deletions

View File

@ -826,7 +826,6 @@ void CEngine::DebugObject(int objRank)
l->Debug(" baseObjRank = %d\n", m_objects[objRank].baseObjRank); l->Debug(" baseObjRank = %d\n", m_objects[objRank].baseObjRank);
l->Debug(" visible = %s\n", m_objects[objRank].visible ? "true" : "false"); l->Debug(" visible = %s\n", m_objects[objRank].visible ? "true" : "false");
l->Debug(" drawWorld = %s\n", m_objects[objRank].drawWorld ? "true" : "false"); l->Debug(" drawWorld = %s\n", m_objects[objRank].drawWorld ? "true" : "false");
l->Debug(" drawFront = %s\n", m_objects[objRank].drawFront ? "true" : "false");
l->Debug(" type = %d\n", m_objects[objRank].type); l->Debug(" type = %d\n", m_objects[objRank].type);
l->Debug(" distance = %f\n", m_objects[objRank].distance); l->Debug(" distance = %f\n", m_objects[objRank].distance);
l->Debug(" shadowRank = %d\n", m_objects[objRank].shadowRank); l->Debug(" shadowRank = %d\n", m_objects[objRank].shadowRank);
@ -980,13 +979,6 @@ void CEngine::SetObjectDrawWorld(int objRank, bool draw)
m_objects[objRank].drawWorld = draw; m_objects[objRank].drawWorld = draw;
} }
void CEngine::SetObjectDrawFront(int objRank, bool draw)
{
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
m_objects[objRank].drawFront = draw;
}
void CEngine::GetObjectBBox(int objRank, glm::vec3& min, glm::vec3& max) void CEngine::GetObjectBBox(int objRank, glm::vec3& min, glm::vec3& max)
{ {
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() )); assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
@ -2803,6 +2795,12 @@ bool CEngine::IsGhostObject(int objRank)
return gameObject->m_bCameraGhost; return gameObject->m_bCameraGhost;
} }
bool CEngine::IsDrawFrontObject(int objRank)
{
CObject *gameObject = m_objects[objRank].gameObject;
return gameObject && gameObject->m_bDrawFront;
}
void CEngine::Draw3DScene() void CEngine::Draw3DScene()
{ {
if (!m_worldCaptured) if (!m_worldCaptured)
@ -3709,7 +3707,7 @@ void CEngine::DrawInterface()
if (m_objects[objRank].type == ENG_OBJTYPE_TERRAIN) if (m_objects[objRank].type == ENG_OBJTYPE_TERRAIN)
continue; continue;
if (! m_objects[objRank].drawFront) if (! IsDrawFrontObject(objRank))
continue; continue;
auto combinedMatrix = projectionViewMatrix * m_objects[objRank].transform; auto combinedMatrix = projectionViewMatrix * m_objects[objRank].transform;

View File

@ -127,8 +127,6 @@ struct EngineObject
bool visible = false; bool visible = false;
//! If true, object is behind the 2D interface //! If true, object is behind the 2D interface
bool drawWorld = false; bool drawWorld = false;
//! If true, the shape is before the 2D interface
bool drawFront = false;
//! Type of object //! Type of object
EngineObjectType type = ENG_OBJTYPE_NULL; EngineObjectType type = ENG_OBJTYPE_NULL;
//! Transformation matrix //! Transformation matrix
@ -593,11 +591,11 @@ public:
//! Sets drawWorld for given object //! Sets drawWorld for given object
void SetObjectDrawWorld(int objRank, bool draw); void SetObjectDrawWorld(int objRank, bool draw);
//! Sets drawFront for given object
void SetObjectDrawFront(int objRank, bool draw);
//! Check if object is transparent to prevent blocking the camera view //! Check if object is transparent to prevent blocking the camera view
bool IsGhostObject(int objRank); bool IsGhostObject(int objRank);
//! Check if object draws in front of the user interface
bool IsDrawFrontObject(int objRank);
//! Returns the bounding box for an object //! Returns the bounding box for an object
void GetObjectBBox(int objRank, glm::vec3& min, glm::vec3& max); void GetObjectBBox(int objRank, glm::vec3& min, glm::vec3& max);

View File

@ -2728,7 +2728,7 @@ void CRobotMain::ScenePerso()
CObject* obj = SearchHuman(); CObject* obj = SearchHuman();
if (obj != nullptr) if (obj != nullptr)
{ {
obj->SetDrawFront(true); // draws the interface obj->m_bDrawFront = true; // draws the interface
assert(obj->Implements(ObjectInterfaceType::Movable)); assert(obj->Implements(ObjectInterfaceType::Movable));
CMotionHuman* mh = static_cast<CMotionHuman*>(dynamic_cast<CMovableObject&>(*obj).GetMotion()); CMotionHuman* mh = static_cast<CMotionHuman*>(dynamic_cast<CMovableObject&>(*obj).GetMotion());

View File

@ -164,6 +164,8 @@ public:
//! Is the object translucent to prevent blocking the camera view? //! Is the object translucent to prevent blocking the camera view?
bool m_bCameraGhost = false; bool m_bCameraGhost = false;
//! Does the object draw in front of the user interface?
bool m_bDrawFront = false;
//! Sets flag controlling animation effect on level reset //! Sets flag controlling animation effect on level reset
void SetAnimateOnReset(bool animateOnReset); void SetAnimateOnReset(bool animateOnReset);

View File

@ -1855,21 +1855,6 @@ glm::mat4 COldObject::GetWorldMatrix(int part)
} }
// Indicates whether the object should be drawn over the interface.
void COldObject::SetDrawFront(bool bDraw)
{
int i;
for ( i=0 ; i<OBJECTMAXPART ; i++ )
{
if ( m_objectPart[i].bUsed )
{
m_engine->SetObjectDrawFront(m_objectPart[i].object, bDraw);
}
}
}
// Creates shade under a vehicle as a negative light. // Creates shade under a vehicle as a negative light.
bool COldObject::CreateShadowLight(float height, Gfx::Color color) bool COldObject::CreateShadowLight(float height, Gfx::Color color)

View File

@ -130,8 +130,6 @@ public:
void Write(CLevelParserLine* line) override; void Write(CLevelParserLine* line) override;
void Read(CLevelParserLine* line) override; void Read(CLevelParserLine* line) override;
void SetDrawFront(bool bDraw) override;
int GetShadowLight(); int GetShadowLight();
void SetFloorHeight(float height); void SetFloorHeight(float height);

View File

@ -46,11 +46,6 @@ int COldObjectInterface::GetOption()
throw std::logic_error("GetOption: not implemented!"); throw std::logic_error("GetOption: not implemented!");
} }
void COldObjectInterface::SetDrawFront(bool bDraw)
{
throw std::logic_error("SetDrawFront: not implemented!");
}
void COldObjectInterface::FloorAdjust() void COldObjectInterface::FloorAdjust()
{ {

View File

@ -53,8 +53,6 @@ public:
virtual int GetOption(); virtual int GetOption();
virtual void SetDrawFront(bool bDraw);
virtual void FloorAdjust(); virtual void FloorAdjust();

View File

@ -446,7 +446,7 @@ void CDisplayInfo::StartDisplayInfo(std::string filename, int index, bool bSoluc
m_toto = SearchToto(); m_toto = SearchToto();
if ( m_toto != nullptr ) if ( m_toto != nullptr )
{ {
m_toto->SetDrawFront(true); m_toto->m_bDrawFront = true;
assert(m_toto->Implements(ObjectInterfaceType::Movable)); assert(m_toto->Implements(ObjectInterfaceType::Movable));
CMotionToto* toto = static_cast<CMotionToto*>(dynamic_cast<CMovableObject&>(*m_toto).GetMotion()); CMotionToto* toto = static_cast<CMotionToto*>(dynamic_cast<CMovableObject&>(*m_toto).GetMotion());