Rev 216 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "../StdAfx.h"#include "CustomiseTurret.h"#include "CustomiseShip.h"namespace Creator {String ^CustomiseTurret::GetPosition(int dir){return ((CustomiseShip ^)m_pParent)->GetPosition(dir);}void CustomiseTurret::SetupControlsEnd(){this->ComboGameCockpit->SelectedIndex = 0;}void CustomiseTurret::SetupControls(){// fill to tabthis->PanelCockpit->Enabled = false;this->Dock = System::Windows::Forms::DockStyle::Fill;// adjust the game listthis->ComboGameCockpit->Items->Clear();this->ComboGameCockpit->Items->Add("- Default -");// cockpit combo selectionthis->ComboCockpit->Items->Clear();if (!_pModels || _pModels->empty()){// if no scene fileif ( m_pShipData->lTurrets.size() ){STurretEntry *t = m_pShipData->lTurrets[0];this->ComboCockpit->Items->Add("No Scene File Loaded!! (" + _US(t->sModel) + ":" + Convert::ToString(t->iTurret) + ")");}elsethis->ComboCockpit->Items->Add("No Scene File Loaded!!");this->ComboCockpit->Enabled = false;this->ComboCockpit->SelectedIndex = 0;}// otherwise, fill in the dataelse{this->ComboCockpit->Enabled = true;int i = 0;for(auto itr = _pModels->begin(); itr != _pModels->end(); itr++){String ^entry = _US((*itr)->str) + ":" + Convert::ToString(i);this->ComboCockpit->Items->Add(entry);++i;}}this->UpdateTurrets();}void CustomiseTurret::UpdateDisplay(){if (_pModels && !_pModels->empty())this->ComboCockpit->SelectedIndex = m_pShipData->lTurrets.Get(0)->iSceneNode;}void CustomiseTurret::UpdateCockpits(){this->ComboCockpitStd->Items->Clear();CGameDirectories *gameDir = ((CustomiseShip ^)m_pParent)->gameDirectories();for(Utils::WString cockpit = gameDir->firstCockpit(); !cockpit.empty(); cockpit = gameDir->nextCockpit()) {this->ComboCockpitStd->Items->Add(_US(cockpit));}this->ComboCockpitCustom->Items->Clear();for ( SCockpit *c = m_pShipFile->GetCockpits()->First(); c; c = m_pShipFile->GetCockpits()->Next() )this->ComboCockpitCustom->Items->Add(_US(c->sCockpit.token(L";", 19)));}void CustomiseTurret::UpdateTurrets(){this->ListTurret->Items->Clear();int i = 0;for ( STurretEntry *t = m_pShipData->lTurrets.First(); t; t = m_pShipData->lTurrets.Next() ){if ( t == m_pShipData->lTurrets.Front()->Data() ) continue; // skip the first entry (its the cockpit not a turretListViewItem ^item = this->ListTurret->Items->Add(gcnew ListViewItem(Convert::ToString(t->iIndex - 1)));if (m_pShipData->cockpits[t->iTurret - 1].sCockpit.empty())item->SubItems->Add(Convert::ToString(m_pShipData->cockpits[t->iTurret - 1].iCockpit));elseitem->SubItems->Add(_US(m_pShipData->cockpits[t->iTurret - 1].sCockpit));item->SubItems->Add(this->GetPosition(m_pShipData->cockpits[t->iTurret - 1].iPos));item->SubItems->Add(_US(t->sModel) + ":" + Convert::ToString(t->iSceneNode));item->ImageKey = "turret";++i;item->Tag = i;}this->ListTurret->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);this->UpdateCockpitDisplay();((CustomiseShip ^)m_pParent)->UpdateGunTurrets();}void CustomiseTurret::UpdateCockpitDisplay(){this->RadioCockpitCustom->Enabled = (this->ComboCockpitCustom->Items->Count) ? true : false;this->GroupCockpit->Enabled = (this->ListTurret->SelectedItems->Count) ? true : false;if ( this->ListTurret->SelectedItems->Count ){ListViewItem ^item = this->ListTurret->SelectedItems[0];if ( _WS(item->SubItems[1]->Text).isNumber() && Convert::ToInt32(item->SubItems[1]->Text) < this->ComboCockpitStd->Items->Count ){this->RadioCockpitStd->Checked = true;this->ComboCockpitStd->SelectedIndex = Convert::ToInt32(item->SubItems[1]->Text);}else{this->RadioCockpitCustom->Checked = true;this->ComboCockpitCustom->Text = item->SubItems[1]->Text;this->UpdateCockpitDisplay2();}}else{this->ComboCockpitStd->SelectedIndex = -1;}}void CustomiseTurret::UpdateCockpitDisplay2(){m_pCurrentCockpit = m_pShipFile->findCockpit(_WS(ComboCockpitCustom->Text));if ( m_pCurrentCockpit ){this->TextCockpitScene->Text = _US(m_pCurrentCockpit->sCockpit.token(L";", 8));this->UpdateCockpitWeaponsList();}}void CustomiseTurret::UpdateCockpitWeaponsList(){this->ListWeaponCockpit->Items->Clear();if ( !m_pCurrentCockpit )return;bool oldUpdate = m_bUpdateing;m_bUpdateing = true;bool added = false;Utils::WStringList List;int mask = -1;if ( this->ComboGameCockpit->SelectedIndex > 0 ){this->CheckWeaponDefaultCockpit->Visible = true;for ( SWeaponMask *m = m_pCurrentCockpit->lWeaponMask.First(); m; m = m_pCurrentCockpit->lWeaponMask.Next() ){if ( m->iGame == this->ComboGameCockpit->SelectedIndex ){mask = m->iMask;break;}}this->CheckWeaponDefaultCockpit->Checked = (mask == -1) ? true : false;}else{mask = m_pCurrentCockpit->sCockpit.token(L";", 9);this->CheckWeaponDefaultCockpit->Visible = false;this->CheckWeaponDefaultCockpit->Checked = false;}if ( mask == -1 ) mask = 0;if ( this->ComboGameCockpit->SelectedIndex > 0 ){CGameDirectories *gameDir = ((CustomiseShip ^)m_pParent)->gameDirectories();gameDir->setSelectedGameDirectory(this->ComboGameCockpit->SelectedIndex, true);for ( std::pair<Utils::WString, Utils::WString> laser = gameDir->firstLaser(); !laser.first.empty(); laser = gameDir->nextLaser() ) {Utils::WString group = laser.first.token(L";", 6);Utils::WStringNode *found = List[group];if ( found ) {found->data += L", ";found->data += laser.second;}elseList.pushBack(group, laser.second);}gameDir->reselectTemporaryDirectory();}for (size_t i = 0; i < 32; i++ ){if ( List.size() > i ){ListViewItem ^item = gcnew ListViewItem(_US(List[i]->str));item->SubItems->Add(_US(List[i]->data));this->ListWeaponCockpit->Items->Add(item);item->Tag = i;if ( mask & (1 << i) )item->Checked = true;added = true;}if ( !added ){ListViewItem ^added;added = this->ListWeaponCockpit->Items->Add("LASERGROUP_" + Convert::ToString(i + 1));added->Tag = i;if ( mask & (1 << i) )added->Checked = true;}}this->ListWeaponCockpit->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);m_bUpdateing = oldUpdate;}void CustomiseTurret::EditTurret(ListViewItem ^item){String ^str = this->EditTurret(Convert::ToInt32(item->Tag));if ( str )item->SubItems[3]->Text = str;}String ^CustomiseTurret::EditTurret(int id){if (!_pModels) return nullptr;InputBox ^input = gcnew InputBox("Select the model entry to use for the cockpit (Turret: " + Convert::ToString(id) + ")");int i = 0;for(auto itr = _pModels->begin(); itr != _pModels->end(); itr++){input->AddItem(_US((*itr)->str) + ":" + Convert::ToString(i));++i;}input->SetSelectedOption(m_pShipData->lTurrets.Get(id)->iSceneNode);if ( input->ShowDialog(this) == Windows::Forms::DialogResult::OK ){String ^str = input->GetInput();i = input->GetInputSelected();m_pShipData->lTurrets.Get(id)->iSceneNode = i;m_pShipData->lTurrets.Get(id)->sModel = _WS(str).token(L":", 1);return str;}return nullptr;}void CustomiseTurret::SaveCockpitWeaponsList(){if ( m_bUpdateing )return;if ( !m_pCurrentCockpit )return;// compute the maskint mask = 0;for ( int i = 0; i < this->ListWeaponCockpit->Items->Count; i++ ){ListViewItem ^item = this->ListWeaponCockpit->Items[i];if ( !item->Checked )continue;mask += (1 << Convert::ToInt32(item->Tag));}// edit the default lasersif ( !this->ComboGameCockpit->SelectedIndex )m_pCurrentCockpit->sCockpit = m_pCurrentCockpit->sCockpit.replaceToken(L";", 9, (long)mask);// otherwise adjust for the gameelse{bool found = false;for ( SWeaponMask *m = m_pCurrentCockpit->lWeaponMask.First(); m; m = m_pCurrentCockpit->lWeaponMask.Next() ){if ( m->iGame == this->ComboGameCockpit->SelectedIndex ){m->iMask = mask;found = true;break;}}if ( !found ){SWeaponMask *m = new SWeaponMask;m->iGame = this->ComboGameCockpit->SelectedIndex;m->iMask = mask;m_pCurrentCockpit->lWeaponMask.push_back(m);}}}};