virtual void Update( Dali::UpdateProxy& updateProxy, float elapsedSeconds )
{
FrameCallbackBasic::Update( updateProxy, elapsedSeconds );
- updateProxy.GetWorldMatrixAndSize( mActorId, mWorldMatrix, mSize );
- mWorldMatrixGetWorldMatrixCall = updateProxy.GetWorldMatrix( mActorId );
mSizeGetSizeCall = updateProxy.GetSize( mActorId );
mPositionGetPositionCall = updateProxy.GetPosition( mActorId );
updateProxy.GetPositionAndSize( mActorId, mPositionGetPositionAndSizeCall, mSizeGetPositionAndSizeCall );
- mWorldColor = updateProxy.GetWorldColor( mActorId );
+ mColor = updateProxy.GetColor( mActorId );
+ mScale = updateProxy.GetScale( mActorId );
}
const unsigned int mActorId;
- Matrix mWorldMatrix;
- Matrix mWorldMatrixGetWorldMatrixCall;
- Vector3 mSize;
Vector3 mSizeGetSizeCall;
Vector3 mPositionGetPositionCall;
Vector3 mPositionGetPositionAndSizeCall;
Vector3 mSizeGetPositionAndSizeCall;
- Vector4 mWorldColor;
+ Vector4 mColor;
+ Vector3 mScale;
};
class FrameCallbackSetter : public FrameCallbackBasic
FrameCallbackSetter(
unsigned int actorId,
- const Matrix& matrixToSet,
const Vector3& sizeToSet,
const Vector3& positionToSet,
- const Vector4& colorToSet )
+ const Vector4& colorToSet,
+ const Vector3& scaleToSet )
: mActorId( actorId ),
- mMatrixToSet( matrixToSet ),
mSizeToSet( sizeToSet ),
mPositionToSet( positionToSet ),
- mColorToSet( colorToSet )
+ mColorToSet( colorToSet ),
+ mScaleToSet( scaleToSet )
{
}
virtual void Update( Dali::UpdateProxy& updateProxy, float elapsedSeconds )
{
FrameCallbackBasic::Update( updateProxy, elapsedSeconds );
- updateProxy.SetWorldMatrix( mActorId, mMatrixToSet );
updateProxy.SetSize( mActorId, mSizeToSet );
- updateProxy.GetWorldMatrixAndSize( mActorId, mWorldMatrixAfterSetting, mSizeAfterSetting );
updateProxy.SetPosition( mActorId, mPositionToSet );
+ updateProxy.SetColor( mActorId, mColorToSet );
+ updateProxy.SetScale( mActorId, mScaleToSet );
+ mSizeAfterSetting = updateProxy.GetSize( mActorId );
mPositionAfterSetting = updateProxy.GetPosition( mActorId );
- updateProxy.SetWorldColor( mActorId, mColorToSet );
- mColorAfterSetting = updateProxy.GetWorldColor( mActorId );
+ mColorAfterSetting = updateProxy.GetColor( mActorId );
+ mScaleAfterSetting = updateProxy.GetScale( mActorId );
}
const unsigned int mActorId;
- const Matrix& mMatrixToSet;
const Vector3& mSizeToSet;
const Vector3& mPositionToSet;
const Vector4& mColorToSet;
+ const Vector3& mScaleToSet;
- Matrix mWorldMatrixAfterSetting;
Vector3 mSizeAfterSetting;
Vector3 mPositionAfterSetting;
Vector4 mColorAfterSetting;
+ Vector3 mScaleAfterSetting;
};
+class FrameCallbackBaker : public FrameCallbackBasic
+{
+public:
+
+ FrameCallbackBaker(
+ unsigned int actorId,
+ const Vector3& sizeToSet,
+ const Vector3& positionToSet,
+ const Vector4& colorToSet,
+ const Vector3& scaleToSet )
+ : mActorId( actorId ),
+ mSizeToSet( sizeToSet ),
+ mPositionToSet( positionToSet ),
+ mColorToSet( colorToSet ),
+ mScaleToSet( scaleToSet )
+ {
+ }
+
+ virtual void Update( Dali::UpdateProxy& updateProxy, float elapsedSeconds )
+ {
+ FrameCallbackBasic::Update( updateProxy, elapsedSeconds );
+ updateProxy.BakeSize( mActorId, mSizeToSet );
+ updateProxy.BakePosition( mActorId, mPositionToSet );
+ updateProxy.BakeColor( mActorId, mColorToSet );
+ updateProxy.BakeScale( mActorId, mScaleToSet );
+ mSizeAfterSetting = updateProxy.GetSize( mActorId );
+ mPositionAfterSetting = updateProxy.GetPosition( mActorId );
+ mColorAfterSetting = updateProxy.GetColor( mActorId );
+ mScaleAfterSetting = updateProxy.GetScale( mActorId );
+ }
+
+ const unsigned int mActorId;
+ const Vector3& mSizeToSet;
+ const Vector3& mPositionToSet;
+ const Vector4& mColorToSet;
+ const Vector3& mScaleToSet;
+
+ Vector3 mSizeAfterSetting;
+ Vector3 mPositionAfterSetting;
+ Vector4 mColorAfterSetting;
+ Vector3 mScaleAfterSetting;
+};
+
+
class FrameCallbackMultipleActors : public FrameCallbackBasic
{
public:
FrameCallbackBasic::Update( updateProxy, elapsedSeconds );
for( auto&& i : mActorIds )
{
- Matrix matrix( false );
+ Vector3 position;
Vector3 size;
- updateProxy.GetWorldMatrixAndSize( i, matrix, size );
- mWorldMatrices[ i ] = matrix;
+ updateProxy.GetPositionAndSize( i, position, size );
+ mPositions[ i ] = position;
mSizes[ i ] = size;
}
}
Vector< unsigned int > mActorIds;
- std::map< unsigned int, Matrix > mWorldMatrices;
+ std::map< unsigned int, Vector3 > mPositions;
std::map< unsigned int, Vector3 > mSizes;
};
Vector2 actorSize( 200, 300 );
Vector4 color( 0.5f, 0.6f, 0.7f, 0.8f );
Vector3 position( 10.0f, 20.0f, 30.0f );
+ Vector3 scale( 2.0f, 4.0f, 6.0f );
Actor actor = Actor::New();
actor.SetParentOrigin( ParentOrigin::TOP_LEFT );
actor.SetSize( actorSize );
actor.SetColor( color );
actor.SetPosition( position );
+ actor.SetScale( scale );
Stage stage = Stage::GetCurrent();
stage.Add( actor );
- Vector2 stageSize = stage.GetSize();
FrameCallbackOneActor frameCallback( actor.GetId() );
DevelStage::AddFrameCallback( stage, frameCallback, stage.GetRootLayer() );
application.SendNotification();
application.Render();
- Vector3 expectedPosition( -stageSize.width * 0.5f + actorSize.width * 0.5f + position.x,
- -stageSize.height * 0.5f + actorSize.height * 0.5f + position.y,
- 0.0f + position.z );
-
- Matrix expectedWorldMatrix( false );
- expectedWorldMatrix.SetIdentity();
- expectedWorldMatrix.SetTranslation( expectedPosition );
-
DALI_TEST_EQUALS( frameCallback.mCalled, true, TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mWorldMatrix, expectedWorldMatrix, TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mWorldMatrixGetWorldMatrixCall, expectedWorldMatrix, TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mSize, Vector3( actorSize.width, actorSize.height, 0.0f ), TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mSizeGetSizeCall, Vector3( actorSize.width, actorSize.height, 0.0f ), TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mPositionGetPositionCall, expectedPosition, TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mPositionGetPositionAndSizeCall, expectedPosition, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mPositionGetPositionCall, position, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mPositionGetPositionAndSizeCall, position, TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mSizeGetPositionAndSizeCall, Vector3( actorSize.width, actorSize.height, 0.0f ), TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mWorldColor, color, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mColor, color, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mScale, scale, TEST_LOCATION );
END_TEST;
}
Stage stage = Stage::GetCurrent();
stage.Add( actor );
- Vector2 stageSize = stage.GetSize();
- Matrix matrixToSet( Matrix::IDENTITY );
- matrixToSet.SetTranslation( Vector3( 100.0f, 500.0f, 50.0f ) );
Vector3 sizeToSet( 1.0f, 2.0f, 3.0f );
Vector3 positionToSet( 10.0f, 20.0f, 30.0f );
Vector4 colorToSet( Color::MAGENTA );
+ Vector3 scaleToSet( 1.0f, 3.0f, 5.0f );
- FrameCallbackSetter frameCallback( actor.GetId(), matrixToSet, sizeToSet, positionToSet, colorToSet );
+ FrameCallbackSetter frameCallback( actor.GetId(), sizeToSet, positionToSet, colorToSet, scaleToSet );
DevelStage::AddFrameCallback( stage, frameCallback, stage.GetRootLayer() );
application.SendNotification();
application.Render();
- Matrix expectedWorldMatrix( false );
- expectedWorldMatrix.SetIdentity();
- expectedWorldMatrix.SetTranslation( Vector3( -stageSize.width * 0.5f + actorSize.width * 0.5f,
- -stageSize.height * 0.5f + actorSize.height * 0.5f,
- 0.0f ) );
+ DALI_TEST_EQUALS( frameCallback.mCalled, true, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mSizeAfterSetting, sizeToSet, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mPositionAfterSetting, positionToSet, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mColorAfterSetting, colorToSet, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mScaleAfterSetting, scaleToSet, TEST_LOCATION );
+
+ // Ensure the actual actor values haven't changed as we didn't bake the values after removing the callback
+ DevelStage::RemoveFrameCallback( stage, frameCallback );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::POSITION ).Get< Vector3 >(), Vector3::ZERO, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::SIZE ).Get< Vector3 >(), Vector3( actorSize ), TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::COLOR ).Get< Vector4 >(), Color::WHITE, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::SCALE ).Get< Vector3 >(), Vector3::ONE, TEST_LOCATION );
+
+ END_TEST;
+}
+
+int UtcDaliFrameCallbackBake(void)
+{
+ TestApplication application;
+ Vector2 actorSize( 200, 300 );
+
+ Actor actor = Actor::New();
+ actor.SetParentOrigin( ParentOrigin::TOP_LEFT );
+ actor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ actor.SetSize( actorSize );
+
+ Stage stage = Stage::GetCurrent();
+ stage.Add( actor );
+
+ Vector3 sizeToSet( 1.0f, 2.0f, 3.0f );
+ Vector3 positionToSet( 10.0f, 20.0f, 30.0f );
+ Vector4 colorToSet( Color::MAGENTA );
+ Vector3 scaleToSet( 1.0f, 3.0f, 5.0f );
+
+ FrameCallbackBaker frameCallback( actor.GetId(), sizeToSet, positionToSet, colorToSet, scaleToSet );
+ DevelStage::AddFrameCallback( stage, frameCallback, stage.GetRootLayer() );
+
+ application.SendNotification();
+ application.Render();
DALI_TEST_EQUALS( frameCallback.mCalled, true, TEST_LOCATION );
- DALI_TEST_CHECK( expectedWorldMatrix != matrixToSet );
- DALI_TEST_EQUALS( frameCallback.mWorldMatrixAfterSetting, matrixToSet, TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mSizeAfterSetting, sizeToSet, TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mPositionAfterSetting, positionToSet, TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mColorAfterSetting, colorToSet, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mScaleAfterSetting, scaleToSet, TEST_LOCATION );
+
+ // Ensure the new values are saved after removing the callback
+ DevelStage::RemoveFrameCallback( stage, frameCallback );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::POSITION ).Get< Vector3 >(), positionToSet, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::SIZE ).Get< Vector3 >(), sizeToSet, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::COLOR ).Get< Vector4 >(), colorToSet, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetCurrentProperty( Actor::Property::SCALE ).Get< Vector3 >(), scaleToSet, TEST_LOCATION );
END_TEST;
}
+
int UtcDaliFrameCallbackMultipleActors(void)
{
/**
* / \
* actorC actorH
*
- * Screen positions:
+ * Screen positions (with minor alterations due to local position):
* -----------------------
* |actorA|actorD |
* | actorB |
TestApplication application;
Stage stage = Stage::GetCurrent();
- const Vector2 stageSize = stage.GetSize();
std::map< char, Vector3 > sizes;
sizes['A'] = Vector3( 50.0f, 50.0f, 0.0f );
sizes['G'] = Vector3( 350.0f, 350.0f, 0.0f );
sizes['H'] = Vector3( 400.0f, 350.0f, 0.0f );
- std::map< char, Matrix > matrices;
- for( char i = 'A'; i <= 'H'; ++i )
- {
- matrices[i] = Matrix::IDENTITY;
- }
-
- matrices['A'].SetTranslation( Vector3( -stageSize.width * 0.5f + sizes['A'].width * 0.5f,
- -stageSize.height * 0.5f + sizes['A'].height * 0.5f,
- 0.0f ) );
- matrices['B'].SetTranslation( Vector3( matrices['A'].GetTranslation3() + sizes['A'] * 0.5f + sizes['B'] * 0.5f ) );
- matrices['C'].SetTranslation( Vector3( matrices['B'].GetTranslation3().x,
- matrices['B'].GetTranslation3().y + sizes['B'].height * 0.5f + sizes['C'].height * 0.5f,
- 0.0f ) );
- matrices['D'].SetTranslation( Vector3( matrices['A'].GetTranslation3().x + sizes['A'].width * 0.5f + sizes['D'].width * 0.5f,
- matrices['A'].GetTranslation3().y,
- 0.0f ) );
- matrices['E'].SetTranslation( Vector3( -stageSize.width * 0.5f + sizes['E'].width * 0.5f,
- stageSize.height * 0.5f - sizes['E'].height * 0.5f,
- 0.0f ) );
- matrices['F'].SetTranslation( Vector3( matrices['E'].GetTranslation3().x,
- matrices['E'].GetTranslation3().y - sizes['E'].height * 0.5f - sizes['F'].height * 0.5f,
- 0.0f ) );
- matrices['G'].SetTranslation( Vector3( matrices['E'].GetTranslation3().x + sizes['E'].width * 0.5f + sizes['G'].width * 0.5f,
- matrices['E'].GetTranslation3().y,
- 0.0f ) );
- matrices['H'].SetTranslation( Vector3( matrices['G'].GetTranslation3().x + sizes['G'].width * 0.5f + sizes['H'].width * 0.5f,
- matrices['G'].GetTranslation3().y - sizes['G'].height * 0.5f - sizes['H'].height * 0.5f,
- 0.0f ) );
+ std::map< char, Vector3 > positions;
+ positions['A'] = Vector3( 0.0f, 1.0f, 2.0f );
+ positions['B'] = Vector3( 2.0f, 3.0f, 4.0f );
+ positions['C'] = Vector3( 5.0f, 6.0f, 7.0f );
+ positions['D'] = Vector3( 8.0f, 9.0f, 10.0f );
+ positions['E'] = Vector3( 11.0f, 12.0f, 13.0f );
+ positions['F'] = Vector3( 14.0f, 15.0f, 16.0f );
+ positions['G'] = Vector3( 17.0f, 18.0f, 19.0f );
+ positions['H'] = Vector3( 20.0f, 21.0f, 22.0f );
Actor actorA = Actor::New();
actorA.SetParentOrigin( ParentOrigin::TOP_LEFT );
actorA.SetAnchorPoint( AnchorPoint::TOP_LEFT );
actorA.SetSize( sizes['A'] );
+ actorA.SetPosition( positions['A'] );
stage.Add( actorA );
Actor actorB = Actor::New();
actorB.SetParentOrigin( ParentOrigin::BOTTOM_RIGHT );
actorB.SetAnchorPoint( AnchorPoint::TOP_LEFT );
actorB.SetSize( sizes['B'] );
+ actorB.SetPosition( positions['B'] );
actorA.Add( actorB );
Actor actorC = Actor::New();
actorC.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
actorC.SetAnchorPoint( AnchorPoint::TOP_CENTER );
actorC.SetSize( sizes['C'] );
+ actorC.SetPosition( positions['C'] );
actorB.Add( actorC );
Actor actorD = Actor::New();
actorD.SetParentOrigin( ParentOrigin::CENTER_RIGHT );
actorD.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
actorD.SetSize( sizes['D'] );
+ actorD.SetPosition( positions['D'] );
actorA.Add( actorD );
Actor actorE = Actor::New();
actorE.SetParentOrigin( ParentOrigin::BOTTOM_LEFT );
actorE.SetAnchorPoint( AnchorPoint::BOTTOM_LEFT );
actorE.SetSize( sizes['E'] );
+ actorE.SetPosition( positions['E'] );
stage.Add( actorE );
Actor actorF = Actor::New();
actorF.SetParentOrigin( ParentOrigin::TOP_CENTER );
actorF.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
actorF.SetSize( sizes['F'] );
+ actorF.SetPosition( positions['F'] );
actorE.Add( actorF );
Actor actorG = Actor::New();
actorG.SetParentOrigin( ParentOrigin::CENTER_RIGHT );
actorG.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
actorG.SetSize( sizes['G'] );
+ actorG.SetPosition( positions['G'] );
actorE.Add( actorG );
Actor actorH = Actor::New();
actorH.SetParentOrigin( ParentOrigin::TOP_RIGHT );
actorH.SetAnchorPoint( AnchorPoint::BOTTOM_LEFT );
actorH.SetSize( sizes['H'] );
+ actorH.SetPosition( positions['H'] );
actorG.Add( actorH );
std::map< char, unsigned int > actorIds;
for( char i = 'A'; i <= 'H'; ++i )
{
- DALI_TEST_EQUALS( frameCallback.mWorldMatrices[ actorIds[ i ] ], matrices[ i ], TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mPositions[ actorIds[ i ] ], positions[ i ], TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mSizes[ actorIds[ i ] ], sizes[ i ], TEST_LOCATION );
}
for( char i = 'A'; i <= 'H'; ++i )
{
- DALI_TEST_EQUALS( frameCallback.mWorldMatrices[ actorIds[ i ] ], matrices[ i ], TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mPositions[ actorIds[ i ] ], positions[ i ], TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mSizes[ actorIds[ i ] ], sizes[ i ], TEST_LOCATION );
}
application.SendNotification();
application.Render();
+ // All should be default constructed objects
DALI_TEST_EQUALS( frameCallback.mCalled, true, TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mWorldMatrix, Matrix(true) /* Unchanged Matrix */, TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mWorldMatrixGetWorldMatrixCall, Matrix::IDENTITY, TEST_LOCATION );
- DALI_TEST_EQUALS( frameCallback.mSize, Vector3::ZERO, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mPositionGetPositionCall, Vector3::ZERO, TEST_LOCATION );
DALI_TEST_EQUALS( frameCallback.mSizeGetSizeCall, Vector3::ZERO, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mColor, Vector4::ZERO, TEST_LOCATION );
+ DALI_TEST_EQUALS( frameCallback.mScale, Vector3::ZERO, TEST_LOCATION );
END_TEST;
}
public:
/**
- * @brief Given the Actor ID, this retrieves that Actor's position.
+ * @brief Given the Actor ID, this retrieves that Actor's local position.
* @param[in] id The Actor ID
* @return If valid Actor ID, then the Actor's position is returned.
*/
Vector3 GetPosition( unsigned int id ) const;
/**
- * @brief Allows setting an Actor's position from the Frame callback function.
+ * @brief Allows setting an Actor's local position from the Frame callback function for the current frame only.
* @param[in] id The Actor ID
* @param[in] position The position to set.
- * @note This will get reset to the internally calculated value in the next frame, so will have to be set again.
+ * @note This will get reset to the internally calculated or previously baked value in the next frame, so will have to be set again.
*/
void SetPosition( unsigned int id, const Vector3& position );
/**
+ * @brief Allows baking an Actor's local position from the Frame callback function.
+ * @param[in] id The Actor ID
+ * @param[in] position The position to set.
+ * @note The value is saved so will cause undesired effects if this property is being animated.
+ */
+ void BakePosition( unsigned int id, const Vector3& position );
+
+ /**
* @brief Given the Actor ID, this retrieves that Actor's size.
* @param[in] id The Actor ID
* @return If valid Actor ID, then Actor's size is returned, otherwise Vector3::ZERO.
const Vector3& GetSize( unsigned int id ) const;
/**
- * @brief Allows setting an Actor's size from the Frame callback function.
+ * @brief Allows setting an Actor's size from the Frame callback function for the current frame only.
* @param[in] id The Actor ID
* @param[in] size The size to set.
- * @note This will get reset to the internally calculated value in the next frame, so will have to be set again.
+ * @note This will get reset to the internally calculated or previously baked value in the next frame, so will have to be set again.
*/
void SetSize( unsigned int id, const Vector3& size );
/**
- * @brief Given the Actor ID, this retrieves that Actor's position and size.
+ * @brief Allows baking an Actor's size from the Frame callback function.
+ * @param[in] id The Actor ID
+ * @param[in] size The size to set.
+ * @note The value is saved so will cause undesired effects if this property is being animated.
+ */
+ void BakeSize( unsigned int id, const Vector3& size );
+
+ /**
+ * @brief Given the Actor ID, this retrieves that Actor's local position and size.
* @param[in] id The Actor ID
* @param[out] position If valid Actor ID, then Actor's position is set
* @param[out] size If valid Actor ID, then Actor's size is set
void GetPositionAndSize( unsigned int id, Vector3& position, Vector3& size ) const;
/**
- * @brief Given the Actor ID, this retrieves that Actor's color.
- * @param[in] id The Actor ID
- * @return If valid Actor ID, then Actor's color is returned, otherwise Vector4::ZERO.
+ * @brief Given the Actor ID, this retrieves that Actor's local scale.
+ * @param[in] id The Actor ID
+ * @return If valid Actor ID, then the Actor's scale is returned.
*/
- Vector4 GetWorldColor( unsigned int id ) const;
+ Vector3 GetScale( unsigned int id ) const;
/**
- * @brief Allows setting an Actor's color from the Frame callback function.
+ * @brief Allows setting an Actor's local scale from the Frame callback function for the current frame only.
* @param[in] id The Actor ID
- * @param[in] color The color to set
- * @note This will get reset to the internally calculated value in the next frame, so will have to be set again.
+ * @param[in] scale The scale to set.
+ * @note This will get reset to the internally calculated or previously baked value in the next frame, so will have to be set again.
*/
- void SetWorldColor( unsigned int id, const Vector4& color ) const;
+ void SetScale( unsigned int id, const Vector3& scale );
/**
- * @brief Given the Actor ID, this retrieves that Actor's world-matrix and size.
- * @param[in] id The Actor ID
- * @param[out] worldMatrix If valid Actor ID, then Actor's world matrix is set
- * @param[out] size If valid Actor ID, then Actor's size is set
+ * @brief Allows baking an Actor's local scale from the Frame callback function.
+ * @param[in] id The Actor ID
+ * @param[in] scale The scale to set.
+ * @note The value is saved so will cause undesired effects if this property is being animated.
*/
- void GetWorldMatrixAndSize( unsigned int id, Matrix& worldMatrix, Vector3& size ) const;
+ void BakeScale( unsigned int id, const Vector3& scale );
/**
- * @brief Given the Actor ID, this retrieves that Actor's world-matrix.
- * @param[in] id The Actor ID
- * @return If valid Actor ID, then Actor's world matrix is returned, otherwise Matrix::IDENTITY.
+ * @brief Given the Actor ID, this retrieves that Actor's local color.
+ * @param[in] id The Actor ID
+ * @return If valid Actor ID, then Actor's color is returned, otherwise Vector4::ZERO.
+ */
+ Vector4 GetColor( unsigned int id ) const;
+
+ /**
+ * @brief Allows setting an Actor's local color from the Frame callback function for the current frame only.
+ * @param[in] id The Actor ID
+ * @param[in] color The color to set
+ * @note This will get reset to the internally calculated or previously baked value in the next frame, so will have to be set again.
*/
- const Matrix& GetWorldMatrix( unsigned int id ) const;
+ void SetColor( unsigned int id, const Vector4& color ) const;
/**
- * @brief Allows the setting an Actor's world-matrix from the Frame callback function.
- * @param[in] id The Actor ID
- * @param[in] worldMatrix The world matrix to set.
- * @note This will get reset to the internally calculated value in the next frame, so will have to be set again.
- * @note This will only set the world matrix for that particular actor.
- * The world matrices of the children will not change and will have to be manually changed in the callback
- * as well (if required).
+ * @brief Allows baking an Actor's local color from the Frame callback function.
+ * @param[in] id The Actor ID
+ * @param[in] color The color to set
+ * @note The value is saved so will cause undesired effects if this property is being animated.
*/
- void SetWorldMatrix( unsigned int id, const Matrix& worldMatrix );
+ void BakeColor( unsigned int id, const Vector4& color ) const;
public: // Not intended for application developers