/****************************************************************************** libx42.net - skinned vertex animation library (.NET API) Copyright (C) 2007 HermitWorks Entertainment Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA. ******************************************************************************/ #include "Stdafx.h" #include "Influence.h" #include "Model.h" #include "Group.h" #include "Bone.h" using namespace System; using namespace System::Collections::Generic; using namespace System::IO; namespace Libx42 { const x42influence_t& Influence::RawInfluence::get( void ) { return owner->m->influences[index]; } Bone^ Influence::Bone::get( void ) { if( RawInfluence.bone == X42_MODEL_BONE ) return nullptr; return owner->Bones[(int)RawInfluence.bone]; } Math::Affine Influence::MeshToBone::get( void ) { Math::Affine ret; memcpy( &ret, &RawInfluence.meshToBone, sizeof( affine_t ) ); return ret; } array< Group^ >^ Influence::GetGroups( void ) { List< Group^ > retList; for( int i = 0; i < owner->Groups->Count; i++ ) if( owner->Groups[i]->Influences->Contains( this ) ) retList.Add( owner->Groups[i] ); return retList.ToArray(); } InfluenceCollection::InfluenceCollection( Model ^owner ) : ModelItemCollection< Influence^ >( owner ) { items = gcnew array< Influence^ >( owner->m->header.numInfluences ); for( int i = 0; i < items->Length; i++ ) items[i] = gcnew Influence( owner, i ); } InfluenceCollection::InfluenceCollection( Model ^owner, Group ^group ) : ModelItemCollection< Influence^ >( owner ) { items = gcnew array< Influence^ >( group->RawGroup.numInfluences ); for( int i = 0; i < items->Length; i++ ) items[i] = owner->Influences[group->RawGroup.influences[i]]; } array< Influence^ >^ InfluenceCollection::GetStaticInfluences( void ) { List< Influence^ > retList; for( int i = 0; i < items->Length; i++ ) if( !items[i]->Bone ) retList.Add( items[i] ); return retList.ToArray(); } };