topical media & game development 
  
 
 
 
 
  
    
    
  
 lib-game-delta3d-sdk-examples-testActorLibrary-testpropertyproxy.cpp / cpp
  /* -*-c++-*-
  * testActorLibrary - testpropertyproxy (.h & .cpp) - Using 'The MIT License'
  * Copyright (C) 2005-2008, Alion Science and Technology Corporation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  * copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
  *
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  * 
  * This software was developed by Alion Science and Technology Corporation under
  * circumstances in which the U. S. Government may have rights in the software.
  *
  * Curtiss Murphy
  */
  include <testpropertyproxy.h>
  include <dtDAL/enginepropertytypes.h>
  include <dtDAL/namedparameter.h>
  include <dtDAL/groupactorproperty.h>
  include <dtDAL/arrayactorproperty.h>
  include <dtDAL/arrayactorpropertybase.h>
  include <dtDAL/containeractorproperty.h>
  include <dtCore/scene.h>
  include <dtCore/object.h>
  include <dtUtil/log.h>
  include <sstream>
  
  using namespace dtCore;
  using namespace dtDAL;
  using namespace dtActors;
  
  const std::string ExampleTestPropertyProxy::GROUPNAME("Example Test");
  
  IMPLEMENT_ENUM(ExampleTestPropertyProxy::TestEnum);
  ExampleTestPropertyProxy::TestEnum ExampleTestPropertyProxy::TestEnum::OPTION1("My First Option");
  ExampleTestPropertyProxy::TestEnum ExampleTestPropertyProxy::TestEnum::OPTION2("Cool Stuff");
  ExampleTestPropertyProxy::TestEnum ExampleTestPropertyProxy::TestEnum::OPTION3("123");
  ExampleTestPropertyProxy::TestEnum ExampleTestPropertyProxy::TestEnum::OPTION4("Why a spoon cousin?  Because it'll hurt more.");
  ExampleTestPropertyProxy::TestEnum ExampleTestPropertyProxy::TestEnum::OPTION5("733T H@X0R !N D37T@3D!");
  ExampleTestPropertyProxy::TestEnum ExampleTestPropertyProxy::TestEnum::OPTION6("Mind what you have learned, save you it can");
  
  /////////////////////////////////////////////////////////////////////////
  ExampleTestPropertyProxy::ExampleTestPropertyProxy()
    : mInt(0), mReadOnlyInt(5), mFloat(0.0), mDouble(0.0), mLong(0), mBool(0),
    mString(""), mEnum(&TestEnum::OPTION1), mGroupParam(new dtDAL::NamedGroupParameter("test")),
    mStringArrayIndex(0), mIntArrayIndex(0), mArrayArrayIndex(0)
  {
     SetClassName("dtCore::ExampleTestPropertyProxy");
  }
  
  void ExampleTestPropertyProxy::BuildPropertyMap() 
  {
     DeltaObjectActorProxy::BuildPropertyMap();
  
     Object *obj = dynamic_cast<Object*>(GetActor());
     if (obj == NULL)
        throw dtUtil::Exception(ExceptionEnum::InvalidActorException, "Actor should be type dtCore::Object", __FILE__, __LINE__);
  
     AddProperty(new BooleanActorProperty("Test_Boolean", "Test Boolean",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestBool),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestBool),
        "Holds a test Boolean property", GROUPNAME));
  
     AddProperty(new IntActorProperty("Test_Int", "Test Int",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestInt),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestInt),
        "Holds a test Int property", GROUPNAME));
  
     dtDAL::IntActorProperty *i = new IntActorProperty("Test_Read_Only_Int", "Test_Read_Only_Int",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetReadOnlyTestInt),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetReadOnlyTestInt),
        "Holds a test Read Only Int property", GROUPNAME);
     i->SetReadOnly(true);
  
     AddProperty(i);
  
     AddProperty(new LongActorProperty("Test_Long", "Test Long",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestLong),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestLong),
        "Holds a test Long property", GROUPNAME));
  
     AddProperty(new FloatActorProperty("Test_Float", "Test Float",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestFloat),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestFloat),
        "Holds a test Float property", GROUPNAME));
  
     AddProperty(new DoubleActorProperty("Test_Double", "Test Double",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestDouble),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestDouble),
        "Holds a test Double property", GROUPNAME));
  
     AddProperty(new Vec3ActorProperty("Test_Vec3", "Test Vector3",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec3),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec3),
        "Holds a test Vector3 Property", GROUPNAME));
  
     AddProperty(new Vec2ActorProperty("Test_Vec2", "Test Vector2",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec2),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec2),
        "Holds a test Vector2 Property", GROUPNAME));
  
     AddProperty(new Vec4ActorProperty("Test_Vec4", "Test Vector4",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec4),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec4),
        "Holds a test Vector4 Property", GROUPNAME));
  
     AddProperty(new Vec3fActorProperty("Test_Vec3f", "Test Vector3f",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec3f),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec3f),
        "Holds a test Vector3f Property", GROUPNAME));
  
     AddProperty(new Vec2fActorProperty("Test_Vec2f", "Test Vector2f",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec2f),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec2f),
        "Holds a test Vector2f Property", GROUPNAME));
  
     AddProperty(new Vec4fActorProperty("Test_Vec4f", "Test Vector4f",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec4f),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec4f),
        "Holds a test Vector4f Property", GROUPNAME));
  
     AddProperty(new Vec3dActorProperty("Test_Vec3d", "Test Vector3d",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec3d),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec3d),
        "Holds a test Vector3d Property", GROUPNAME));
  
     AddProperty(new Vec2dActorProperty("Test_Vec2d", "Test Vector2d",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec2d),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec2d),
        "Holds a test Vector2d Property", GROUPNAME));
  
     AddProperty(new Vec4dActorProperty("Test_Vec4d", "Test Vector4d",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestVec4d),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestVec4d),
        "Holds a test Vector4d Property", GROUPNAME));
  
     AddProperty(new StringActorProperty("Test_String", "Test String",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestString),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestString),
        "Holds a test String property (unlimited length)", GROUPNAME));
  
     StringActorProperty *stringProp = new StringActorProperty("Test_String2", "Test String (max 10)",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestStringWithLength),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestStringWithLength),
        "Holds a test String property with a max length of 10", GROUPNAME);
     stringProp->SetMaxLength(10);
     AddProperty(stringProp);
  
     AddProperty(new ColorRgbaActorProperty("Test_Color", "Test Color",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestColor),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestColor),
        "Holds a test Color property", GROUPNAME));
  
     AddProperty(new EnumActorProperty<TestEnum>("Test_Enum", "Test Enum",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestEnum),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestEnum),
        "Holds a test Enum property", GROUPNAME));
  
     AddProperty(new ResourceActorProperty(*this, DataType::SOUND, "Test_Sound_Resource", "Test Sound",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetSoundResourceName),
        "An example sound resource property", GROUPNAME));
  
     AddProperty(new ResourceActorProperty(*this, DataType::TEXTURE, "Test_Texture_Resource", "Texture",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTextureResourceName),
        "An example texture resource property", GROUPNAME));
  
     AddProperty(new ActorActorProperty(*this, "Test_Actor", "Test Actor",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestActor),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestActor),
        "dtCore::Transformable",
        "An example linked actor property", GROUPNAME));
  
     AddProperty(new GameEventActorProperty(*this, "TestGameEvent", "Test Game Event",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestGameEvent),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestGameEvent),
        "Holds a test game event property", GROUPNAME));
  
     mGroupParam->AddParameter("FloatParam", dtDAL::DataType::FLOAT);
     mGroupParam->AddParameter("IntParam", dtDAL::DataType::INT);
     mGroupParam->AddParameter("StringParam", dtDAL::DataType::STRING);
  
     AddProperty(new GroupActorProperty("TestGroup", "Test Group Property",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetTestGroup),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetTestGroup),
        "Holds a test group", GROUPNAME));
  
     mStringArray.push_back("First Element");
     mStringArray.push_back("Second Element");
     mStringArray.push_back("Third Element");
     mStringArray.push_back("Fourth Element");
     mStringArray.push_back("Fifth Element");
     mStringArray.push_back("Sixth Element");
  
     StringActorProperty* stringProp2 = new StringActorProperty(
        "ArrayString", "Array String",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetStringArrayValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetStringArrayValue),
        "Holds the strings used in the Array", GROUPNAME);
  
     ArrayActorPropertyBase* arrayStringProp = new ArrayActorProperty<std::string>(
        "TestStringArray", "Test String Array", "Holds a test array of Strings",
        MakeFunctor(*this, &ExampleTestPropertyProxy::StringArraySetIndex),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::StringArrayGetDefault),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::StringArrayGetValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::StringArraySetValue),
        stringProp2, GROUPNAME);
  
     arrayStringProp->SetMinArraySize(2);
     arrayStringProp->SetMaxArraySize(10);
  
     AddProperty(arrayStringProp);
  
     std::string arrayString = arrayStringProp->ToString();
     arrayStringProp->FromString(arrayString);
  
     Vec3ActorProperty* vecContainerProp = new Vec3ActorProperty(
        "VectorProp", "Vector Prop",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetVecContainerValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetVecContainerValue),
        "Holds the vector used in the container", GROUPNAME);
  
     IntActorProperty* intContainerProp = new IntActorProperty(
        "IntProp", "Int Prop",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetIntContainerValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetIntContainerValue),
        "Holds the int used in the container", GROUPNAME);
  
     ContainerActorProperty* containerProp = new ContainerActorProperty(
        "ContainerProp", "Container", "Contains a structure of properties",
        GROUPNAME);
     containerProp->AddProperty(vecContainerProp);
     containerProp->AddProperty(intContainerProp);
  
     ArrayActorPropertyBase* arrayContainerProp = new ArrayActorProperty<ExampleTestPropertyProxy::testStruct>(
        "TestContainerArray", "Array of Containers", "Holds a test array of Containers",
        MakeFunctor(*this, &ExampleTestPropertyProxy::ContainerArraySetIndex),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::ContainerArrayGetDefault),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::ContainerArrayGetValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::ContainerArraySetValue),
        containerProp, GROUPNAME, "", false);
  
     AddProperty(arrayContainerProp);
  
     arrayString = arrayContainerProp->ToString();
     arrayContainerProp->FromString(arrayString);
  
     std::vector<int> a;
     a.push_back(1);
     a.push_back(2);
     a.push_back(3);
     a.push_back(4);
     a.push_back(5);
     a.push_back(6);
     mArrayIntArray.push_back(a);
     mArrayIntArray.push_back(a);
     mArrayIntArray.push_back(a);
     mArrayIntArray.push_back(a);
     mArrayIntArray.push_back(a);
  
     IntActorProperty* intProp = new IntActorProperty(
        "ArrayInt", "Array Int",
        MakeFunctor(*this, &ExampleTestPropertyProxy::SetIntArrayValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::GetIntArrayValue),
        "Holds the int used in the double array", GROUPNAME);
  
     ArrayActorPropertyBase* arrayIntProp = new ArrayActorProperty<int>(
        "TestIntArray", "Test Int Array", "Holds an array of Ints",
        MakeFunctor(*this, &ExampleTestPropertyProxy::IntArraySetIndex),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::IntArrayGetDefault),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::IntArrayGetValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::IntArraySetValue),
        intProp, GROUPNAME);
  
     ArrayActorPropertyBase* arrayArrayProp = new ArrayActorProperty<std::vector<int> >(
        "TestArrayArray", "Test Array of Arrays", "Holds an array of arrays",
        MakeFunctor(*this, &ExampleTestPropertyProxy::ArrayArraySetIndex),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::ArrayArrayGetDefault),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::ArrayArrayGetValue),
        MakeFunctorRet(*this, &ExampleTestPropertyProxy::ArrayArraySetValue),
        arrayIntProp, GROUPNAME);
  
     AddProperty(arrayArrayProp);
  
     arrayString = arrayArrayProp->ToString();
     arrayArrayProp->FromString(arrayString);
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::StringArraySetIndex(int index)
  {
     mStringArrayIndex = index;
  }
  
  //////////////////////////////////////////////////////////////////////////
  std::string ExampleTestPropertyProxy::StringArrayGetDefault()
  {
     return "Default";
  }
  
  //////////////////////////////////////////////////////////////////////////
  std::vector<std::string> ExampleTestPropertyProxy::StringArrayGetValue()
  {
     return mStringArray;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::StringArraySetValue(const std::vector<std::string>& value)
  {
     mStringArray = value;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::SetStringArrayValue(const std::string& value)
  {
     if (mStringArrayIndex < (int)mStringArray.size())
     {
        mStringArray[mStringArrayIndex] = value;
     }
  }
  
  //////////////////////////////////////////////////////////////////////////
  std::string ExampleTestPropertyProxy::GetStringArrayValue()
  {
     if (mStringArrayIndex < (int)mStringArray.size())
     {
        return mStringArray[mStringArrayIndex];
     }
     return "";
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::ContainerArraySetIndex(int index)
  {
     mContainerArrayIndex = index;
  }
  
  //////////////////////////////////////////////////////////////////////////
  ExampleTestPropertyProxy::testStruct ExampleTestPropertyProxy::ContainerArrayGetDefault()
  {
     testStruct test;
     test.vector.x() = 5.0f;
     test.vector.y() = 8.0f;
     test.vector.z() = 53.0f;
     test.value = 100;
     return test;
  }
  
  //////////////////////////////////////////////////////////////////////////
  std::vector<ExampleTestPropertyProxy::testStruct> ExampleTestPropertyProxy::ContainerArrayGetValue()
  {
     return mStructArray;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::ContainerArraySetValue(const std::vector<ExampleTestPropertyProxy::testStruct>& value)
  {
     mStructArray = value;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::SetVecContainerValue(const osg::Vec3& value)
  {
     if (mContainerArrayIndex < (int)mStructArray.size())
     {
        mStructArray[mContainerArrayIndex].vector = value;
     }
  }
  
  //////////////////////////////////////////////////////////////////////////
  osg::Vec3 ExampleTestPropertyProxy::GetVecContainerValue()
  {
     if (mContainerArrayIndex < (int)mStructArray.size())
     {
        return mStructArray[mContainerArrayIndex].vector;
     }
     return ContainerArrayGetDefault().vector;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::SetIntContainerValue(int value)
  {
     if (mContainerArrayIndex < (int)mStructArray.size())
     {
        mStructArray[mContainerArrayIndex].value = value;
     }
  }
  
  //////////////////////////////////////////////////////////////////////////
  int ExampleTestPropertyProxy::GetIntContainerValue()
  {
     if (mContainerArrayIndex < (int)mStructArray.size())
     {
        return mStructArray[mContainerArrayIndex].value;
     }
     return ContainerArrayGetDefault().value;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::IntArraySetIndex(int index)
  {
     mIntArrayIndex = index;
  }
  
  //////////////////////////////////////////////////////////////////////////
  int ExampleTestPropertyProxy::IntArrayGetDefault()
  {
     return 0;
  }
  
  //////////////////////////////////////////////////////////////////////////
  std::vector<int> ExampleTestPropertyProxy::IntArrayGetValue()
  {
     return mArrayIntArray[mArrayArrayIndex];
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::IntArraySetValue(const std::vector<int>& value)
  {
     mArrayIntArray[mArrayArrayIndex] = value;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::ArrayArraySetIndex(int index)
  {
     mArrayArrayIndex = index;
  }
  
  //////////////////////////////////////////////////////////////////////////
  std::vector<int> ExampleTestPropertyProxy::ArrayArrayGetDefault()
  {
     std::vector<int> def;
     return def;
  }
  
  //////////////////////////////////////////////////////////////////////////
  std::vector<std::vector<int> > ExampleTestPropertyProxy::ArrayArrayGetValue()
  {
     return mArrayIntArray;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::ArrayArraySetValue(const std::vector<std::vector<int> >& value)
  {
     mArrayIntArray = value;
  }
  
  //////////////////////////////////////////////////////////////////////////
  void ExampleTestPropertyProxy::SetIntArrayValue(int value)
  {
     if (mArrayArrayIndex < (int)mArrayIntArray.size())
     {
        if (mIntArrayIndex < (int)mArrayIntArray[mArrayArrayIndex].size())
        {
           mArrayIntArray[mArrayArrayIndex][mIntArrayIndex] = value;
        }
     }
  }
  
  //////////////////////////////////////////////////////////////////////////
  int ExampleTestPropertyProxy::GetIntArrayValue()
  {
     if (mArrayArrayIndex < (int)mArrayIntArray.size())
     {
        if (mIntArrayIndex < (int)mArrayIntArray[mArrayArrayIndex].size())
        {
           return mArrayIntArray[mArrayArrayIndex][mIntArrayIndex];
        }
     }
  
     return 0;
  }
  
  //////////////////////////////////////////////////////////////////////////
  
  
  
  
(C) Æliens 
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher. 
In case of other copyright issues, contact the author.