Example #1
0
	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;
	}
Example #2
0
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);
	}