Subversion Repositories spk

Rev

Rev 1 | 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
 
13
	void CustomiseWeapons::UpdateWeaponsList()
14
	{
15
		m_bUpdating = true;
16
 
17
		this->ListWeapons->Items->Clear();
18
		bool added = false;
19
 
20
		CyStringList List;
21
		CyStringList *list = NULL;
22
		int idPos = 23;
23
 
24
		int mask = 0;
25
 
26
		if ( this->ComboGameLaser->SelectedIndex > 0 )
27
		{
28
			this->CheckWeaponDefault->Visible = true;
29
			this->ButCopyDefault->Visible = true;
30
			if ( this->RadioMissiles->Checked )
31
			{
32
				list = ((CustomiseShip ^)m_pParent)->GetMissiles(this->ComboGameLaser->SelectedIndex);
33
				idPos = 37;
34
			}
35
			else
36
				list = ((CustomiseShip ^)m_pParent)->GetLasers(this->ComboGameLaser->SelectedIndex);
37
 
38
			for ( SWeaponMasks *m = m_pWeapons->First(); m; m = m_pWeapons->Next() )
39
			{
40
				if ( m->iGame == this->ComboGameLaser->SelectedIndex )
41
				{
42
					if ( this->RadioMissiles->Checked )
43
						mask = m->iMissileMask;
44
					else
45
						mask = m->iLaserMask;
46
					break;
47
				}
48
			}
49
			this->CheckWeaponDefault->Checked = (mask == -1) ? true : false;
50
		}
51
		else
52
		{
53
			this->ButCopyDefault->Visible = false;
54
			this->CheckWeaponDefault->Visible = false;
55
			this->CheckWeaponDefault->Checked = false;
56
			if ( this->RadioMissiles->Checked )
57
				mask = m_pShipData->iMissileMask;
58
			else
59
				mask = m_pShipData->iLaserMask;
60
		}
61
 
62
		if ( mask == -1 ) mask = 0;
63
 
64
		if ( list )
65
		{
66
			for ( SStringList *strNode = list->Head(); strNode; strNode = strNode->next )
67
			{
68
				CyString id = strNode->str.GetToken(";", 6, 6);
69
				SStringList *found = List.FindString(id);
70
				CyString str = (strNode->data.Empty()) ? strNode->str.GetToken(";", idPos, idPos) : strNode->data;
71
				if ( found )
72
				{
73
					found->data += ", ";
74
					found->data += str;
75
				}
76
				else
77
					List.PushBack(id, str);
78
			}
79
		}
80
 
81
		for ( int i = 0; i < 32; i++ )
82
		{
83
			if ( List.Count() > i )
84
			{
85
				ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(List.GetAt(i)->str));
86
				item->SubItems->Add(SystemStringFromCyString(List.GetAt(i)->data));
87
				this->ListWeapons->Items->Add(item);
88
				if ( this->RadioMissiles->Checked )
89
				{
90
					if ( List.GetAt(i)->str.IsNumber() )
91
						item->Tag = List.GetAt(i)->str.ToInt();
92
					else
93
						item->Tag = CShipData::ConvertMissileGroupToID(List.GetAt(i)->str);
94
				}
95
				else
96
					item->Tag = i;
97
 
98
				int flag = (1 << Convert::ToInt32(item->Tag));
99
				if ( mask & flag )
100
					item->Checked = true;
101
				added = true;
102
			}
103
 
104
			if ( !added )
105
			{
106
				ListViewItem ^added;
107
				if ( this->RadioMissiles->Checked )
108
					added = this->ListWeapons->Items->Add("MISSILEGROUP_" + Convert::ToString(i + 1));
109
				else
110
					added = this->ListWeapons->Items->Add("LASERGROUP_" + Convert::ToString(i + 1));
111
				added->Tag = i;
112
				if ( mask & (1 << i) )
113
					added->Checked = true;
114
			}
115
		}
116
 
117
		this->ListWeapons->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
118
 
119
		m_bUpdating = false;
120
	}
121
 
122
	void CustomiseWeapons::SaveWeaponsList()
123
	{
124
		if ( m_bUpdating )
125
			return;
126
 
127
		// compute the mask
128
		int mask = 0;
129
		for ( int i = 0; i < this->ListWeapons->Items->Count; i++ )
130
		{
131
			ListViewItem ^item = this->ListWeapons->Items[i];
132
			if ( !item->Checked )
133
				continue;
134
			mask += (1 << Convert::ToInt32(item->Tag));
135
		}
136
 
137
		// edit the default lasers
138
		if ( !this->ComboGameLaser->SelectedIndex )
139
		{
140
			if ( this->RadioMissiles->Checked )
141
				m_pShipData->iMissileMask = mask;
142
			else
143
				m_pShipData->iLaserMask = mask;
144
		}
145
		// otherwise adjust for the game
146
		else
147
		{
148
			for ( SWeaponMasks *m = m_pWeapons->First(); m; m = m_pWeapons->Next() )
149
			{
150
				if ( m->iGame == this->ComboGameLaser->SelectedIndex )
151
				{
152
					if ( this->RadioMissiles->Checked )
153
						m->iMissileMask = mask;
154
					else
155
						m->iLaserMask = mask;
156
					break;
157
				}
158
			}
159
		}
160
	}
161
};