Rev 36 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "../StdAfx.h"
#include "ImportShip.h"
namespace Creator {
ImportShip::ImportShip(String ^id, CVirtualFileSystem *pVfs)
{
InitializeComponent();
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);
m_lModels = NULL;
m_iStatus = IMPORTSHIP_SCENE;
}
void ImportShip::StartImport()
{
m_pShip = new CXspFile();
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::String data = CyStringFromSystemString(m_sID).ToString();
data.removeChar('\r');
while(data.right(1) == ";")
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 )
{
m_lModels = m_pShip->ReadSceneModels();
if ( !m_lModels ) {
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, m_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;
}
void ImportShip::_cleanUp()
{
delete m_pInfo;
if ( m_lModels )
delete m_lModels;
}
}