Files
FC1/CrySystem/ScriptBinding.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

134 lines
3.6 KiB
C++

#include "stdafx.h"
#include "System.h"
#include "ScriptObjectSystem.h"
#include "ScriptObjectParticle.h"
#include "ScriptObjectAnimation.h"
#include "ScriptObjectSound.h"
#include "ScriptObjectMovie.h"
#include "ScriptObjectScript.h"
#include "ScriptObjectEntity.h"
#include "HTTPDownloader.h"
#include <IEntitySystem.h>
struct CScriptBindings
{
CScriptBindings();
~CScriptBindings(){}
bool Init(CSystem *pSystem);
bool ShutDown();
private:
CScriptObjectSystem *m_pScriptObjectSystem;
CScriptObjectParticle *m_pScriptObjectParticle;
CScriptObjectAnimation *m_pScriptObjectAnimation;
CScriptObjectSound *m_pScriptObjectSound;
CScriptObjectMovie *m_pScriptObjectMovie;
CScriptObjectScript *m_pScriptObjectScript;
};
CScriptBindings::CScriptBindings()
{
m_pScriptObjectSystem=NULL;
m_pScriptObjectParticle=NULL;
m_pScriptObjectAnimation=NULL;
m_pScriptObjectSound=NULL;
m_pScriptObjectMovie=NULL;
m_pScriptObjectScript=NULL;
}
bool CScriptBindings::Init(CSystem *pSystem)
{
IScriptSystem *pSS=pSystem->GetIScriptSystem();
//SYSTEM
CScriptObjectSystem::InitializeTemplate(pSS);
m_pScriptObjectSystem=new CScriptObjectSystem;
m_pScriptObjectSystem->Init(pSS,pSystem);
//PARTICLE
CScriptObjectParticle::InitializeTemplate(pSS);
m_pScriptObjectParticle=new CScriptObjectParticle;
m_pScriptObjectParticle->Init(pSS,pSystem);
//ANIMATION
CScriptObjectAnimation::InitializeTemplate(pSS);
m_pScriptObjectAnimation=new CScriptObjectAnimation;
m_pScriptObjectAnimation->Init(pSS,pSystem);
//SOUND
CScriptObjectSound::InitializeTemplate(pSS);
m_pScriptObjectSound=new CScriptObjectSound;
m_pScriptObjectSound->Init(pSS,pSystem);
//MOVIE
CScriptObjectMovie::InitializeTemplate(pSS);
m_pScriptObjectMovie=new CScriptObjectMovie;
m_pScriptObjectMovie->Init(pSS,pSystem);
//SCRIPT
CScriptObjectScript::InitializeTemplate(pSS);
m_pScriptObjectScript=new CScriptObjectScript;
m_pScriptObjectScript->Init(pSS);
//ENTITY
CScriptObjectEntity::InitializeTemplate(pSS);
//DOWNLOAD
#if !defined(LINUX)
CHTTPDownloader::InitializeTemplate(pSS);
#endif
return true;
}
bool CScriptBindings::ShutDown()
{
CScriptObjectSystem::ReleaseTemplate();
SAFE_DELETE(m_pScriptObjectSystem);
CScriptObjectParticle::ReleaseTemplate();
SAFE_DELETE(m_pScriptObjectParticle);
CScriptObjectAnimation::ReleaseTemplate();
SAFE_DELETE(m_pScriptObjectAnimation);
CScriptObjectSound::ReleaseTemplate();
SAFE_DELETE(m_pScriptObjectSound);
CScriptObjectMovie::ReleaseTemplate();
SAFE_DELETE(m_pScriptObjectMovie);
CScriptObjectScript::ReleaseTemplate();
SAFE_DELETE(m_pScriptObjectScript);
CScriptObjectEntity::ReleaseTemplate();
#if !defined(LINUX)
CHTTPDownloader::ReleaseTemplate();
#endif
return true;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
bool CSystem::InitScriptBindings()
{
m_pScriptBindings=new CScriptBindings;
return m_pScriptBindings->Init(this);
}
bool CSystem::ShutDownScriptBindings()
{
if(m_pScriptBindings)
{
bool bres=m_pScriptBindings->ShutDown();
delete m_pScriptBindings;
return bres;
}
return false;
}
void CSystem::CreateEntityScriptBinding(IEntity *ent)
{
CScriptObjectEntity *pSEntity = new CScriptObjectEntity();
pSEntity->Create(m_pScriptSystem, this);
assert(pSEntity->GetScriptObject());
if (ent->GetContainer()){
IScriptObject *pObj=ent->GetContainer()->GetScriptObject();
if(pObj)
pSEntity->SetContainer(pObj);
}
assert(pSEntity->GetScriptObject());
pSEntity->SetEntity(ent);
assert(pSEntity->GetScriptObject());
ent->SetScriptObject(pSEntity->GetScriptObject());
assert(pSEntity->GetScriptObject());
assert(ent->GetScriptObject());
}