Subversion Repositories spk

Rev

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;
                                }
                        }
                }
        }
};