Main.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #include <Ogre.h>
  2. #include "../../common/OgreBase.h"
  3. #include "../../common/Logger.h"
  4. #include "EnemyFile.h"
  5. #include "RamEffectFile.h"
  6. #include "StageFile.h"
  7. std::vector<EnemyInfo> models_all;
  8. std::vector<EffectInfo> effects_all;
  9. std::vector<StageInfo> stages_all;
  10. void
  11. fill_names()
  12. {
  13. EnemyInfo info;
  14. Ogre::ConfigFile cf;
  15. cf.load("export_models.cfg");
  16. Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();
  17. while (seci.hasMoreElements())
  18. {
  19. Ogre::String names = seci.peekNextKey();
  20. Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
  21. if (names != "")
  22. {
  23. Ogre::StringVector name = Ogre::StringUtil::split(names, ":", 3);
  24. if (name.size() < 3)
  25. {
  26. LOGGER->Log("In '" + names + "' not enough names. Must be 3.\n");
  27. continue;
  28. }
  29. info.file_name = name[0];
  30. info.data.name = name[1];
  31. Ogre::StringVector tex_size = Ogre::StringUtil::split(name[2], "x", 2);
  32. info.data.tex_width = Ogre::StringConverter::parseInt(tex_size[0]);
  33. info.data.tex_height = Ogre::StringConverter::parseInt(tex_size[1]);
  34. if (info.file_name != "")
  35. {
  36. Ogre::ConfigFile::SettingsMultiMap::iterator i;
  37. for (i = settings->begin(); i != settings->end(); ++i)
  38. {
  39. info.animations.push_back(i->second);
  40. LOGGER->Log("Animation add:" + info.file_name + " " + i->second + "\n");
  41. }
  42. models_all.push_back(info);
  43. info.animations.clear();
  44. }
  45. }
  46. }
  47. EffectInfo effect;
  48. cf.load("export_effects.cfg");
  49. seci = cf.getSectionIterator();
  50. while (seci.hasMoreElements())
  51. {
  52. Ogre::String names = seci.peekNextKey();
  53. Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
  54. if (names == "")
  55. {
  56. Ogre::ConfigFile::SettingsMultiMap::iterator i;
  57. for (i = settings->begin(); i != settings->end(); ++i)
  58. {
  59. effect.data.name = i->second;
  60. effect.data.tex_width = 256;
  61. effect.data.tex_height = 256;
  62. effect.offset = Ogre::StringConverter::parseInt(i->first);
  63. LOGGER->Log("Effect: " + i->second + ": " + i->first);
  64. effects_all.push_back(effect);
  65. }
  66. }
  67. }
  68. StageInfo stage;
  69. cf.load("export_stages.cfg");
  70. seci = cf.getSectionIterator();
  71. while (seci.hasMoreElements())
  72. {
  73. Ogre::String names = seci.peekNextKey();
  74. Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
  75. if (names == "")
  76. {
  77. Ogre::ConfigFile::SettingsMultiMap::iterator i;
  78. for (i = settings->begin(); i != settings->end(); ++i)
  79. {
  80. stage.file_name = i->first;
  81. Ogre::StringVector name = Ogre::StringUtil::split(i->second, ":", 2);
  82. if (name.size() < 2)
  83. {
  84. LOGGER->Log("In '" + names + "' not enough names. Must be 2.\n");
  85. continue;
  86. }
  87. stage.data.name = name[0];
  88. Ogre::StringVector tex_size = Ogre::StringUtil::split(name[1], "x", 2);
  89. stage.data.tex_width = Ogre::StringConverter::parseInt(tex_size[0]);
  90. stage.data.tex_height = Ogre::StringConverter::parseInt(tex_size[1]);
  91. LOGGER->Log("Stage: " + i->first + ": " + i->second + "\n");
  92. stages_all.push_back(stage);
  93. }
  94. }
  95. }
  96. LOGGER->Log("Initialize export list finished.\n\n\n\n");
  97. }
  98. int
  99. main(int argc, char *argv[])
  100. {
  101. InitializeOgreBase( "FFVII Battle Model Exporter" );
  102. fill_names();
  103. for (int i = 0; i < models_all.size(); ++i)
  104. {
  105. EnemyFile model("data/" + models_all[i].file_name + ".LZS");
  106. //model.WriteFile(models_all[i].file_name + "_u.LZS");
  107. Ogre::Entity* exported_entity = model.GetModel(models_all[i]);
  108. if (exported_entity != NULL)
  109. {
  110. entitys.push_back(exported_entity);
  111. }
  112. }
  113. for (int i = 0; i < effects_all.size(); ++i)
  114. {
  115. RamEffectFile effect("data/ram.bin");
  116. Ogre::Entity* exported_entity = effect.GetModel(effects_all[i]);
  117. if (exported_entity != NULL)
  118. {
  119. entitys.push_back(exported_entity);
  120. }
  121. }
  122. for (int i = 0; i < stages_all.size(); ++i)
  123. {
  124. StageFile model("data/" + stages_all[i].file_name + ".LZS");
  125. //model.WriteFile(models_all[i].file_name + "_u.LZS");
  126. Ogre::Entity* exported_entity = model.GetModel(stages_all[i]);
  127. if (exported_entity != NULL)
  128. {
  129. entitys.push_back(exported_entity);
  130. }
  131. }
  132. entitys[ 0 ]->setVisible(true);
  133. Ogre::Root::getSingleton().startRendering();
  134. DeinitializeOgreBase();
  135. return 0;
  136. }