AnimationList.cpp
上传用户:shxiangxiu
上传日期:2007-01-03
资源大小:1101k
文件大小:4k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // AnimationList.cpp : implementation file
  3. //
  4. // glOOP (OpenGL Object Oriented Programming library)
  5. // Copyright (c) Craig Fahrnbach 1997, 1998
  6. //
  7. // OpenGL is a registered trademark of Silicon Graphics
  8. //
  9. //
  10. // This program is provided for educational and personal use only and
  11. // is provided without guarantee or warrantee expressed or implied.
  12. //
  13. // Commercial use is strickly prohibited without written permission
  14. // from ImageWare Development.
  15. //
  16. // This program is -not- in the public domain.
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "glOOP.h"
  21. #ifdef _DEBUG
  22. #define new DEBUG_NEW
  23. #undef THIS_FILE
  24. static char THIS_FILE[] = __FILE__;
  25. #endif
  26. //////////////////////////////////////////////////////////////////
  27. // CAnimationList
  28. //IMPLEMENT_DYNAMIC(CAnimationList, CObList)
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CAnimationList construction
  31. CAnimationList::CAnimationList()
  32. {
  33. // TODO: add construction code here,
  34. // Place all significant initialization in InitInstance
  35. }
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CAnimationList Destructor
  38. CAnimationList::~CAnimationList()
  39. {
  40. DeleteAll();
  41. }
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CAnimationList function implimentation
  44. void CAnimationList::Append(CAnimation* pAnimation)
  45. {
  46. if (!pAnimation) return;
  47. CObList::AddTail(pAnimation);
  48. }
  49. void CAnimationList::Remove(CAnimation* pAnimation)
  50. {
  51. if (!pAnimation) return;
  52. POSITION pos = CObList::Find(pAnimation);
  53. if (pos) {
  54. RemoveAt(pos);
  55. }
  56. }
  57. void CAnimationList::Delete(CAnimation* pAnimation)
  58. {
  59. if (!pAnimation) return;
  60. Remove(pAnimation);
  61. delete pAnimation;
  62. }
  63. void CAnimationList::DeleteAll()
  64. {
  65. while (!IsEmpty()) {
  66. CAnimation* pAnimation = (CAnimation*) RemoveHead();
  67. delete pAnimation;
  68. }
  69. }
  70. CAnimation* CAnimationList::Find(CString szName)
  71. {
  72. // Find the animation "Name" in the list
  73. // Create an animation pointer
  74. CAnimation* pAnimation = NULL;
  75. // walk the list
  76. POSITION Pos = GetHeadPosition();
  77. while (Pos) {
  78. pAnimation = GetAt(Pos);
  79. if(pAnimation->m_szName.Compare(szName) == 0)
  80. return pAnimation;
  81. pAnimation = GetNext(Pos);
  82. }
  83. // Did not find in current list
  84. return NULL;
  85. }
  86. void CAnimationList::Serialize(CArchive& ar, int iVersion)
  87. {
  88. CString szIndentSave;
  89. CString szBuffer;
  90. if (ar.IsStoring())
  91. {
  92. // Save the Objects' CAnimation procedures
  93. szBuffer.Format("%stCAnimation Procedures {n", szIndent);
  94. ar.WriteString(szBuffer);
  95. // Save the current indention and indent
  96. // all CAnimation class procedures
  97. szIndentSave = szIndent;
  98. szIndent += _T("tt"); // Add tabs
  99. CAnimation* pAnimation = NULL;
  100. // walk the list
  101. POSITION Pos = GetHeadPosition();
  102. while (Pos) {
  103. pAnimation = GetAt(Pos);
  104. // Since we save the AVI video animation procedure with the 
  105. // CMyAviVideo (C3dTextureMap derived class), dont save it here!
  106. if(!pAnimation->IsKindOf(RUNTIME_CLASS(CAnimAVI)))
  107. pAnimation->Serialize(ar, iVersion);
  108. pAnimation = GetNext(Pos);
  109. }
  110. // Restore indent position
  111. szIndent = szIndentSave; // restore indent
  112. szBuffer.Format("%st}n", szIndent); // end of CAnimation procedures
  113. ar.WriteString(szBuffer);
  114. }
  115. else
  116. {
  117. // Search for the beginning of the CAnimation procedures
  118. while(ar.ReadString(szBuffer)) {
  119. szBuffer.TrimLeft(); // Remove leading white spaces
  120. if(szBuffer.Compare("CAnimation Procedures {") == 0)
  121. break;
  122. }
  123. // Found the marker!
  124. // Load all CAnimation procedures
  125. while(ar.ReadString(szBuffer)) {
  126. CAnimation* pAnimation = NULL;
  127. szBuffer.TrimLeft(); // Remove leading white spaces
  128. if(szBuffer.Compare("}") == 0) // end of CAnimation procedures
  129. break;
  130. pAnimation = CAnimation::IsAnimationClass(&szBuffer);
  131. if(pAnimation) {
  132. pAnimation->Serialize(ar, iVersion);
  133. Append(pAnimation);
  134. }
  135. }
  136. }
  137. }