#include "ortoolscene_tool.h"
#define ORTOOLSCENE__CLASS ORTOOLSCENE__CLASSNAME
#define ORTOOLSCENE__LABEL "Scene Viewer"
#define ORTOOLSCENE__DESC "OR - Scene Viewer Description"
ORTOOLSCENE__LABEL,
ORTOOLSCENE__DESC,
bool ORToolScene::FBCreate()
{
StartSize[0] = 600;
StartSize[1] = 300;
UICreate ();
UIConfigure ();
UIReset ();
OnShow.Add (
this, (
FBCallback) &ORToolScene::EventToolShow );
OnIdle.Add (
this, (
FBCallback) &ORToolScene::EventToolIdle );
((FBScene*)mSystem.Scene)->OnChange.Add (
this, (
FBCallback) &ORToolScene::EventSceneChange );
return true;
}
void ORToolScene::FBDestroy()
{
OnShow.Remove (
this, (
FBCallback) &ORToolScene::EventToolShow );
OnIdle.Remove (
this, (
FBCallback) &ORToolScene::EventToolIdle );
((FBScene*)mSystem.Scene)->OnChange.Remove (
this, (
FBCallback) &ORToolScene::EventSceneChange );
}
void ORToolScene::UICreate()
{
int lS = 4;
int lW = 200;
AddRegion( "LabelDirections","LabelDirections",
AddRegion( "TreeScene", "TreeScene",
AddRegion( "PropertyInspector","PropertyInspector",
SetControl( "LabelDirections", mLabelDirections );
SetControl( "TreeScene", mTreeScene );
SetControl( "PropertyInspector", mPI );
}
void ORToolScene::UIConfigure()
{
mLabelDirections.Caption = "This is a tree to browse the different elements in both the scene and the SDK.\n"
"Elements, when selected are viewed in the property inspector on the right.";
mTreeScene.OnSelect.Add(
this, (
FBCallback) &ORToolScene::EventTreeSelect );
}
void ORToolScene::UIReset()
{
UIResetTree();
}
void ORToolScene::UIRefresh()
{
}
FBArrayTemplate<FBComponent*> ComponentStack;
void ORToolScene::UIResetTree()
{
int lCnt;
FBTreeNode* lRoot = mTreeScene.GetRoot();
mTreeScene.Clear();
FBTreeNode* lSceneNode = mTreeScene.InsertLast( lRoot, "Scene" );
FBTreeNode* lAudioSubNode = mTreeScene.InsertLast( lRoot, "Audio" );
FBTreeNode* lCameraSubNode = mTreeScene.InsertLast( lRoot, "Cameras" );
FBTreeNode* lConstraintNode = mTreeScene.InsertLast( lRoot, "Constraints" );
FBTreeNode* lDevNode = mTreeScene.InsertLast( lRoot, "Devices" );
FBTreeNode* lGroupSubNode = mTreeScene.InsertLast( lRoot, "Groups" );
FBTreeNode* lSetSubNode = mTreeScene.InsertLast( lRoot, "Sets" );
FBTreeNode* lLightSubNode = mTreeScene.InsertLast( lRoot, "Lights" );
FBTreeNode* lMaterialSubNode= mTreeScene.InsertLast( lRoot, "Material" );
FBTreeNode* lPoseSubNode = mTreeScene.InsertLast( lRoot, "Poses" );
FBTreeNode* lShaderSubNode = mTreeScene.InsertLast( lRoot, "Shaders" );
FBTreeNode* lTakeSubNode = mTreeScene.InsertLast( lRoot, "Takes" );
FBTreeNode* lTextureSubNode = mTreeScene.InsertLast( lRoot, "Textures" );
FBTreeNode* lVideoSubNode = mTreeScene.InsertLast( lRoot, "Video" );
FBTreeNode* lFBSDK = mTreeScene.InsertLast( lRoot, "FBSDK" );
FBTreeNode* lSceneSubNode = mTreeScene.InsertLast( lFBSDK, "Scene" );
FBTreeNode* lManipSubNode = mTreeScene.InsertLast( lFBSDK, "Manipulators" );
FBTreeNode* lSystemNode = mTreeScene.InsertLast( lFBSDK, "System" );
FBTreeNode* lRenderSubNode = mTreeScene.InsertLast( lFBSDK, "Render" );
FBTreeNode* lAnimSubNode = mTreeScene.InsertLast( lFBSDK, "Animation" );
FBTreeNode* lStorySubNode = mTreeScene.InsertLast( lFBSDK, "Story" );
FBTreeNode* lFolderSubNode = mTreeScene.InsertLast( lFBSDK, "Folders" );
FBTreeNode* lUnsortedNode = mTreeScene.InsertLast( lFBSDK, "UNSORTED" );
FBTreeNode* lUINode = mTreeScene.InsertLast( lFBSDK, "UI" );
for( i=0; i<lCnt; i++ )
{
ComponentStack.Clear();
if( lComp->Is( FBDevice::TypeInfo ) )
{
AddToTree( lDevNode, lComp );
}
else if( lComp->Is( FBCamera::TypeInfo ) )
{
AddToTree( lCameraSubNode, lComp );
}
else if( lComp->Is( FBLight::TypeInfo )
|| lComp->Is( FBGlobalLight::TypeInfo ) )
{
AddToTree( lLightSubNode, lComp );
}
else if( lComp->Is( FBConstraint::TypeInfo ))
{
AddToTree( lConstraintNode, lComp );
}
else if( lComp->Is( FBPose::TypeInfo ) )
{
AddToTree( lPoseSubNode, lComp );
}
else if( lComp->Is( FBModel::TypeInfo ) )
{
if (FBString(lComp->Name)==FBString("Scene"))
{
AddToTree( lSceneNode, lComp, false );
}
}
else if( lComp->Is( FBShader::TypeInfo ) )
{
AddToTree( lShaderSubNode, lComp );
}
else if(lComp->Is( FBSystem::TypeInfo )
|| lComp->Is( FBApplication::TypeInfo )
|| lComp->Is( FBPlayerControl::TypeInfo )
|| lComp->Is( FBConstraintManager::TypeInfo )
#ifndef K_NO_TRIGGER
|| lComp->Is( FBTriggerManager::TypeInfo )
#endif
)
{
AddToTree( lSystemNode, lComp );
}
else if( lComp->Is( FBScene::TypeInfo ) )
{
AddToTree( lSceneSubNode, lComp, false );
}
else if(lComp->Is( FBRenderer::TypeInfo ))
{
AddToTree( lRenderSubNode, lComp );
}
else if(lComp->Is( FBMaterial::TypeInfo ))
{
AddToTree( lMaterialSubNode, lComp );
}
else if(lComp->Is( FBTexture::TypeInfo ))
{
AddToTree( lTextureSubNode, lComp );
}
else if(lComp->Is( FBVideo::TypeInfo ))
{
AddToTree( lVideoSubNode, lComp );
}
else if(lComp->Is( FBAudioIn::TypeInfo )
|| lComp->Is( FBAudioOut::TypeInfo )
)
{
AddToTree( lAudioSubNode, lComp );
}
else if(lComp->Is( FBStory::TypeInfo ))
{
AddToTree( lStorySubNode, lComp );
}
else if(lComp->Is( FBGroup::TypeInfo ))
{
AddToTree( lGroupSubNode, lComp );
}
else if(lComp->Is( FBSet::TypeInfo ))
{
AddToTree( lSetSubNode, lComp );
}
else if(lComp->Is( FBTake::TypeInfo ))
{
AddToTree( lTakeSubNode, lComp );
}
else if( lComp->Is( FBManipulator::TypeInfo ) )
{
AddToTree( lManipSubNode, lComp );
}
else if( lComp->Is( FBFolder::TypeInfo ) )
{
AddToTree( lFolderSubNode, lComp );
}
else if( lComp->Is( FBVisualComponent::TypeInfo ) )
{
AddToTree( lUINode, lComp );
}
else if(lComp->Is( FBAnimationNode::TypeInfo )
|| lComp->Is( FBFCurve::TypeInfo )
)
{
AddToTree( lAnimSubNode, lComp );
}
else if( !lComp->Is(FBBox::TypeInfo)
&& !lComp->Is(FBTreeNode::TypeInfo )
)
{
AddToTree( lUnsortedNode, lComp );
}
}
}
void ORToolScene::AddToTree( FBTreeNode* pNode, FBComponent* pComp, bool pAddRoot )
{
if( !pComp )
return;
if (ComponentStack.Find( pComp )==-1)
{
ComponentStack.Add( pComp );
FBTreeNode* lNode;
if (pAddRoot)
{
lNode = mTreeScene.InsertLast( pNode, pComp->Name );
lNode->Reference = (kReference)pComp;
} else
{
lNode = pNode;
}
int lCnt = pComp->Components.GetCount();
for( i=0; i<lCnt; i++ )
{
FBComponent* lComp = pComp->Components[
i];
AddToTree( lNode, lComp );
}
}
}
{
static bool TransactionStarted = false;
FBEventSceneChange lEvent( pEvent );
switch( lEvent.Type )
{
{
TransactionStarted = true;
}
break;
{
UIResetTree();
TransactionStarted = false;
}
break;
{
if (!TransactionStarted) UIResetTree();
}
break;
{
if (mPI.Component == lEvent.ChildComponent)
{
}
if (!TransactionStarted) UIResetTree();
}
break;
}
}
{
FBEventTreeSelect lEvent( pEvent );
FBTreeNode* lNode = lEvent.TreeNode;
FBComponent* lComp = (FBComponent*)(kReference)lNode->Reference;
mPI.Component = lComp;
}
{
UIRefresh();
}
{
FBEventShow lEvent( pEvent );
if( lEvent.Shown )
{
UIReset();
}
else
{
}
}
bool ORToolScene::FbxStore ( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
{
pFbxObject->FieldWriteBegin( "ORToolSceneSection" );
{
}
pFbxObject->FieldWriteEnd();
return true;
}
bool ORToolScene::FbxRetrieve( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
{
pFbxObject->FieldReadBegin( "ORToolSceneSection" );
{
}
pFbxObject->FieldReadEnd();
return true;
}