Jelajahi Sumber

Merge pull request #78 from paulsapps/installer

Installer update for walkmesh
paulsapps 11 tahun lalu
induk
melakukan
33e2ba3040

+ 6 - 6
QGearsMain/include/data/QGearsBackgroundFile.h

@@ -109,9 +109,9 @@ namespace QGears
             Colors colors;
             Colors colors;
         };
         };
 
 
-        virtual Layer* getLayers ( void ) { return m_layers;  }
-        virtual uint8* getPalette( void ) { return m_palette; }
-        virtual Page*  getPages  ( void ) { return m_pages;   }
+        std::array<Layer, LAYER_COUNT>& getLayers(void) { return m_layers; }
+        std::array<uint8, PALETTE_ENTRY_COUNT>& getPalette(void) { return m_palette; }
+        std::array<Page, PAGE_COUNT>&  getPages(void) { return m_pages; }
 
 
         virtual Ogre::Image*        createImage     ( const PaletteFilePtr &palette ) const;
         virtual Ogre::Image*        createImage     ( const PaletteFilePtr &palette ) const;
 
 
@@ -125,10 +125,10 @@ namespace QGears
         virtual size_t calculateSize( const Page  &page  ) const;
         virtual size_t calculateSize( const Page  &page  ) const;
 
 
     private:
     private:
-        Layer m_layers [ LAYER_COUNT ];
-        uint8 m_palette[ PALETTE_ENTRY_COUNT ];
+        std::array<Layer, LAYER_COUNT> m_layers;
+        std::array<uint8, PALETTE_ENTRY_COUNT> m_palette;
 
 
-        Page m_pages[ PAGE_COUNT ];
+        std::array<Page, PAGE_COUNT> m_pages;
     };
     };
 
 
     typedef Ogre::SharedPtr<BackgroundFile> BackgroundFilePtr;
     typedef Ogre::SharedPtr<BackgroundFile> BackgroundFilePtr;

+ 10 - 2
QGearsMain/src/data/QGearsBackgroundFile.cpp

@@ -64,8 +64,16 @@ namespace QGears
     void
     void
     BackgroundFile::unloadImpl()
     BackgroundFile::unloadImpl()
     {
     {
-        memset( m_layers , 0, sizeof( m_layers  ) );
-        memset( m_palette, 0, sizeof( m_palette ) );
+        for (auto& layer : m_layers)
+        {
+            memset(&layer, 0, sizeof(layer));
+        }
+
+        for (auto& pal : m_palette)
+        {
+            memset(&pal, 0, sizeof(pal));
+        }
+
         for( size_t i(PAGE_COUNT); i--; )
         for( size_t i(PAGE_COUNT); i--; )
         {
         {
             m_pages[i].enabled = false;
             m_pages[i].enabled = false;

+ 7 - 8
QGearsMain/src/data/QGearsBackgroundFileSerializer.cpp

@@ -106,7 +106,7 @@ namespace QGears
                                           ,BackgroundFile *pDest )
                                           ,BackgroundFile *pDest )
     {
     {
         readSectionHeader( stream, SECTION_NAME_PALETTE );
         readSectionHeader( stream, SECTION_NAME_PALETTE );
-        stream->read( pDest->getPalette(), BackgroundFile::PALETTE_ENTRY_COUNT );
+        stream->read( pDest->getPalette().data(), BackgroundFile::PALETTE_ENTRY_COUNT );
     }
     }
 
 
     //---------------------------------------------------------------------
     //---------------------------------------------------------------------
@@ -115,15 +115,15 @@ namespace QGears
                                              ,BackgroundFile *pDest )
                                              ,BackgroundFile *pDest )
     {
     {
         readSectionHeader( stream, SECTION_NAME_BACK );
         readSectionHeader( stream, SECTION_NAME_BACK );
-        Layer *layer( pDest->getLayers() );
-        for( size_t i( 0 ); i < BackgroundFile::LAYER_COUNT; ++i, ++layer )
+        auto& layers( pDest->getLayers() );
+        for( size_t i( 0 ); i < BackgroundFile::LAYER_COUNT; ++i )
         {
         {
             if( i != 0 )
             if( i != 0 )
             {
             {
-                read1ByteBool( stream, layer->enabled );
+                read1ByteBool( stream, layers[i].enabled );
             }
             }
 
 
-            readLayer( stream, layer, i );
+            readLayer(stream, &layers[i], i);
         }
         }
     }
     }
 
 
@@ -192,10 +192,9 @@ namespace QGears
                                           ,BackgroundFile *pDest )
                                           ,BackgroundFile *pDest )
     {
     {
         readSectionHeader( stream, SECTION_NAME_TEXTURE );
         readSectionHeader( stream, SECTION_NAME_TEXTURE );
-        Page *pages( pDest->getPages() );
-        for( size_t i(0); i < BackgroundFile::PAGE_COUNT; ++i )
+        for (auto& page : pDest->getPages())
         {
         {
-            readObject( stream, pages[i] );
+            readObject(stream, page);
         }
         }
     }
     }
 
 

+ 39 - 8
utilities/q-gears-launcher/src/ff7DataInstaller.cpp

@@ -49,11 +49,11 @@ void FF7DataInstaller::Convert(std::string inputDir, std::string outputDir, cons
     {
     {
         if (file == "field/char.lgp")
         if (file == "field/char.lgp")
         {
         {
-            /*
+
             auto fullPath = inputDir + file;
             auto fullPath = inputDir + file;
             mApp.getRoot()->addResourceLocation(fullPath, "LGP", "FFVII");
             mApp.getRoot()->addResourceLocation(fullPath, "LGP", "FFVII");
             ConvertFieldModels(fullPath, outputDir);
             ConvertFieldModels(fullPath, outputDir);
-            mApp.getRoot()->removeResourceLocation(fullPath, "FFVII");*/
+            mApp.getRoot()->removeResourceLocation(fullPath, "FFVII");
         }
         }
         else if (file == "field/flevel.lgp")
         else if (file == "field/flevel.lgp")
         {
         {
@@ -131,6 +131,42 @@ void FF7DataInstaller::ConvertFieldModels(std::string archive, std::string outDi
     */
     */
 }
 }
 
 
+static void FF7PcFieldToQGearsField(QGears::FLevelFilePtr& field, const std::string& outDir)
+{
+    // Save out the tiles as a PNG image
+    
+    const QGears::BackgroundFilePtr& bg = field->getBackground();
+    /*
+    const QGears::PaletteFilePtr& pal = field->getPalette();
+    std::unique_ptr<Ogre::Image> bgImage(bg->createImage(pal));
+    bgImage->save(outDir + "/" + field->getName() + ".png");
+    */
+    QGears::BackgroundFile::Layer& layer = bg->getLayers().at(0);
+    const QGears::CameraMatrixFilePtr& camMatrix = field->getCameraMatrix();
+
+    // TODO: Write out the *_BG.XML data
+
+
+    // Save out the walk mesh as XML
+    const QGears::WalkmeshFilePtr& walkmesh = field->getWalkmesh();
+
+    TiXmlDocument doc;
+    std::unique_ptr<TiXmlElement> element(new TiXmlElement("walkmesh"));
+    for (QGears::WalkmeshFile::Triangle& tri : walkmesh->getTriangles())
+    {
+        std::unique_ptr<TiXmlElement> xmlElement(new TiXmlElement("triangle"));
+        xmlElement->SetAttribute("a", Ogre::StringConverter::toString(tri.a));
+        xmlElement->SetAttribute("b", Ogre::StringConverter::toString(tri.b));
+        xmlElement->SetAttribute("c", Ogre::StringConverter::toString(tri.c));
+        xmlElement->SetAttribute("a_b", std::to_string(tri.access_side[0]));
+        xmlElement->SetAttribute("b_c", std::to_string(tri.access_side[1]));
+        xmlElement->SetAttribute("c_a", std::to_string(tri.access_side[2]));
+        element->LinkEndChild(xmlElement.release());
+    }
+    doc.LinkEndChild(element.release());
+    doc.SaveFile(outDir + "/" + field->getName() +  "_wm.xml");
+}
+
 void FF7DataInstaller::ConvertFields(std::string archive, std::string outDir)
 void FF7DataInstaller::ConvertFields(std::string archive, std::string outDir)
 {
 {
     // Everything in here is a field
     // Everything in here is a field
@@ -145,12 +181,7 @@ void FF7DataInstaller::ConvertFields(std::string archive, std::string outDir)
             //try
             //try
             {
             {
                 QGears::FLevelFilePtr field = QGears::LZSFLevelFileManager::getSingleton().load(resourceName, "FFVIIFields").staticCast<QGears::FLevelFile>();
                 QGears::FLevelFilePtr field = QGears::LZSFLevelFileManager::getSingleton().load(resourceName, "FFVIIFields").staticCast<QGears::FLevelFile>();
-
-                const QGears::BackgroundFilePtr& bg = field->getBackground();
-                const QGears::PaletteFilePtr& pal = field->getPalette();
-                Ogre::Image* bgImage = bg->createImage(pal);
-                bgImage->save(outDir + "/" + field->getName() + ".png");
-                delete bgImage;
+                FF7PcFieldToQGearsField(field, outDir);
             }
             }
             /*
             /*
             catch (const Ogre::Exception& ex)
             catch (const Ogre::Exception& ex)