int GIIHelper::_copyWorldTransform( lua_State *L ){ ZLAffine3D tmp; ZLAffine3D tmp1; float rx,ry,rz; MOAILuaState state (L); if ( !state.CheckParams ( 1, "UU" )) return 0; MOAITransform* src = state.GetLuaObject< MOAITransform >(1, true); MOAITransform* dst = state.GetLuaObject< MOAITransform >(2, true); const ZLAffine3D& srcMtx = src->GetLocalToWorldMtx (); const ZLAffine3D* inherit = dst->GetLinkedValue < ZLAffine3D* >( PACK_ATTR ( MOAITransformBase, MOAITransformBase::INHERIT_TRANSFORM ), 0 ); tmp.Init( src->GetLocalToWorldMtx() ); if( inherit ) { tmp1.Inverse( *inherit ); tmp.Append( tmp1 ); } ZLVec3D loc = tmp.GetTranslation(); ZLVec3D scale = tmp.GetStretch(); dst->SetLoc( loc ); dst->SetScl( scale ); rz = tmp.GetRot(); dst->SetRot( 0, 0, rz ); dst->ScheduleUpdate(); return 0; }
//----------------------------------------------------------------// void ZLQuaternion::Set ( const ZLMatrix4x4& m ) { ZLAffine3D affine; affine.Init ( m ); this->Set ( affine ); }