FOR_EACH_COLLECTION(i, scaleTimelineDcit) { SkeletonBoneModel* boneModel = i->Key; ScaleTimelineModel* timelineModel = i->Value; SkeletonBone* bone = skeleton->FindBone(boneModel->Name()); KeyValuePair<SkeletonBone*, ScaleTimelineModel*>& timeline = mBoneScaleTimelines.NewAdd(); timeline.Key = bone; timeline.Value = timelineModel; }
ISkeleton::ISkeleton(StringRef name, const Share<ISkeletonModel>& model) :INode(name), mModel(model), mAvatarModel(nullptr), mIsBoneVisible(false), mIsSlotVisible(true) { Start(); SetSize(model->GetBoundingSize()); SetAvatarModel(mModel->DefaultAvatar()); //create bones const List<SkeletonBoneModel*>& bones = mModel->Bones(); for (auto boneModel : bones) { SkeletonBone* bone = new SkeletonBone(boneModel); bone->SetSkeleton(this); mBones.Add(bone); mBoneDict.Add(boneModel->Name(), bone); } for (auto bone : mBones) { SkeletonBoneModel* parentBoneModel = bone->Model()->Parent(); if (parentBoneModel != nullptr) { SkeletonBone* parentBone = FindBone(parentBoneModel->Name()); parentBone->AddBone(bone); } } //create slots const List<SkeletonSlotModel*>& slots = mModel->Slots(); uintp slotCount = slots.Count(); FOR_EACH_SIZE(i, slotCount) { SkeletonSlotModel* slotModel = slots[i]; SkeletonBone* bone = FindBone(slotModel->ParentBone()->Name()); SkeletonSlot* slot = new SkeletonSlot(this, slotModel); slot->EnableManaged(); //slot->SetLogicZ(i); bone->AddSlot(slot); mSlots.Add(slot); mSlotDict.Add(slotModel->Name(), slot); AddChild(slot); }