1 #include "pagecreatures.h"
2 #include "dfcreatures.h"
3 #include <wx/wx.h>
4 #include <wx/listbook.h>
5 #include <wx/spinctrl.h>
6 #include "listadddel.h"
7 #include "common.h"
8
PageCreatures()9 PageCreatures::PageCreatures()
10 {
11 //ctor
12 pageHelp = "If you want an npc to have a random start point (as in most cases) set NPC Start to (-1,-1)";
13 invList = new ListAddDel;
14 spellList = new ListAddDel;
15 }
16
~PageCreatures()17 PageCreatures::~PageCreatures()
18 {
19 //dtor
20 delete invList;
21 delete spellList;
22 }
23
Init(wxNotebook * notebook,DF * dataFile)24 void PageCreatures::Init(wxNotebook *notebook, DF *dataFile)
25 {
26 dfCreatures = (DFCreatures*)dataFile;
27 this->dataFile = dataFile;
28 page = new wxNotebookPage(notebook, ID_CreaturesPage);
29
30 Creature *creature = dfCreatures->GetCurrent();
31
32 // name
33 new wxStaticText(page, -1, _("Name"), wxPoint(10,10));
34 nameEdit = new wxTextCtrl(page, -1, std2wx(creature->name), wxPoint(10,30), wxSize(200,25));
35
36 // portrait
37 new wxStaticText(page, -1, _("Portrait"), wxPoint(220,10));
38 portraitEdit = new wxTextCtrl(page, -1, std2wx(creature->portrait), wxPoint(220,30), wxSize(200,25));
39
40 // md2
41 new wxStaticText(page, -1, _("MD2 Dir"), wxPoint(430,10));
42 md2Edit = new wxTextCtrl(page, -1, std2wx(creature->md2), wxPoint(430,30), wxSize(200,25));
43
44 // skin
45 new wxStaticText(page, -1, _("Skin"), wxPoint(640,10));
46 skinEdit = new wxTextCtrl(page, -1, std2wx(creature->skin), wxPoint(640,30), wxSize(150,25));
47
48 // level
49 new wxStaticText(page, -1, _("Level"), wxPoint(10,70));
50 levelSpin = new wxSpinCtrl(page, -1, L"", wxPoint(10,90),wxSize(45,-1), wxSP_ARROW_KEYS, 1,100, atoi(creature->level.c_str()));
51
52 // hp
53 new wxStaticText(page, -1, _("HP"), wxPoint(70,70));
54 hpSpin = new wxSpinCtrl(page, -1, L"", wxPoint(70,90),wxSize(45,-1), wxSP_ARROW_KEYS, 1,100, atoi(creature->hp.c_str()));
55
56 // mp
57 new wxStaticText(page, -1, _("MP"), wxPoint(130,70));
58 mpSpin = new wxSpinCtrl(page, -1, L"", wxPoint(130,90),wxSize(45,-1), wxSP_ARROW_KEYS, 1,100, atoi(creature->mp.c_str()));
59
60 // armor
61 new wxStaticText(page, -1, _("Armor"), wxPoint(190,70));
62 armorSpin = new wxSpinCtrl(page, -1, L"", wxPoint(190,90),wxSize(45,-1), wxSP_ARROW_KEYS, 1,100, atoi(creature->armor.c_str()));
63
64 // rareness
65 new wxStaticText(page, -1, _("Rareness"), wxPoint(250,70));
66 rarenessSpin = new wxSpinCtrl(page, -1, L"", wxPoint(250,90),wxSize(45,-1), wxSP_ARROW_KEYS, 1,10, atoi(creature->rareness.c_str()));
67
68 // speed
69 new wxStaticText(page, -1, _("Speed"), wxPoint(310,70));
70 speedSpin = new wxSpinCtrl(page, -1, L"", wxPoint(310,90),wxSize(45,-1), wxSP_ARROW_KEYS, 1,10, atoi(creature->speed.c_str()));
71
72 // scale
73 new wxStaticText(page, -1, _("Scale"), wxPoint(370,70));
74 scaleEdit = new wxTextCtrl(page, -1, std2wx(creature->scale), wxPoint(370,90), wxSize(50,25));
75
76 // npc
77 new wxStaticText(page, -1, _("NPC"), wxPoint(430,70));
78 npcEdit = new wxTextCtrl(page, -1, std2wx(creature->npc), wxPoint(430,90), wxSize(50,25));
79
80 // npcStartX
81 new wxStaticText(page, -1, _("NPC Start (X,Y)"), wxPoint(495,70));
82 npcStartXSpin = new wxSpinCtrl(page, -1, L"", wxPoint(500,90),wxSize(45,-1), wxSP_ARROW_KEYS, -1,500, atoi(creature->npcStartX.c_str()));
83 npcStartYSpin = new wxSpinCtrl(page, -1, L"", wxPoint(550,90),wxSize(45,-1), wxSP_ARROW_KEYS, -1,500, atoi(creature->npcStartY.c_str()));
84
85 // backpack
86 invList->Init(page, L"Backpack", creature->backpack, 10,120, 150);
87 // spells
88 spellList->Init(page, L"Spells", creature->spells, 170,120, 170);
89
90 // skills
91 skillList = new wxListView(page, -1, wxPoint(350,140),wxSize(250,100), wxLC_REPORT|wxLC_EDIT_LABELS);
92 skillList->InsertColumn(0,L"Skill");
93 skillList->InsertColumn(1,L"");
94
95 std::map<std::string,std::string>::iterator itr = creature->skills.begin();
96 for ( int i = 0; itr != creature->skills.end(); itr++, i++ )
97 {
98 skillList->InsertItem(i,L"");
99 skillList->SetItem(i,0, std2wx(itr->first));
100 skillList->SetItem(i,1, std2wx(itr->second));
101 }
102 skillList->SetColumnWidth(0,-1);
103 skillList->SetColumnWidth(1,-1);
104
105 wxButton *addSkill = new wxButton(page, -1, L"Add/Edit", wxPoint(350,245), wxSize(70,-1));
106 addSkill->Connect( wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&PageCreatures::OnAddSkill, NULL, (wxEvtHandler*)this);
107 wxButton *delSkill = new wxButton(page, -1, L"Del", wxPoint(425,245), wxSize(50,-1));
108 delSkill->Connect( wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&PageCreatures::OnDelSkill, NULL, (wxEvtHandler*)this);
109
110 notebook->AddPage(page, _("Creatures"));
111 }
112
UpdatePage()113 void PageCreatures::UpdatePage()
114 {
115 }
116
GetCurrent()117 void PageCreatures::GetCurrent()
118 {
119 Creature *creature = dfCreatures->GetCurrent();
120
121 nameEdit->SetValue(std2wx(creature->name));
122 portraitEdit->SetValue(std2wx(creature->portrait));
123 md2Edit->SetValue(std2wx(creature->md2));
124 skinEdit->SetValue(std2wx(creature->skin));
125 levelSpin->SetValue( atoi(creature->level.c_str()) );
126 hpSpin->SetValue( atoi(creature->hp.c_str()) );
127 mpSpin->SetValue( atoi(creature->mp.c_str()) );
128 armorSpin->SetValue( atoi(creature->armor.c_str()) );
129 rarenessSpin->SetValue( atoi(creature->rareness.c_str()) );
130 speedSpin->SetValue( atoi(creature->speed.c_str()) );
131 scaleEdit->SetValue(std2wx(creature->scale));
132 npcEdit->SetValue(std2wx(creature->npc));
133 npcStartXSpin->SetValue( atoi(creature->npcStartX.c_str()) );
134 npcStartYSpin->SetValue( atoi(creature->npcStartY.c_str()) );
135
136 invList->Get( creature->backpack );
137 spellList->Get( creature->spells );
138
139 skillList->DeleteAllItems();
140 std::map<std::string,std::string>::iterator itr = creature->skills.begin();
141 for ( int i = 0; itr != creature->skills.end(); itr++, i++ )
142 {
143 skillList->InsertItem(i,L"");
144 skillList->SetItem(i,0, std2wx(itr->first));
145 skillList->SetItem(i,1, std2wx(itr->second));
146 }
147 }
SetCurrent()148 void PageCreatures::SetCurrent()
149 {
150 Creature *creature = dfCreatures->GetCurrent();
151 char buffer[16];
152
153 creature->name = wx2std( nameEdit->GetValue() );
154 creature->portrait = wx2std( portraitEdit->GetValue() );
155 creature->md2 = wx2std( md2Edit->GetValue() );
156 creature->skin = wx2std( skinEdit->GetValue() );
157
158 sprintf(buffer, "%i", levelSpin->GetValue());
159 creature->level = buffer;
160 sprintf(buffer, "%i", hpSpin->GetValue());
161 creature->hp = buffer;
162 sprintf(buffer, "%i", mpSpin->GetValue());
163 creature->mp = buffer;
164 sprintf(buffer, "%i", armorSpin->GetValue());
165 creature->armor = buffer;
166 sprintf(buffer, "%i", rarenessSpin->GetValue());
167 creature->rareness = buffer;
168 sprintf(buffer, "%i", speedSpin->GetValue());
169 creature->speed = buffer;
170
171 creature->scale = wx2std( scaleEdit->GetValue() );
172 creature->npc = wx2std( npcEdit->GetValue() );
173
174 sprintf(buffer, "%i", npcStartXSpin->GetValue());
175 creature->npcStartX = buffer;
176 sprintf(buffer, "%i", npcStartYSpin->GetValue());
177 creature->npcStartY = buffer;
178
179 invList->Set( creature->backpack );
180 spellList->Set( creature->spells );
181
182 creature->skills.clear();
183 wxListItem l;
184 for ( int i = 0; i < skillList->GetItemCount(); i++ )
185 {
186 l.SetId(i);
187
188 l.SetColumn(0);
189 skillList->GetItem(l);
190 std::string str = wx2std( l.GetText() );
191
192 l.SetColumn(1);
193 skillList->GetItem(l);
194 creature->skills[ str ] = wx2std( l.GetText() );
195 }
196 }
ClearCurrent()197 void PageCreatures::ClearCurrent()
198 {
199 Creature *creature = dfCreatures->GetCurrent();
200
201 creature->name = "";
202 creature->portrait = "";
203 creature->md2 = "";
204 creature->skin = "";
205 creature->level = "";
206 creature->hp = "";
207 creature->mp = "";
208 creature->armor = "";
209 creature->rareness = "";
210 creature->speed = "";
211 creature->scale = "";
212 creature->npc = "";
213 creature->npcStartX = "";
214 creature->npcStartY = "";
215
216 creature->backpack.clear();
217 creature->spells.clear();
218 creature->skills.clear();
219 }
220
221 class CreatureSkillEntryDialog : public wxTextEntryDialog
222 {
223 public:
CreatureSkillEntryDialog(wxListView * skillList)224 CreatureSkillEntryDialog(wxListView *skillList) : wxTextEntryDialog(0,L"Enter skill",L"Skill Entry")
225 {
226 skillSpin = new wxSpinCtrl(this, -1, L"", wxPoint(235,10),wxSize(45,-1), wxSP_ARROW_KEYS, 1,100,1);
227
228 wxString skill;
229 if ( skillList->GetSelectedItemCount() == 1 )
230 skill = skillList->GetItemText ( skillList->GetFirstSelected() );
231 this->SetValue(skill);
232
233 if ( wxTextEntryDialog::ShowModal() == wxID_CANCEL )
234 return;
235
236
237 skill = wxTextEntryDialog::GetValue();
238 if ( skill == L"" )
239 return;
240
241 char buffer[16];
242 sprintf( buffer, "%i", skillSpin->GetValue() );
243
244 long itemPos = skillList->FindItem(-1, skill);
245 if ( itemPos == -1)
246 {
247 itemPos = skillList->InsertItem( skillList->GetItemCount(), skill );
248 skillList->SetItem( itemPos, 1, std2wx(buffer));
249 }
250 else
251 skillList->SetItem( itemPos, 1, std2wx(buffer));
252 }
253 protected:
254 wxSpinCtrl *skillSpin;
255 };
OnAddSkill()256 void PageCreatures::OnAddSkill()
257 {
258 CreatureSkillEntryDialog skillDialog( skillList );
259 }
OnDelSkill()260 void PageCreatures::OnDelSkill()
261 {
262 long selected = skillList->GetFirstSelected();
263
264 while ( selected != -1 )
265 {
266 skillList->DeleteItem( selected );
267
268 selected = skillList->GetFirstSelected();
269 }
270 }
271