Subversion Repositories spk

Rev

Rev 225 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "../StdAfx.h"
#include "ImportShip.h"

namespace Creator {
ImportShip::ImportShip(String ^id, String ^shipName, CVirtualFileSystem *pVfs)
{
        InitializeComponent();

        if ( shipName && shipName->Length )
                this->Text = this->Text + ": " + shipName + " (" + id + ")";
        else
                this->Text = this->Text + " (" + id + ")";

        this->button1->Visible = false;
        this->pictureBox1->Visible = false;
        this->pictureBox2->Visible = false;
        this->pictureBox3->Visible = false;
        this->pictureBox4->Visible = false;
        this->pictureBox5->Visible = false;
        this->pictureBox6->Visible = false;
        this->pictureBox7->Visible = false;
        this->pictureBox8->Visible = false;
        this->pictureBox9->Visible = false;
        this->pictureBox10->Visible = false;

        m_pVfs = pVfs;
        m_bError = false;
        m_sID = id;
        m_pShip = NULL;

        m_pInfo = new CProgressInfoDone;
        m_pInfo->UpdateStatus(IMPORTSHIP_NONE);
        _lModels = NULL;
        m_iStatus = IMPORTSHIP_SCENE;

        _sShipName = shipName;
}

void ImportShip::StartImport()
{
        m_pShip = new CXspFile();
        if ( _sShipName ) m_pShip->setName(_WS(_sShipName));
        m_bError = false;
        m_iStatus = IMPORTSHIP_SCENE;
        this->backgroundWorker1->RunWorkerAsync();
}

void ImportShip::Import()
{
        m_bError = false;
        if ( m_iStatus <= IMPORTSHIP_SCENE )
        {
                // make sure the id is correct
                Utils::WString data = _WS(m_sID);
                data.removeChar('\r');
                while(data.right(1) == L";")
                        data.truncate(-1);

                m_bError = !m_pShip->startExtractShip(m_pVfs, data, m_pInfo);
                if ( m_bError ) m_sError = "Unable to extract scene file";

                m_iStatus = IMPORTSHIP_EXTRACTSCENE;
        }
        else if ( m_iStatus == IMPORTSHIP_EXTRACTSCENE )
        {
                if(!m_pShip->readSceneModels(*_lModels) || _lModels->empty())
                {
                        m_bError = true;
                        m_sError = "Unable to read the scene file to extract model data";
                }
                ++m_iStatus;
        }
        else if ( m_iStatus == IMPORTSHIP_PACK )
        {
                m_pShip->PackAllFiles();
                m_iStatus = IMPORTSHIP_DONE;
        }
        else if ( m_iStatus > IMPORTSHIP_EXTRACTSCENE )
        {
                m_bError = !m_pShip->processSceneFileSection(m_iStatus, m_pVfs, *_lModels, m_pInfo);
                if ( m_bError ) m_sError = "Unable to process scene file (Status=" + (long)m_iStatus;
                ++m_iStatus;
        }
}

void ImportShip::_runNext()
{
         if ( m_bError )
         {
                 this->Close();
                 return;
         }

         if ( m_iStatus > IMPORTSHIP_SCENE )
                 this->pictureBox2->Visible = true;
         if ( m_iStatus > IMPORTSHIP_EXTRACTSCENE )
                 this->pictureBox1->Visible = true;
         if ( m_iStatus > IMPORTSHIP_DUMMIES )
                 this->pictureBox3->Visible = true;
         if ( m_iStatus > IMPORTSHIP_COMPONANT )
                 this->pictureBox4->Visible = true;
         if ( m_iStatus > IMPORTSHIP_MODELS )
                 this->pictureBox5->Visible = true;
         if ( m_iStatus > IMPORTSHIP_TEXTURES )
                 this->pictureBox6->Visible = true;
         if ( m_iStatus > IMPORTSHIP_TEXTS )
                 this->pictureBox7->Visible = true;
         if ( m_iStatus > IMPORTSHIP_BODIES )
                 this->pictureBox8->Visible = true;
         if ( m_iStatus > IMPORTSHIP_COCKPITS )
                 this->pictureBox9->Visible = true;
         if ( m_iStatus > IMPORTSHIP_PACK )
                 this->pictureBox10->Visible = true;

         if ( m_iStatus < IMPORTSHIP_DONE )
                 this->backgroundWorker1->RunWorkerAsync();
         else {
                 this->button1->Visible = true;
                 if ( _sShipName && _sShipName->Length ) m_pShip->setName(_WS(_sShipName));
         }
}

void ImportShip::_cleanUp()
{
        delete m_pInfo;
        if ( _lModels )
                delete _lModels;
}
}