#include "ortoolmaterial_tool.h"
#define ORTOOLMATERIAL__CLASS ORTOOLMATERIAL__CLASSNAME
#define ORTOOLMATERIAL__LABEL "Material"
#define ORTOOLMATERIAL__DESC "FBSDK - Material Tool Description"
ORTOOLMATERIAL__LABEL,
ORTOOLMATERIAL__DESC,
bool ORToolMaterial::FBCreate()
{
StartSize[0] = 215;
StartSize[1] = 150;
UICreate ();
UIConfigure ();
UIReset ();
OnShow.Add (
this, (
FBCallback)&ORToolMaterial::EventToolShow );
OnIdle.Add (
this, (
FBCallback)&ORToolMaterial::EventToolIdle );
OnResize.Add(
this, (
FBCallback)&ORToolMaterial::EventToolResize );
OnPaint.Add (
this, (
FBCallback)&ORToolMaterial::EventToolPaint );
OnInput.Add (
this, (
FBCallback)&ORToolMaterial::EventToolInput );
return true;
}
void ORToolMaterial::UICreate()
{
int lS = 4;
int lW = 75;
int lH = 18;
AddRegion( "LabelDirections", "LabelDirections",
AddRegion( "ButtonTest", "ButtonTest",
AddRegion( "LabelMaterial", "LabelMaterial",
AddRegion( "ListMaterials", "ListMaterials",
AddRegion( "LabelTransparency", "LabelTransparency",
AddRegion( "SliderMaterial", "SliderMaterial",
SetControl( "LabelDirections", mLabelDirections );
SetControl( "ButtonTest", mButtonTest );
SetControl( "LabelMaterial", mLabelMaterial );
SetControl( "ListMaterials", mListMaterials );
SetControl( "LabelTransparency", mLabelTransparency );
SetControl( "SliderMaterial", mSliderMaterial );
}
void ORToolMaterial::UIConfigure()
{
mLabelDirections.Caption = "Demonstrates use of FBMaterial class.\n"
"Click the button to set-up a test case.";
mButtonTest.Caption = "Setup Model w/ Material";
mLabelMaterial.Caption = "Material";
mLabelTransparency.Caption = "Transparency";
mSliderMaterial.Max = 1;
mSliderMaterial.Min = 0;
mSliderMaterial.Value = 0;
mButtonTest.OnClick.Add (
this, (
FBCallback)&ORToolMaterial::EventButtonTestClick );
mListMaterials.OnChange.Add (
this, (
FBCallback)&ORToolMaterial::EventListMaterialsChange );
mSliderMaterial.OnChange.Add(
this, (
FBCallback)&ORToolMaterial::EventSliderMaterialChange );
}
void ORToolMaterial::UIReset()
{
FBMaterial* lMaterial =
NULL;
mListMaterials.Items.Clear();
for(
int i=0;
i<mSystem.Scene->Materials.GetCount();
i++ )
{
lMaterial = mSystem.Scene->Materials[
i];
mListMaterials.Items.Add( lMaterial->Name, (kReference) lMaterial );
}
lMaterial = (FBMaterial*) mListMaterials.Items.GetReferenceAt( mListMaterials.ItemIndex );
mSliderMaterial.Value = lMaterial->TransparencyFactor;
}
void ORToolMaterial::UIRefresh()
{
}
void ORToolMaterial::FBDestroy()
{
OnShow.Remove (
this, (
FBCallback)&ORToolMaterial::EventToolShow );
OnIdle.Remove (
this, (
FBCallback)&ORToolMaterial::EventToolIdle );
OnPaint.Remove (
this, (
FBCallback)&ORToolMaterial::EventToolPaint );
OnInput.Remove (
this, (
FBCallback)&ORToolMaterial::EventToolInput );
OnResize.Remove (
this, (
FBCallback)&ORToolMaterial::EventToolResize);
}
void ORToolMaterial::EventButtonTestClick(
HISender pSender,
HKEvent pEvent )
{
static bool lOnce = false;
if( !lOnce )
{
lOnce = true;
FBModel* lModel = new FBModelCube("Cube");
lModel->Show = true;
FBMaterial* lMaterial = new FBMaterial("CubeMaterial");
FBShaderLighted* lDefault = new FBShaderLighted("CubeShader");
lModel->Materials.Add( lMaterial );
lDefault->ReplaceAll( lModel );
UIReset();
}
}
{
UIRefresh();
}
{
FBEventShow lEvent( pEvent );
if( lEvent.Shown )
{
UIReset();
}
else
{
}
}
{
}
{
}
{
}
void ORToolMaterial::EventSliderMaterialChange(
HISender pSender,
HKEvent pEvent )
{
FBMaterial* lMaterial = (FBMaterial*) mListMaterials.Items.GetReferenceAt( mListMaterials.ItemIndex );
if( lMaterial->Is(FBMaterial::TypeInfo) )
{
lMaterial->TransparencyFactor = mSliderMaterial.Value;
mSliderMaterial.Value = lMaterial->TransparencyFactor;
}
}
void ORToolMaterial::EventListMaterialsChange(
HISender pSender,
HKEvent pEvent )
{
FBMaterial* lMaterial = (FBMaterial*) mListMaterials.Items.GetReferenceAt( mListMaterials.ItemIndex );
mSliderMaterial.Value = lMaterial->TransparencyFactor;
}
bool ORToolMaterial::FbxStore ( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
{
pFbxObject->FieldWriteBegin( "ORToolMaterialSection" );
{
pFbxObject->FieldWriteC( mButtonTest.Caption );
}
pFbxObject->FieldWriteEnd();
return true;
}
bool ORToolMaterial::FbxRetrieve( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
{
pFbxObject->FieldReadBegin( "ORToolMaterialSection" );
{
mButtonTest.Caption = pFbxObject->FieldReadC();
}
pFbxObject->FieldReadEnd();
return true;
}