Rev 39 | Rev 191 | Go to most recent revision | 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 ( !m_pModels || m_pModels->Empty() ){// if no scene fileif ( m_pShipData->lTurrets.size() ){STurretEntry *t = m_pShipData->lTurrets[0];this->ComboCockpit->Items->Add("No Scene File Loaded!! (" + SystemStringFromCyString(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 ( SStringList *str = m_pModels->Head(); str; str = str->next ){String ^entry = SystemStringFromCyString(str->str) + ":" + Convert::ToString(i);this->ComboCockpit->Items->Add(entry);++i;}}this->UpdateTurrets();}void CustomiseTurret::UpdateDisplay(){if ( m_pModels && !m_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::String 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(";", 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(SystemStringFromCyString(m_pShipData->cockpits[t->iTurret - 1].sCockpit));item->SubItems->Add(this->GetPosition(m_pShipData->cockpits[t->iTurret - 1].iPos));item->SubItems->Add(SystemStringFromCyString(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 ( CyStringFromSystemString(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(_S(ComboCockpitCustom->Text));if ( m_pCurrentCockpit ){this->TextCockpitScene->Text = SystemStringFromCyString(m_pCurrentCockpit->sCockpit.token(";", 8));this->UpdateCockpitWeaponsList();}}void CustomiseTurret::UpdateCockpitWeaponsList(){this->ListWeaponCockpit->Items->Clear();if ( !m_pCurrentCockpit )return;bool oldUpdate = m_bUpdateing;m_bUpdateing = true;bool added = false;CyStringList 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(";", 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::String, Utils::String> laser = gameDir->firstLaser(); !laser.first.empty(); laser = gameDir->nextLaser() ) {Utils::String group = laser.first.token(";", 6);SStringList *found = List.FindString(group);if ( found ) {found->data += ", ";found->data += laser.second;}elseList.PushBack(CyString(group), CyString(laser.second));}gameDir->reselectTemporaryDirectory();}for ( int i = 0; i < 32; i++ ){if ( List.Count() > i ){ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(List.GetAt(i)->str));item->SubItems->Add(SystemStringFromCyString(List.GetAt(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 ( !m_pModels ) return nullptr;InputBox ^input = gcnew InputBox("Select the model entry to use for the cockpit (Turret: " + Convert::ToString(id) + ")");int i = 0;for ( SStringList *str = m_pModels->Head(); str; str = str->next ){input->AddItem(SystemStringFromCyString(str->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 = CyStringFromSystemString(str).GetToken(":", 1, 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(";", 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);}}}};