Files
Leviathan/Client/Game/game/Main/Scene/SGameScene.cpp
T
2026-06-01 12:46:52 +02:00

59 lines
1.3 KiB
C++

#include "stdafx.h"
#include "SGameScene.h"
#include "SGameSceneActor.h"
#include "SGameSceneManager.h"
using namespace rp;
SGameScene::SGameScene( SGameSceneManager& sceneMgr, SGameScene* parent, const char* sceneName )
: mSceneMgr ( sceneMgr )
, mParent ( parent )
, mSceneName ( sceneName )
, mIsActivated ( false )
, mLocalVisibility ( 1.f )
, mWorldVisibility ( 1.f )
{
}
SGameScene::~SGameScene()
{
}
void SGameScene::onTick()
{
if( !mActors.empty() )
std::for_each( mActors.begin(), mActors.end(), std::bind2nd( std::mem_fun( &SGameSceneActor::update ), this ) );
}
void SGameScene::activate( bool activity )
{
if( mIsActivated != activity )
{
mIsActivated = activity;
if( mIsActivated )
{
if( !mActors.empty() )
std::for_each( mActors.begin(), mActors.end(), std::mem_fun( &SGameSceneActor::onActivate ) );
onActivate();
}
else
{
if( !mActors.empty() )
std::for_each( mActors.begin(), mActors.end(), std::mem_fun( &SGameSceneActor::onDeactivate ) );
onDeactivate();
}
}
}
void SGameScene::updateVisibility()
{
if( mParent )
mWorldVisibility = mLocalVisibility * mParent->getWorldVisibility();
else
mWorldVisibility = mLocalVisibility;
}
void SGameScene::registerActor( SGameSceneActor& actor )
{
mActors.push_back( &actor );
}