Subversion Repositories spk

Rev

Rev 197 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#include "../StdAfx.h"
2
#include "CustomiseWeapons.h"
3
 
4
namespace Creator {
5
	void CustomiseWeapons::SetupControls()
6
	{
7
		this->Dock = System::Windows::Forms::DockStyle::Fill;
8
 
9
		this->ComboGameLaser->Items->Clear();
10
		this->ComboGameLaser->Items->Add("- Default -");
11
	}
12
 
216 cycrow 13
	void _addToList(Utils::WStringList &list, std::pair<Utils::WString, Utils::WString> &pair, int idPos)
94 cycrow 14
	{
197 cycrow 15
		Utils::WString group = pair.first.token(L";", idPos);
216 cycrow 16
		if (list.contains(group))
17
		{
18
			Utils::WString data = list.findString(group);
19
			list.changeData(group, data + L", " + pair.second);
94 cycrow 20
		}
21
		else
216 cycrow 22
			list.pushBack(group, pair.second);
94 cycrow 23
	}
24
 
1 cycrow 25
	void CustomiseWeapons::UpdateWeaponsList()
26
	{
27
		m_bUpdating = true;
28
 
29
		this->ListWeapons->Items->Clear();
30
		bool added = false;
31
 
216 cycrow 32
		Utils::WStringList List;
1 cycrow 33
		int idPos = 23;
34
 
35
		int mask = 0;
103 cycrow 36
		int defaultMask = 0;
1 cycrow 37
 
94 cycrow 38
		CGameDirectories *gameDir = ((CustomiseShip ^)m_pParent)->gameDirectories();
39
 
1 cycrow 40
		if ( this->ComboGameLaser->SelectedIndex > 0 )
41
		{
42
			this->CheckWeaponDefault->Visible = true;
43
			this->ButCopyDefault->Visible = true;
44
 
45
			for ( SWeaponMasks *m = m_pWeapons->First(); m; m = m_pWeapons->Next() )
46
			{
47
				if ( m->iGame == this->ComboGameLaser->SelectedIndex )
48
				{
49
					if ( this->RadioMissiles->Checked )
50
						mask = m->iMissileMask;
51
					else
52
						mask = m->iLaserMask;
53
					break;
54
				}
55
			}
56
			this->CheckWeaponDefault->Checked = (mask == -1) ? true : false;
57
		}
58
		else
59
		{
60
			this->ButCopyDefault->Visible = false;
61
			this->CheckWeaponDefault->Visible = false;
62
			this->CheckWeaponDefault->Checked = false;
63
			if ( this->RadioMissiles->Checked )
64
				mask = m_pShipData->iMissileMask;
65
			else
66
				mask = m_pShipData->iLaserMask;
67
		}
68
 
103 cycrow 69
		if ( this->RadioMissiles->Checked )
70
			defaultMask = m_pShipData->iMissileMask;
71
		else
72
			defaultMask = m_pShipData->iLaserMask;
73
 
74
		if ( defaultMask == -1 ) defaultMask = 0;
1 cycrow 75
		if ( mask == -1 ) mask = 0;
76
 
103 cycrow 77
		if ( this->ComboGameLaser->SelectedIndex > 0 ) {
94 cycrow 78
			gameDir->setSelectedGameDirectory(this->ComboGameLaser->SelectedIndex, true);
103 cycrow 79
			if ( gameDir->selectedVFS() ) 
80
				((CustomiseShip ^)m_pParent)->LoadText(gameDir->selectedVFS());
81
		}
82
 
83
		if ( !this->RadioMissiles->Checked ) {
197 cycrow 84
			for ( std::pair<Utils::WString, Utils::WString> laser = gameDir->firstLaser(); !laser.first.empty(); laser = gameDir->nextLaser() ) {
216 cycrow 85
				_addToList(List, laser, 6);
1 cycrow 86
			}
103 cycrow 87
		}
88
		else {
197 cycrow 89
			for ( std::pair<Utils::WString, Utils::WString> missile = gameDir->firstMissile(); !missile.first.empty(); missile = gameDir->nextMissile() ) {
216 cycrow 90
				_addToList(List, missile, 6);
94 cycrow 91
			}
103 cycrow 92
		}
93
		if ( this->ComboGameLaser->SelectedIndex > 0 )
94 cycrow 94
			gameDir->reselectTemporaryDirectory();
1 cycrow 95
 
103 cycrow 96
		if ( this->ComboGameLaser->SelectedIndex > 0 && this->CheckWeaponDefault->Checked )
97
			mask = defaultMask;
98
 
216 cycrow 99
		for (size_t i = 0; i < 32; i++ )
1 cycrow 100
		{
216 cycrow 101
			if ( List.size() > i )
1 cycrow 102
			{
216 cycrow 103
				ListViewItem ^item = gcnew ListViewItem(_US(List[i]->str));
104
				item->SubItems->Add(_US(List[i]->data));
1 cycrow 105
				this->ListWeapons->Items->Add(item);
106
				if ( this->RadioMissiles->Checked )
107
				{
216 cycrow 108
					if ( List[i]->str.isNumber())
109
						item->Tag = List[i]->str.toInt();
1 cycrow 110
					else
216 cycrow 111
						item->Tag = CShipData::ConvertMissileGroupToID(List[i]->str);
1 cycrow 112
				}
113
				else
114
					item->Tag = i;
115
 
116
				int flag = (1 << Convert::ToInt32(item->Tag));
103 cycrow 117
 
1 cycrow 118
				if ( mask & flag )
119
					item->Checked = true;
120
				added = true;
121
			}
122
 
123
			if ( !added )
124
			{
125
				ListViewItem ^added;
126
				if ( this->RadioMissiles->Checked )
127
					added = this->ListWeapons->Items->Add("MISSILEGROUP_" + Convert::ToString(i + 1));
128
				else
129
					added = this->ListWeapons->Items->Add("LASERGROUP_" + Convert::ToString(i + 1));
130
				added->Tag = i;
131
				if ( mask & (1 << i) )
132
					added->Checked = true;
133
			}
134
		}
135
 
136
		this->ListWeapons->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
137
 
138
		m_bUpdating = false;
139
	}
140
 
141
	void CustomiseWeapons::SaveWeaponsList()
142
	{
143
		if ( m_bUpdating )
144
			return;
145
 
146
		// compute the mask
147
		int mask = 0;
148
		for ( int i = 0; i < this->ListWeapons->Items->Count; i++ )
149
		{
150
			ListViewItem ^item = this->ListWeapons->Items[i];
151
			if ( !item->Checked )
152
				continue;
153
			mask += (1 << Convert::ToInt32(item->Tag));
154
		}
155
 
156
		// edit the default lasers
157
		if ( !this->ComboGameLaser->SelectedIndex )
158
		{
159
			if ( this->RadioMissiles->Checked )
160
				m_pShipData->iMissileMask = mask;
161
			else
162
				m_pShipData->iLaserMask = mask;
163
		}
164
		// otherwise adjust for the game
165
		else
166
		{
167
			for ( SWeaponMasks *m = m_pWeapons->First(); m; m = m_pWeapons->Next() )
168
			{
169
				if ( m->iGame == this->ComboGameLaser->SelectedIndex )
170
				{
171
					if ( this->RadioMissiles->Checked )
172
						m->iMissileMask = mask;
173
					else
174
						m->iLaserMask = mask;
175
					break;
176
				}
177
			}
178
		}
179
	}
180
};