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;
}
}