Rev 197 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "../StdAfx.h"
#include "CustomiseWeapons.h"
namespace Creator {
void CustomiseWeapons::SetupControls()
{
this->Dock = System::Windows::Forms::DockStyle::Fill;
this->ComboGameLaser->Items->Clear();
this->ComboGameLaser->Items->Add("- Default -");
}
void _addToList(Utils::WStringList &list, std::pair<Utils::WString, Utils::WString> &pair, int idPos)
{
Utils::WString group = pair.first.token(L";", idPos);
if (list.contains(group))
{
Utils::WString data = list.findString(group);
list.changeData(group, data + L", " + pair.second);
}
else
list.pushBack(group, pair.second);
}
void CustomiseWeapons::UpdateWeaponsList()
{
m_bUpdating = true;
this->ListWeapons->Items->Clear();
bool added = false;
Utils::WStringList List;
int idPos = 23;
int mask = 0;
int defaultMask = 0;
CGameDirectories *gameDir = ((CustomiseShip ^)m_pParent)->gameDirectories();
if ( this->ComboGameLaser->SelectedIndex > 0 )
{
this->CheckWeaponDefault->Visible = true;
this->ButCopyDefault->Visible = true;
for ( SWeaponMasks *m = m_pWeapons->First(); m; m = m_pWeapons->Next() )
{
if ( m->iGame == this->ComboGameLaser->SelectedIndex )
{
if ( this->RadioMissiles->Checked )
mask = m->iMissileMask;
else
mask = m->iLaserMask;
break;
}
}
this->CheckWeaponDefault->Checked = (mask == -1) ? true : false;
}
else
{
this->ButCopyDefault->Visible = false;
this->CheckWeaponDefault->Visible = false;
this->CheckWeaponDefault->Checked = false;
if ( this->RadioMissiles->Checked )
mask = m_pShipData->iMissileMask;
else
mask = m_pShipData->iLaserMask;
}
if ( this->RadioMissiles->Checked )
defaultMask = m_pShipData->iMissileMask;
else
defaultMask = m_pShipData->iLaserMask;
if ( defaultMask == -1 ) defaultMask = 0;
if ( mask == -1 ) mask = 0;
if ( this->ComboGameLaser->SelectedIndex > 0 ) {
gameDir->setSelectedGameDirectory(this->ComboGameLaser->SelectedIndex, true);
if ( gameDir->selectedVFS() )
((CustomiseShip ^)m_pParent)->LoadText(gameDir->selectedVFS());
}
if ( !this->RadioMissiles->Checked ) {
for ( std::pair<Utils::WString, Utils::WString> laser = gameDir->firstLaser(); !laser.first.empty(); laser = gameDir->nextLaser() ) {
_addToList(List, laser, 6);
}
}
else {
for ( std::pair<Utils::WString, Utils::WString> missile = gameDir->firstMissile(); !missile.first.empty(); missile = gameDir->nextMissile() ) {
_addToList(List, missile, 6);
}
}
if ( this->ComboGameLaser->SelectedIndex > 0 )
gameDir->reselectTemporaryDirectory();
if ( this->ComboGameLaser->SelectedIndex > 0 && this->CheckWeaponDefault->Checked )
mask = defaultMask;
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->ListWeapons->Items->Add(item);
if ( this->RadioMissiles->Checked )
{
if ( List[i]->str.isNumber())
item->Tag = List[i]->str.toInt();
else
item->Tag = CShipData::ConvertMissileGroupToID(List[i]->str);
}
else
item->Tag = i;
int flag = (1 << Convert::ToInt32(item->Tag));
if ( mask & flag )
item->Checked = true;
added = true;
}
if ( !added )
{
ListViewItem ^added;
if ( this->RadioMissiles->Checked )
added = this->ListWeapons->Items->Add("MISSILEGROUP_" + Convert::ToString(i + 1));
else
added = this->ListWeapons->Items->Add("LASERGROUP_" + Convert::ToString(i + 1));
added->Tag = i;
if ( mask & (1 << i) )
added->Checked = true;
}
}
this->ListWeapons->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
m_bUpdating = false;
}
void CustomiseWeapons::SaveWeaponsList()
{
if ( m_bUpdating )
return;
// compute the mask
int mask = 0;
for ( int i = 0; i < this->ListWeapons->Items->Count; i++ )
{
ListViewItem ^item = this->ListWeapons->Items[i];
if ( !item->Checked )
continue;
mask += (1 << Convert::ToInt32(item->Tag));
}
// edit the default lasers
if ( !this->ComboGameLaser->SelectedIndex )
{
if ( this->RadioMissiles->Checked )
m_pShipData->iMissileMask = mask;
else
m_pShipData->iLaserMask = mask;
}
// otherwise adjust for the game
else
{
for ( SWeaponMasks *m = m_pWeapons->First(); m; m = m_pWeapons->Next() )
{
if ( m->iGame == this->ComboGameLaser->SelectedIndex )
{
if ( this->RadioMissiles->Checked )
m->iMissileMask = mask;
else
m->iLaserMask = mask;
break;
}
}
}
}
};