TransformConstraint::TransformConstraint(const TransformConstraintData& data, Skeleton& skeleton) : data(data) { translateMix = data.translateMix; translation = data.translation; bone = skeleton.findBone(data.bone->name); target = skeleton.findBone(data.target->name); }
IkConstraint::IkConstraint(IkConstraintData &data, Skeleton &skeleton) : Constraint(), _data(data), _bendDirection(data.getBendDirection()), _compress(data.getCompress()), _stretch(data.getStretch()), _mix(data.getMix()), _target(skeleton.findBone( data.getTarget()->getName())) { _bones.ensureCapacity(_data.getBones().size()); for (size_t i = 0; i < _data.getBones().size(); i++) { BoneData *boneData = _data.getBones()[i]; _bones.add(skeleton.findBone(boneData->getName())); } }
PathConstraint::PathConstraint(PathConstraintData &data, Skeleton &skeleton) : Constraint(), _data(data), _target(skeleton.findSlot( data.getTarget()->getName())), _position(data.getPosition()), _spacing(data.getSpacing()), _rotateMix(data.getRotateMix()), _translateMix(data.getTranslateMix()) { _bones.ensureCapacity(_data.getBones().size()); for (size_t i = 0; i < _data.getBones().size(); i++) { BoneData *boneData = _data.getBones()[i]; _bones.add(skeleton.findBone(boneData->getName())); } _segments.setSize(10, 0); }
void Model::setAttachment(const String& boneName, const EntityPtr& node) { if( !mesh ) return; Skeleton* skeleton = mesh->getSkeleton().get(); assert( skeleton != nullptr ); Bone* bone = skeleton->findBone(boneName).get(); if( !bone ) return; Attachment* attachment = AllocateThis(Attachment); attachment->bone = bone; attachment->node = node; attachments.push_back(attachment); }