1 | unit UFormNew;
|
---|
2 |
|
---|
3 | {$mode delphi}
|
---|
4 |
|
---|
5 | interface
|
---|
6 |
|
---|
7 | uses
|
---|
8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
---|
9 | ComCtrls, Spin, ExtCtrls, ActnList, ExtDlgs, Menus, UGame;
|
---|
10 |
|
---|
11 | type
|
---|
12 |
|
---|
13 | { TFormNew }
|
---|
14 |
|
---|
15 | TFormNew = class(TForm)
|
---|
16 | APlayerAdd: TAction;
|
---|
17 | APlayerRemove: TAction;
|
---|
18 | APlayerModify: TAction;
|
---|
19 | ActionList1: TActionList;
|
---|
20 | ButtonImageBrowse: TButton;
|
---|
21 | ButtonCancel: TButton;
|
---|
22 | ButtonOk: TButton;
|
---|
23 | ButtonPlayerAdd: TButton;
|
---|
24 | ButtonPlayerModify: TButton;
|
---|
25 | ButtonPlayerRemove: TButton;
|
---|
26 | CheckBoxBridges: TCheckBox;
|
---|
27 | CheckBoxFogOfWar: TCheckBox;
|
---|
28 | CheckBoxCity: TCheckBox;
|
---|
29 | CheckBoxSymetricMap: TCheckBox;
|
---|
30 | CheckBoxVoid: TCheckBox;
|
---|
31 | ComboBoxGridType: TComboBox;
|
---|
32 | ComboBoxMapShape: TComboBox;
|
---|
33 | ComboBoxWinObjective: TComboBox;
|
---|
34 | EditImageFile: TEdit;
|
---|
35 | Label1: TLabel;
|
---|
36 | Label2: TLabel;
|
---|
37 | Label3: TLabel;
|
---|
38 | Label4: TLabel;
|
---|
39 | Label5: TLabel;
|
---|
40 | Label6: TLabel;
|
---|
41 | Label7: TLabel;
|
---|
42 | Label8: TLabel;
|
---|
43 | Label9: TLabel;
|
---|
44 | ListView1: TListView;
|
---|
45 | MenuItem1: TMenuItem;
|
---|
46 | MenuItem2: TMenuItem;
|
---|
47 | MenuItem3: TMenuItem;
|
---|
48 | OpenPictureDialog1: TOpenPictureDialog;
|
---|
49 | PageControl1: TPageControl;
|
---|
50 | PopupMenu1: TPopupMenu;
|
---|
51 | RadioGroupGrowAmount: TRadioGroup;
|
---|
52 | RadioGroupGrowCells: TRadioGroup;
|
---|
53 | SpinEditCityPercent: TSpinEdit;
|
---|
54 | SpinEditMapSizeX: TSpinEdit;
|
---|
55 | SpinEditMapSizeY: TSpinEdit;
|
---|
56 | SpinEditNeutralUnits: TSpinEdit;
|
---|
57 | SpinEditVoidPercent: TSpinEdit;
|
---|
58 | TabSheet1: TTabSheet;
|
---|
59 | TabSheet2: TTabSheet;
|
---|
60 | TabSheet3: TTabSheet;
|
---|
61 | TrackBarSizeX: TTrackBar;
|
---|
62 | TrackBarSizeY: TTrackBar;
|
---|
63 | procedure APlayerAddExecute(Sender: TObject);
|
---|
64 | procedure APlayerModifyExecute(Sender: TObject);
|
---|
65 | procedure APlayerRemoveExecute(Sender: TObject);
|
---|
66 | procedure ButtonImageBrowseClick(Sender: TObject);
|
---|
67 | procedure CheckBoxCityChange(Sender: TObject);
|
---|
68 | procedure CheckBoxVoidChange(Sender: TObject);
|
---|
69 | procedure ComboBoxMapShapeChange(Sender: TObject);
|
---|
70 | procedure FormCreate(Sender: TObject);
|
---|
71 | procedure FormDestroy(Sender: TObject);
|
---|
72 | procedure FormShow(Sender: TObject);
|
---|
73 | procedure ListView1CustomDrawSubItem(Sender: TCustomListView;
|
---|
74 | Item: TListItem; SubItem: Integer; State: TCustomDrawState;
|
---|
75 | var DefaultDraw: Boolean);
|
---|
76 | procedure ListView1Data(Sender: TObject; Item: TListItem);
|
---|
77 | procedure ListView1DblClick(Sender: TObject);
|
---|
78 | procedure ListView1KeyPress(Sender: TObject; var Key: char);
|
---|
79 | procedure ListView1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
|
---|
80 | );
|
---|
81 | procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
|
---|
82 | Selected: Boolean);
|
---|
83 | procedure SpinEditMapSizeXChange(Sender: TObject);
|
---|
84 | procedure SpinEditMapSizeYChange(Sender: TObject);
|
---|
85 | procedure TrackBarSizeYChange(Sender: TObject);
|
---|
86 | procedure TrackBarSizeXChange(Sender: TObject);
|
---|
87 | private
|
---|
88 | Players: TPlayers;
|
---|
89 | public
|
---|
90 | procedure Translate;
|
---|
91 | procedure ReloadView;
|
---|
92 | procedure UpdateInterface;
|
---|
93 | procedure Load(Game: TGame);
|
---|
94 | procedure Save(Game: TGame);
|
---|
95 | end;
|
---|
96 |
|
---|
97 | var
|
---|
98 | FormNew: TFormNew;
|
---|
99 |
|
---|
100 | implementation
|
---|
101 |
|
---|
102 | {$R *.lfm}
|
---|
103 |
|
---|
104 | uses
|
---|
105 | UFormPlayer, UCore;
|
---|
106 |
|
---|
107 | resourcestring
|
---|
108 | SGridTypeHexagon = 'Hexagonal';
|
---|
109 | SGridTypeSquare = 'Square';
|
---|
110 | SGridTypeTriangle = 'Triangonal';
|
---|
111 | SGridTypeVoronoi = 'Voronoi random';
|
---|
112 | SWinObjectiveDefeatAllOponents = 'Defeat all oponents';
|
---|
113 | SWinObjectiveDefeatAllCities = 'Defeat all oponents cities';
|
---|
114 | SWinObjectiveCapturePosition = 'Capture position';
|
---|
115 | SWinObjectiveStayAliveForTurns = 'Stay alive for number of turns';
|
---|
116 | SGrowNone = 'None';
|
---|
117 | SGrowPlayerCities = 'Player cities';
|
---|
118 | SGrowPlayerAllCells = 'Player all cells';
|
---|
119 | SGrowAmountByOne = 'By one';
|
---|
120 | SGrowAmountBySquareRoot = 'By square root';
|
---|
121 | SRectangular = 'Rectangular';
|
---|
122 | SRounded = 'Rounded';
|
---|
123 | SFromImageFile = 'From image file';
|
---|
124 |
|
---|
125 | { TFormNew }
|
---|
126 |
|
---|
127 | procedure TFormNew.ListView1Data(Sender: TObject; Item: TListItem);
|
---|
128 | begin
|
---|
129 | if (Item.Index >= 0) and (Item.Index < Players.Count) then
|
---|
130 | with TPlayer(Players[Item.Index]) do begin
|
---|
131 | Item.Caption := Name;
|
---|
132 | Item.Data := Players[Item.Index];
|
---|
133 | Item.SubItems.Add(PlayerModeText[Mode]);
|
---|
134 | Item.SubItems.Add(''); // Do not show color text
|
---|
135 | Item.SubItems.Add(IntToStr(StartUnits));
|
---|
136 | end;
|
---|
137 | end;
|
---|
138 |
|
---|
139 | procedure TFormNew.ListView1DblClick(Sender: TObject);
|
---|
140 | begin
|
---|
141 | APlayerModify.Execute;
|
---|
142 | end;
|
---|
143 |
|
---|
144 | procedure TFormNew.ListView1KeyPress(Sender: TObject; var Key: char);
|
---|
145 | begin
|
---|
146 | if (Key = #13) then APlayerModify.Execute;
|
---|
147 | end;
|
---|
148 |
|
---|
149 | procedure TFormNew.ListView1KeyUp(Sender: TObject; var Key: Word;
|
---|
150 | Shift: TShiftState);
|
---|
151 | begin
|
---|
152 | if Key = 45 then APlayerAdd.Execute;
|
---|
153 | if Key = 46 then APlayerRemove.Execute;
|
---|
154 | end;
|
---|
155 |
|
---|
156 | procedure TFormNew.ListView1SelectItem(Sender: TObject; Item: TListItem;
|
---|
157 | Selected: Boolean);
|
---|
158 | begin
|
---|
159 | ReloadView;
|
---|
160 | end;
|
---|
161 |
|
---|
162 | procedure TFormNew.SpinEditMapSizeXChange(Sender: TObject);
|
---|
163 | begin
|
---|
164 | TrackBarSizeX.Position := SpinEditMapSizeX.Value;
|
---|
165 | end;
|
---|
166 |
|
---|
167 | procedure TFormNew.SpinEditMapSizeYChange(Sender: TObject);
|
---|
168 | begin
|
---|
169 | TrackBarSizeY.Position := SpinEditMapSizeY.Value;
|
---|
170 | end;
|
---|
171 |
|
---|
172 | procedure TFormNew.TrackBarSizeYChange(Sender: TObject);
|
---|
173 | begin
|
---|
174 | SpinEditMapSizeY.Value := TrackBarSizeY.Position;
|
---|
175 | end;
|
---|
176 |
|
---|
177 | procedure TFormNew.TrackBarSizeXChange(Sender: TObject);
|
---|
178 | begin
|
---|
179 | SpinEditMapSizeX.Value := TrackBarSizeX.Position;
|
---|
180 | end;
|
---|
181 |
|
---|
182 | procedure TFormNew.Translate;
|
---|
183 | var
|
---|
184 | LastIndex: Integer;
|
---|
185 | begin
|
---|
186 | with ComboBoxGridType do begin
|
---|
187 | LastIndex := ItemIndex;
|
---|
188 | Clear;
|
---|
189 | Items.Add(SGridTypeHexagon);
|
---|
190 | Items.Add(SGridTypeSquare);
|
---|
191 | Items.Add(SGridTypeTriangle);
|
---|
192 | if Core.DevelMode then
|
---|
193 | Items.Add(SGridTypeVoronoi);
|
---|
194 | ItemIndex := LastIndex;
|
---|
195 | end;
|
---|
196 | with ComboBoxWinObjective do begin
|
---|
197 | LastIndex := ItemIndex;
|
---|
198 | Clear;
|
---|
199 | Items.Add(SWinObjectiveDefeatAllOponents);
|
---|
200 | Items.Add(SWinObjectiveDefeatAllCities);
|
---|
201 | Items.Add(SWinObjectiveCapturePosition);
|
---|
202 | Items.Add(SWinObjectiveStayAliveForTurns);
|
---|
203 | ItemIndex := LastIndex;
|
---|
204 | end;
|
---|
205 | with ComboBoxMapShape do begin
|
---|
206 | LastIndex := ItemIndex;
|
---|
207 | Clear;
|
---|
208 | Items.Add(SRectangular);
|
---|
209 | Items.Add(SFromImageFile);
|
---|
210 | Items.Add(SRounded);
|
---|
211 | ItemIndex := LastIndex;
|
---|
212 | end;
|
---|
213 | with RadioGroupGrowCells do begin
|
---|
214 | LastIndex := ItemIndex;
|
---|
215 | Items.Clear;
|
---|
216 | Items.Add(SGrowNone);
|
---|
217 | Items.Add(SGrowPlayerCities);
|
---|
218 | Items.Add(SGrowPlayerAllCells);
|
---|
219 | ItemIndex := LastIndex;
|
---|
220 | end;
|
---|
221 | with RadioGroupGrowAmount do begin
|
---|
222 | LastIndex := ItemIndex;
|
---|
223 | Items.Clear;
|
---|
224 | Items.Add(SGrowAmountByOne);
|
---|
225 | Items.Add(SGrowAmountBySquareRoot);
|
---|
226 | ItemIndex := LastIndex;
|
---|
227 | end;
|
---|
228 | end;
|
---|
229 |
|
---|
230 | procedure TFormNew.ReloadView;
|
---|
231 | begin
|
---|
232 | ListView1.Items.Count := Players.Count;
|
---|
233 | ListView1.Refresh;
|
---|
234 | Translate;
|
---|
235 | UpdateInterface;
|
---|
236 | end;
|
---|
237 |
|
---|
238 | procedure TFormNew.UpdateInterface;
|
---|
239 | begin
|
---|
240 | APlayerRemove.Enabled := Assigned(ListView1.Selected) and (Players.Count > 2);
|
---|
241 | APlayerAdd.Enabled := Players.Count < MaxPlayerCount;
|
---|
242 | APlayerModify.Enabled := Assigned(ListView1.Selected);
|
---|
243 | EditImageFile.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
|
---|
244 | ButtonImageBrowse.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
|
---|
245 | end;
|
---|
246 |
|
---|
247 | procedure TFormNew.FormShow(Sender: TObject);
|
---|
248 | begin
|
---|
249 | ReloadView;
|
---|
250 | //Height := Trunc(1.5 * Height);
|
---|
251 | PageControl1.TabIndex := 0;
|
---|
252 | end;
|
---|
253 |
|
---|
254 | procedure TFormNew.ListView1CustomDrawSubItem(Sender: TCustomListView;
|
---|
255 | Item: TListItem; SubItem: Integer; State: TCustomDrawState;
|
---|
256 | var DefaultDraw: Boolean);
|
---|
257 | begin
|
---|
258 | if SubItem = 2 then
|
---|
259 | with ListView1.Canvas do begin
|
---|
260 | Brush.Color := TPlayer(Item.Data).Color;
|
---|
261 | Brush.Style := bsSolid;
|
---|
262 | FillRect(Item.DisplayRectSubItem(2, drBounds));
|
---|
263 | end;
|
---|
264 | end;
|
---|
265 |
|
---|
266 | procedure TFormNew.FormCreate(Sender: TObject);
|
---|
267 | begin
|
---|
268 | Players := TPlayers.Create;
|
---|
269 | end;
|
---|
270 |
|
---|
271 | procedure TFormNew.CheckBoxCityChange(Sender: TObject);
|
---|
272 | begin
|
---|
273 | SpinEditCityPercent.Enabled := CheckBoxCity.Checked;
|
---|
274 | end;
|
---|
275 |
|
---|
276 | procedure TFormNew.CheckBoxVoidChange(Sender: TObject);
|
---|
277 | begin
|
---|
278 | SpinEditVoidPercent.Enabled := CheckBoxVoid.Checked;
|
---|
279 | end;
|
---|
280 |
|
---|
281 | procedure TFormNew.ComboBoxMapShapeChange(Sender: TObject);
|
---|
282 | begin
|
---|
283 | ReloadView;
|
---|
284 | end;
|
---|
285 |
|
---|
286 | procedure TFormNew.APlayerModifyExecute(Sender: TObject);
|
---|
287 | begin
|
---|
288 | if Assigned(ListView1.Selected) then begin
|
---|
289 | FormPlayer.Load(TPlayer(ListView1.Selected.Data));
|
---|
290 | if FormPlayer.ShowModal = mrOk then begin
|
---|
291 | FormPlayer.Save(TPlayer(ListView1.Selected.Data));
|
---|
292 | ReloadView;
|
---|
293 | end;
|
---|
294 | end;
|
---|
295 | end;
|
---|
296 |
|
---|
297 | procedure TFormNew.APlayerRemoveExecute(Sender: TObject);
|
---|
298 | begin
|
---|
299 | if Assigned(ListView1.Selected) then begin
|
---|
300 | Players.Remove(ListView1.Selected.Data);
|
---|
301 | ReloadView;
|
---|
302 | end;
|
---|
303 | end;
|
---|
304 |
|
---|
305 | procedure TFormNew.ButtonImageBrowseClick(Sender: TObject);
|
---|
306 | begin
|
---|
307 | OpenPictureDialog1.FileName := EditImageFile.Text;
|
---|
308 | if OpenPictureDialog1.Execute then begin
|
---|
309 | EditImageFile.Text := OpenPictureDialog1.FileName;
|
---|
310 | end;
|
---|
311 | end;
|
---|
312 |
|
---|
313 | procedure TFormNew.APlayerAddExecute(Sender: TObject);
|
---|
314 | var
|
---|
315 | NewPlayer: TPlayer;
|
---|
316 | begin
|
---|
317 | if Players.Count <= (MaxPlayerCount - 1) then begin
|
---|
318 | NewPlayer := TPlayer.Create;
|
---|
319 | NewPlayer.Id := Players.GetNewPlayerId;
|
---|
320 | NewPlayer.Name := SPlayer + ' ' + IntToStr(NewPlayer.Id);
|
---|
321 | NewPlayer.Color := PlayerColors[Players.Count];
|
---|
322 | NewPlayer.Mode := pmComputer;
|
---|
323 | NewPlayer.Agressivity := caMedium;
|
---|
324 | Players.Add(NewPlayer);
|
---|
325 | ReloadView;
|
---|
326 | end;
|
---|
327 | end;
|
---|
328 |
|
---|
329 | procedure TFormNew.FormDestroy(Sender: TObject);
|
---|
330 | begin
|
---|
331 | Players.Free;
|
---|
332 | end;
|
---|
333 |
|
---|
334 | procedure TFormNew.Load(Game: TGame);
|
---|
335 | begin
|
---|
336 | CheckBoxSymetricMap.Checked := Game.SymetricMap;
|
---|
337 | CheckBoxVoid.Checked := Game.VoidEnabled;
|
---|
338 | SpinEditVoidPercent.Value := Game.VoidPercentage;
|
---|
339 | SpinEditVoidPercent.Enabled := Game.VoidEnabled;
|
---|
340 | Players.Assign(Game.PlayersSetting);
|
---|
341 | CheckBoxCity.Checked := Game.CityEnabled;
|
---|
342 | SpinEditCityPercent.Value := Game.CityPercentage;
|
---|
343 | SpinEditMapSizeX.Value := Game.Map.Size.X;
|
---|
344 | SpinEditMapSizeY.Value := Game.Map.Size.Y;
|
---|
345 | TrackBarSizeX.Position := Game.Map.Size.X;
|
---|
346 | TrackBarSizeY.Position := Game.Map.Size.Y;
|
---|
347 | RadioGroupGrowAmount.ItemIndex := Integer(Game.GrowAmount);
|
---|
348 | RadioGroupGrowCells.ItemIndex := Integer(Game.GrowCells);
|
---|
349 | ComboBoxGridType.ItemIndex := Integer(Game.MapType) - 1;
|
---|
350 | ComboBoxWinObjective.ItemIndex := Integer(Game.WinObjective);
|
---|
351 | SpinEditNeutralUnits.Value := Game.MaxNeutralUnits;
|
---|
352 | ComboBoxMapShape.ItemIndex := Integer(Game.Map.Shape);
|
---|
353 | EditImageFile.Text := Game.MapImageFileName;
|
---|
354 | CheckBoxFogOfWar.Checked := Game.FogOfWar;
|
---|
355 | CheckBoxBridges.Checked := Game.BridgeEnabled;
|
---|
356 | end;
|
---|
357 |
|
---|
358 | procedure TFormNew.Save(Game: TGame);
|
---|
359 | begin
|
---|
360 | Game.PlayersSetting.Assign(Players);
|
---|
361 | Game.SymetricMap := CheckBoxSymetricMap.Checked;
|
---|
362 | Game.VoidEnabled := CheckBoxVoid.Checked;
|
---|
363 | Game.VoidPercentage := SpinEditVoidPercent.Value;
|
---|
364 | Game.CityEnabled := CheckBoxCity.Checked;
|
---|
365 | Game.CityPercentage := SpinEditCityPercent.Value;
|
---|
366 | Game.Map.Size := Point(SpinEditMapSizeX.Value, SpinEditMapSizeY.Value);
|
---|
367 | Game.GrowAmount := TGrowAmount(RadioGroupGrowAmount.ItemIndex);
|
---|
368 | Game.GrowCells := TGrowCells(RadioGroupGrowCells.ItemIndex);
|
---|
369 | Game.MapType := TMapType(ComboBoxGridType.ItemIndex + 1);
|
---|
370 | Game.WinObjective := TWinObjective(ComboBoxWinObjective.ItemIndex);
|
---|
371 | Game.MaxNeutralUnits := SpinEditNeutralUnits.Value;
|
---|
372 | Game.Map.Shape := TMapShape(ComboBoxMapShape.ItemIndex);
|
---|
373 | Game.MapImageFileName := EditImageFile.Text;
|
---|
374 | Game.FogOfWar := CheckBoxFogOfWar.Checked;
|
---|
375 | Game.BridgeEnabled := CheckBoxBridges.Checked;
|
---|
376 | end;
|
---|
377 |
|
---|
378 | end.
|
---|
379 |
|
---|