-void PropertyMetadata::AdjustPropertyValueBy( const Property::Value& relativePropertyValue )
-{
- switch ( GetType() )
- {
- case Property::NONE:
- case Property::RECTANGLE:
- case Property::STRING:
- case Property::ARRAY:
- case Property::MAP:
- case Property::MATRIX:
- case Property::MATRIX3:
- {
- // Not animated
- break;
- }
-
- case Property::BOOLEAN:
- {
- bool currentValue = false;
- bool relativeValue = false;
- if( value.Get( currentValue ) && relativePropertyValue.Get( relativeValue ) )
- {
- value = currentValue || relativeValue;
- }
- break;
- }
-
- case Property::INTEGER:
- {
- AdjustProperty< int >( value, relativePropertyValue );
- break;
- }
-
- case Property::FLOAT:
- {
- AdjustProperty< float >( value, relativePropertyValue );
- break;
- }
-
- case Property::ROTATION:
- {
- Quaternion currentValue;
- Quaternion relativeValue;
- if( value.Get( currentValue ) && relativePropertyValue.Get( relativeValue ) )
- {
- value = currentValue * relativeValue;
- }
- break;
- }
-
- case Property::VECTOR2:
- {
- if( componentIndex == Property::INVALID_COMPONENT_INDEX )
- {
- AdjustProperty< Vector2 >( value, relativePropertyValue );
- }
- else
- {
- Vector2 vector2Value;
- value.Get( vector2Value );
-
- if( componentIndex == 0 )
- {
- vector2Value.x += relativePropertyValue.Get< float >();
- }
- else if( componentIndex == 1 )
- {
- vector2Value.y += relativePropertyValue.Get< float >();
- }
-
- value = vector2Value;
- }
-
- break;
- }
-
- case Property::VECTOR3:
- {
- if( componentIndex == Property::INVALID_COMPONENT_INDEX )
- {
- AdjustProperty< Vector3 >( value, relativePropertyValue );
- }
- else
- {
- Vector3 vector3Value;
- value.Get( vector3Value );
-
- if( componentIndex == 0 )
- {
- vector3Value.x += relativePropertyValue.Get< float >();
- }
- else if( componentIndex == 1 )
- {
- vector3Value.y += relativePropertyValue.Get< float >();
- }
- else if( componentIndex == 2 )
- {
- vector3Value.z += relativePropertyValue.Get< float >();
- }
-
- value = vector3Value;
- }
- break;
- }
-
- case Property::VECTOR4:
- {
- if( componentIndex == Property::INVALID_COMPONENT_INDEX )
- {
- AdjustProperty< Vector4 >( value, relativePropertyValue );
- }
- else
- {
- Vector4 vector4Value;
- value.Get( vector4Value );
-
- if( componentIndex == 0 )
- {
- vector4Value.x = relativePropertyValue.Get< float >();
- }
- else if( componentIndex == 1 )
- {
- vector4Value.y = relativePropertyValue.Get< float >();
- }
- else if( componentIndex == 2 )
- {
- vector4Value.z = relativePropertyValue.Get< float >();
- }
- else if( componentIndex == 3 )
- {
- vector4Value.w = relativePropertyValue.Get< float >();
- }
-
- value = vector4Value;
- }
- break;
- }
- }
-}
-