Subversion Repositories spk

Rev

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