int GIIHelper::_setWorldLoc( lua_State *L ){ MOAILuaState state (L); if ( !state.CheckParams ( 1, "UN" )) return 0; MOAITransform* dst = state.GetLuaObject< MOAITransform >(1, true); float x = state.GetValue< float >( 2, 0.0f ); float y = state.GetValue< float >( 3, 0.0f ); float z = state.GetValue< float >( 4, 0.0f ); ZLVec3D loc; loc.Init( x, y, z ); const ZLAffine3D* inherit = dst->GetLinkedValue < ZLAffine3D* >( PACK_ATTR ( MOAITransformBase, MOAITransformBase::INHERIT_TRANSFORM ), 0 ); if( inherit ) { ZLAffine3D inverse; inverse.Inverse( *inherit ); inverse.Transform( loc ); } dst->SetLoc( loc ); dst->ScheduleUpdate(); return 0; }
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; }