void CAnimationEditorDlg::OnBnClickedAdddirection()
{
	HTREEITEM item = m_AnimationTree.GetSelectedItem();

	if(((CAnimation*)m_AnimationTree.GetItemData(item))->IsAngle())
		item = m_AnimationTree.GetParentItem(item);

	if(item)
	{
		CAngleDlg dlg;
		dlg.DoModal();

		CAnimation* anim = (CAnimation*)m_AnimationTree.GetItemData(item);
		map<float,int> CurrentAngles;
		for(list<CAnimation>::iterator a = anim->m_SubAnimations.begin(); a!= anim->m_SubAnimations.end();a ++)
		{
			if(a->IsAngle())
				CurrentAngles[a->m_Angle] = 1;
		}
		for(vector<float>::iterator i = dlg.m_Angles.begin(); i!= dlg.m_Angles.end(); i++)
		{
			if(CurrentAngles.find(*i) == CurrentAngles.end() )
			{
				anim->m_SubAnimations.push_back( CAnimation());
				CAnimation& angle = anim->m_SubAnimations.back();
				angle.m_IsAngle = true;
				angle.m_Angle = *i;
				angle.m_FixedID = m_pApplication->m_AnimationFixID++;
				CurrentAngles[*i] = 1;
				angle.m_pApp = anim->m_pApp;
			}
		}
	}
	UpdateAnimations();
}
示例#2
0
CAnimation* AnimatorBar::AddAnimation(CAnimation* pParent)
{
	// Create a satisfactory name
	CString Name;
	Name.Format("%s %d", AB_ANIMATION, pParent->m_SubAnimations.size());

	// Set up CAnimation
	CAnimation Animation;
	Animation.m_FixedID	= application->m_AnimationFixID++;
	Animation.application	= pParent->application;
	Animation.m_Name	= Name;

	// Add a default angle too
	Animation.m_SubAnimations.push_back(CAnimation());

	CAnimation& Angle = Animation.m_SubAnimations.back();

	Angle.m_IsAngle = true;
	Angle.m_Angle = 0;
	Angle.m_FixedID = application->m_AnimationFixID++;
	Angle.application = application;

	// And a frame
	bool			Found  = false;
	CImageResource* pImage = 0;

	int ID = 0;
	ID = layout->AddImage(32, 32);

	Angle.m_Images.push_back(ID);
	Angle.m_FrameTimes.push_back(1.0);

	// Push back
	pParent->m_SubAnimations.push_back(Animation);

	AnimationHasChanged();
	return &pParent->m_SubAnimations.back();
}
示例#3
0
void AnimatorBar::AddAngle()
{
	HTREEITEM Item = curHTreeItem;

	if(((CAnimation*)animations.GetItemData(Item))->IsAngle())
		Item = animations.GetParentItem(Item);

	CAnimation* pAngle;

	bool changed = false;

	if(Item)
	{
		CAngleDlg AddAngle;
		if (AddAngle.DoModal() != IDOK)
			return;

		CAnimation* pAnimation = (CAnimation*)animations.GetItemData(Item);

		map<float,int> CurrentAngles;

		for(list<CAnimation>::iterator a = pAnimation->m_SubAnimations.begin(); a!= pAnimation->m_SubAnimations.end(); a++)
			if(a->IsAngle())
				CurrentAngles[a->m_Angle] = 1;

		for(vector<float>::iterator i = AddAngle.m_Angles.begin(); i!= AddAngle.m_Angles.end(); i++)
		{
			if(CurrentAngles.find(*i) == CurrentAngles.end())
			{
				pAnimation->m_SubAnimations.push_back(CAnimation());

				CAnimation& Angle = pAnimation->m_SubAnimations.back();

				Angle.m_IsAngle = true;
				Angle.m_Angle = *i;
				Angle.m_FixedID = application->m_AnimationFixID++;
				CurrentAngles[*i] = 1;
				Angle.application = pAnimation->application;

				// Add a frame
				int ID = 0;
				ID = layout->AddImage(32, 32);

				Angle.m_Images.push_back(ID);
				Angle.m_FrameTimes.push_back(1.0);

				pAngle = &Angle;

				changed = true;
			}
		}
	}

	if (changed)
	{
		AnimationHasChanged();
		UpdateAnimations(NULL, NULL, NULL, -2);

		// Select animation
		animations.SelectItem(pAngle->m_Tree);
	}
}