RamEffectFile.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <Ogre.h>
  2. #include "RamEffectFile.h"
  3. #include "../../common/Logger.h"
  4. #include "../../common/OgreGenUtilites.h"
  5. RamEffectFile::RamEffectFile(const Ogre::String& file):
  6. File(file)
  7. {
  8. }
  9. RamEffectFile::RamEffectFile(File* pFile):
  10. File(pFile)
  11. {
  12. }
  13. RamEffectFile::RamEffectFile(File* pFile, u32 offset, u32 length):
  14. File(pFile, offset, length)
  15. {
  16. }
  17. RamEffectFile::RamEffectFile(u8* pBuffer, u32 offset, u32 length):
  18. File(pBuffer, offset, length)
  19. {
  20. }
  21. RamEffectFile::~RamEffectFile()
  22. {
  23. }
  24. Ogre::Entity*
  25. RamEffectFile::GetModel(const EffectInfo info)
  26. {
  27. VectorTexForGen textures;
  28. Ogre::MeshPtr mesh = Ogre::MeshManager::getSingleton().create(info.data.name + "export", "General");
  29. int offset_to_models_description = GetU32LE(info.offset) - 0x80000000; // there is additional info in offset + 4 and so on (described in function funcd29d4)
  30. int offset_to_vertex = offset_to_models_description;
  31. MeshExtractor(info.data, "ffvii/battle_effect/" + info.data.name, this, offset_to_vertex, textures, mesh, info.data.name);
  32. // Update bounds
  33. Ogre::AxisAlignedBox aabb(-999, -999, -999, 999, 999, 999);
  34. mesh->_setBounds(aabb, false);
  35. mesh->_setBoundingSphereRadius(999);
  36. Ogre::MeshSerializer ser;
  37. ser.exportMesh(mesh.getPointer(), "exported/models/ffvii/battle/effects/" + info.data.name + ".mesh");
  38. // create and export textures for model
  39. if (textures.size() > 0)
  40. {
  41. Vram* vram = Vram::MakeInstance().release();
  42. CreateTexture(vram, info.data, "exported/models/ffvii/battle/effects/" + info.data.name + ".png", textures);
  43. delete vram;
  44. }
  45. CreateMaterial("ffvii/battle_effect/" + info.data.name, "exported/models/ffvii/battle/effects/" + info.data.name + ".material", (textures.size() > 0) ? "models/ffvii/battle/effects/" + info.data.name + ".png" : "", "", "");
  46. Ogre::SceneManager* scene_manager = Ogre::Root::getSingleton().getSceneManager( "Scene" );
  47. Ogre::Entity* thisEntity = scene_manager->createEntity( info.data.name, "models/ffvii/battle/effects/" + info.data.name + ".mesh" );
  48. thisEntity->setVisible(true);
  49. Ogre::SceneNode* thisSceneNode = scene_manager->getRootSceneNode()->createChildSceneNode();
  50. thisSceneNode->setPosition(0, 0, 0);
  51. thisSceneNode->roll(Ogre::Radian(Ogre::Degree(180.0f)));
  52. thisSceneNode->yaw(Ogre::Radian(Ogre::Degree(120.0f)));
  53. thisSceneNode->pitch(Ogre::Radian(Ogre::Degree(90.0f)));
  54. thisSceneNode->attachObject(thisEntity);
  55. return thisEntity;
  56. }