Go to most recent revision | 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 CustomiseWeapons::UpdateWeaponsList()
{
m_bUpdating = true;
this->ListWeapons->Items->Clear();
bool added = false;
CyStringList List;
CyStringList *list = NULL;
int idPos = 23;
int mask = 0;
if ( this->ComboGameLaser->SelectedIndex > 0 )
{
this->CheckWeaponDefault->Visible = true;
this->ButCopyDefault->Visible = true;
if ( this->RadioMissiles->Checked )
{
list = ((CustomiseShip ^)m_pParent)->GetMissiles(this->ComboGameLaser->SelectedIndex);
idPos = 37;
}
else
list = ((CustomiseShip ^)m_pParent)->GetLasers(this->ComboGameLaser->SelectedIndex);
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 ( mask == -1 ) mask = 0;
if ( list )
{
for ( SStringList *strNode = list->Head(); strNode; strNode = strNode->next )
{
CyString id = strNode->str.GetToken(";", 6, 6);
SStringList *found = List.FindString(id);
CyString str = (strNode->data.Empty()) ? strNode->str.GetToken(";", idPos, idPos) : strNode->data;
if ( found )
{
found->data += ", ";
found->data += str;
}
else
List.PushBack(id, str);
}
}
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->ListWeapons->Items->Add(item);
if ( this->RadioMissiles->Checked )
{
if ( List.GetAt(i)->str.IsNumber() )
item->Tag = List.GetAt(i)->str.ToInt();
else
item->Tag = CShipData::ConvertMissileGroupToID(List.GetAt(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;
}
}
}
}
};