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 | SFromImageFile = 'From image file';
|
---|
123 |
|
---|
124 | { TFormNew }
|
---|
125 |
|
---|
126 | procedure TFormNew.ListView1Data(Sender: TObject; Item: TListItem);
|
---|
127 | begin
|
---|
128 | if (Item.Index >= 0) and (Item.Index < Players.Count) then
|
---|
129 | with TPlayer(Players[Item.Index]) do begin
|
---|
130 | Item.Caption := Name;
|
---|
131 | Item.Data := Players[Item.Index];
|
---|
132 | Item.SubItems.Add(PlayerModeText[Mode]);
|
---|
133 | Item.SubItems.Add(''); // Do not show color text
|
---|
134 | Item.SubItems.Add(IntToStr(StartUnits));
|
---|
135 | end;
|
---|
136 | end;
|
---|
137 |
|
---|
138 | procedure TFormNew.ListView1DblClick(Sender: TObject);
|
---|
139 | begin
|
---|
140 | APlayerModify.Execute;
|
---|
141 | end;
|
---|
142 |
|
---|
143 | procedure TFormNew.ListView1KeyPress(Sender: TObject; var Key: char);
|
---|
144 | begin
|
---|
145 | if (Key = #13) then APlayerModify.Execute;
|
---|
146 | end;
|
---|
147 |
|
---|
148 | procedure TFormNew.ListView1KeyUp(Sender: TObject; var Key: Word;
|
---|
149 | Shift: TShiftState);
|
---|
150 | begin
|
---|
151 | if Key = 45 then APlayerAdd.Execute;
|
---|
152 | if Key = 46 then APlayerRemove.Execute;
|
---|
153 | end;
|
---|
154 |
|
---|
155 | procedure TFormNew.ListView1SelectItem(Sender: TObject; Item: TListItem;
|
---|
156 | Selected: Boolean);
|
---|
157 | begin
|
---|
158 | ReloadView;
|
---|
159 | end;
|
---|
160 |
|
---|
161 | procedure TFormNew.SpinEditMapSizeXChange(Sender: TObject);
|
---|
162 | begin
|
---|
163 | TrackBarSizeX.Position := SpinEditMapSizeX.Value;
|
---|
164 | end;
|
---|
165 |
|
---|
166 | procedure TFormNew.SpinEditMapSizeYChange(Sender: TObject);
|
---|
167 | begin
|
---|
168 | TrackBarSizeY.Position := SpinEditMapSizeY.Value;
|
---|
169 | end;
|
---|
170 |
|
---|
171 | procedure TFormNew.TrackBarSizeYChange(Sender: TObject);
|
---|
172 | begin
|
---|
173 | SpinEditMapSizeY.Value := TrackBarSizeY.Position;
|
---|
174 | end;
|
---|
175 |
|
---|
176 | procedure TFormNew.TrackBarSizeXChange(Sender: TObject);
|
---|
177 | begin
|
---|
178 | SpinEditMapSizeX.Value := TrackBarSizeX.Position;
|
---|
179 | end;
|
---|
180 |
|
---|
181 | procedure TFormNew.Translate;
|
---|
182 | var
|
---|
183 | LastIndex: Integer;
|
---|
184 | begin
|
---|
185 | with ComboBoxGridType do begin
|
---|
186 | LastIndex := ItemIndex;
|
---|
187 | Clear;
|
---|
188 | Items.Add(SGridTypeHexagon);
|
---|
189 | Items.Add(SGridTypeSquare);
|
---|
190 | Items.Add(SGridTypeTriangle);
|
---|
191 | if Core.DevelMode then
|
---|
192 | Items.Add(SGridTypeVoronoi);
|
---|
193 | ItemIndex := LastIndex;
|
---|
194 | end;
|
---|
195 | with ComboBoxWinObjective do begin
|
---|
196 | LastIndex := ItemIndex;
|
---|
197 | Clear;
|
---|
198 | Items.Add(SWinObjectiveDefeatAllOponents);
|
---|
199 | Items.Add(SWinObjectiveDefeatAllCities);
|
---|
200 | Items.Add(SWinObjectiveCapturePosition);
|
---|
201 | Items.Add(SWinObjectiveStayAliveForTurns);
|
---|
202 | ItemIndex := LastIndex;
|
---|
203 | end;
|
---|
204 | with ComboBoxMapShape do begin
|
---|
205 | LastIndex := ItemIndex;
|
---|
206 | Clear;
|
---|
207 | Items.Add(SRectangular);
|
---|
208 | Items.Add(SFromImageFile);
|
---|
209 | ItemIndex := LastIndex;
|
---|
210 | end;
|
---|
211 | with RadioGroupGrowCells do begin
|
---|
212 | LastIndex := ItemIndex;
|
---|
213 | Items.Clear;
|
---|
214 | Items.Add(SGrowNone);
|
---|
215 | Items.Add(SGrowPlayerCities);
|
---|
216 | Items.Add(SGrowPlayerAllCells);
|
---|
217 | ItemIndex := LastIndex;
|
---|
218 | end;
|
---|
219 | with RadioGroupGrowAmount do begin
|
---|
220 | LastIndex := ItemIndex;
|
---|
221 | Items.Clear;
|
---|
222 | Items.Add(SGrowAmountByOne);
|
---|
223 | Items.Add(SGrowAmountBySquareRoot);
|
---|
224 | ItemIndex := LastIndex;
|
---|
225 | end;
|
---|
226 | end;
|
---|
227 |
|
---|
228 | procedure TFormNew.ReloadView;
|
---|
229 | begin
|
---|
230 | ListView1.Items.Count := Players.Count;
|
---|
231 | ListView1.Refresh;
|
---|
232 | Translate;
|
---|
233 | UpdateInterface;
|
---|
234 | end;
|
---|
235 |
|
---|
236 | procedure TFormNew.UpdateInterface;
|
---|
237 | begin
|
---|
238 | APlayerRemove.Enabled := Assigned(ListView1.Selected) and (Players.Count > 2);
|
---|
239 | APlayerAdd.Enabled := Players.Count < MaxPlayerCount;
|
---|
240 | APlayerModify.Enabled := Assigned(ListView1.Selected);
|
---|
241 | EditImageFile.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
|
---|
242 | ButtonImageBrowse.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
|
---|
243 | end;
|
---|
244 |
|
---|
245 | procedure TFormNew.FormShow(Sender: TObject);
|
---|
246 | begin
|
---|
247 | ReloadView;
|
---|
248 | //Height := Trunc(1.5 * Height);
|
---|
249 | PageControl1.TabIndex := 0;
|
---|
250 | end;
|
---|
251 |
|
---|
252 | procedure TFormNew.ListView1CustomDrawSubItem(Sender: TCustomListView;
|
---|
253 | Item: TListItem; SubItem: Integer; State: TCustomDrawState;
|
---|
254 | var DefaultDraw: Boolean);
|
---|
255 | begin
|
---|
256 | if SubItem = 2 then
|
---|
257 | with ListView1.Canvas do begin
|
---|
258 | Brush.Color := TPlayer(Item.Data).Color;
|
---|
259 | Brush.Style := bsSolid;
|
---|
260 | FillRect(Item.DisplayRectSubItem(2, drBounds));
|
---|
261 | end;
|
---|
262 | end;
|
---|
263 |
|
---|
264 | procedure TFormNew.FormCreate(Sender: TObject);
|
---|
265 | begin
|
---|
266 | Players := TPlayers.Create;
|
---|
267 | end;
|
---|
268 |
|
---|
269 | procedure TFormNew.CheckBoxCityChange(Sender: TObject);
|
---|
270 | begin
|
---|
271 | SpinEditCityPercent.Enabled := CheckBoxCity.Checked;
|
---|
272 | end;
|
---|
273 |
|
---|
274 | procedure TFormNew.CheckBoxVoidChange(Sender: TObject);
|
---|
275 | begin
|
---|
276 | SpinEditVoidPercent.Enabled := CheckBoxVoid.Checked;
|
---|
277 | end;
|
---|
278 |
|
---|
279 | procedure TFormNew.ComboBoxMapShapeChange(Sender: TObject);
|
---|
280 | begin
|
---|
281 | ReloadView;
|
---|
282 | end;
|
---|
283 |
|
---|
284 | procedure TFormNew.APlayerModifyExecute(Sender: TObject);
|
---|
285 | begin
|
---|
286 | if Assigned(ListView1.Selected) then begin
|
---|
287 | FormPlayer.Load(TPlayer(ListView1.Selected.Data));
|
---|
288 | if FormPlayer.ShowModal = mrOk then begin
|
---|
289 | FormPlayer.Save(TPlayer(ListView1.Selected.Data));
|
---|
290 | ReloadView;
|
---|
291 | end;
|
---|
292 | end;
|
---|
293 | end;
|
---|
294 |
|
---|
295 | procedure TFormNew.APlayerRemoveExecute(Sender: TObject);
|
---|
296 | begin
|
---|
297 | if Assigned(ListView1.Selected) then begin
|
---|
298 | Players.Remove(ListView1.Selected.Data);
|
---|
299 | ReloadView;
|
---|
300 | end;
|
---|
301 | end;
|
---|
302 |
|
---|
303 | procedure TFormNew.ButtonImageBrowseClick(Sender: TObject);
|
---|
304 | begin
|
---|
305 | OpenPictureDialog1.FileName := EditImageFile.Text;
|
---|
306 | if OpenPictureDialog1.Execute then begin
|
---|
307 | EditImageFile.Text := OpenPictureDialog1.FileName;
|
---|
308 | end;
|
---|
309 | end;
|
---|
310 |
|
---|
311 | procedure TFormNew.APlayerAddExecute(Sender: TObject);
|
---|
312 | var
|
---|
313 | NewPlayer: TPlayer;
|
---|
314 | begin
|
---|
315 | if Players.Count <= (MaxPlayerCount - 1) then begin
|
---|
316 | NewPlayer := TPlayer.Create;
|
---|
317 | NewPlayer.Id := Players.GetNewPlayerId;
|
---|
318 | NewPlayer.Name := SPlayer + ' ' + IntToStr(NewPlayer.Id);
|
---|
319 | NewPlayer.Color := PlayerColors[Players.Count];
|
---|
320 | NewPlayer.Mode := pmComputer;
|
---|
321 | NewPlayer.Agressivity := caMedium;
|
---|
322 | Players.Add(NewPlayer);
|
---|
323 | ReloadView;
|
---|
324 | end;
|
---|
325 | end;
|
---|
326 |
|
---|
327 | procedure TFormNew.FormDestroy(Sender: TObject);
|
---|
328 | begin
|
---|
329 | Players.Free;
|
---|
330 | end;
|
---|
331 |
|
---|
332 | procedure TFormNew.Load(Game: TGame);
|
---|
333 | var
|
---|
334 | I: Integer;
|
---|
335 | begin
|
---|
336 | CheckBoxSymetricMap.Checked := Game.SymetricMap;
|
---|
337 | CheckBoxVoid.Checked := Game.VoidEnabled;
|
---|
338 | SpinEditVoidPercent.Value := Game.VoidPercentage;
|
---|
339 | SpinEditVoidPercent.Enabled := Game.VoidEnabled;
|
---|
340 | for I := 0 to Players.Count - 1 do
|
---|
341 | Players[I] := nil;
|
---|
342 | Players.Count := Game.Players.Count;
|
---|
343 | for I := 0 to Game.Players.Count - 1 do begin
|
---|
344 | Players[I] := TPlayer.Create;
|
---|
345 | TPlayer(Players[I]).Assign(TPlayer(Game.Players[I]));
|
---|
346 | end;
|
---|
347 | Players.NewPlayerId := Game.Players.NewPlayerId;
|
---|
348 |
|
---|
349 | CheckBoxCity.Checked := Game.CityEnabled;
|
---|
350 | SpinEditCityPercent.Value := Game.CityPercentage;
|
---|
351 | SpinEditMapSizeX.Value := Game.Map.Size.X;
|
---|
352 | SpinEditMapSizeY.Value := Game.Map.Size.Y;
|
---|
353 | TrackBarSizeX.Position := Game.Map.Size.X;
|
---|
354 | TrackBarSizeY.Position := Game.Map.Size.Y;
|
---|
355 | RadioGroupGrowAmount.ItemIndex := Integer(Game.GrowAmount);
|
---|
356 | RadioGroupGrowCells.ItemIndex := Integer(Game.GrowCells);
|
---|
357 | ComboBoxGridType.ItemIndex := Integer(Game.MapType) - 1;
|
---|
358 | ComboBoxWinObjective.ItemIndex := Integer(Game.WinObjective);
|
---|
359 | SpinEditNeutralUnits.Value := Game.MaxNeutralUnits;
|
---|
360 | ComboBoxMapShape.ItemIndex := Integer(Game.Map.Shape);
|
---|
361 | EditImageFile.Text := Game.MapImageFileName;
|
---|
362 | CheckBoxFogOfWar.Checked := Game.FogOfWar;
|
---|
363 | CheckBoxBridges.Checked := Game.BridgeEnabled;
|
---|
364 | end;
|
---|
365 |
|
---|
366 | procedure TFormNew.Save(Game: TGame);
|
---|
367 | var
|
---|
368 | I: Integer;
|
---|
369 | begin
|
---|
370 | while Game.Players.Count > Players.Count do
|
---|
371 | Game.Players.Delete(Game.Players.Count - 1);
|
---|
372 | while Game.Players.Count < Players.Count do
|
---|
373 | Game.Players.Add(TPlayer.Create);
|
---|
374 | for I := 0 to Game.Players.Count - 1 do begin
|
---|
375 | TPlayer(Game.Players[I]).Assign(TPlayer(Players[I]));
|
---|
376 | TPlayer(Game.Players[I]).Game := Game;
|
---|
377 | end;
|
---|
378 | Game.Players.NewPlayerId := Players.NewPlayerId;
|
---|
379 | Game.SymetricMap := CheckBoxSymetricMap.Checked;
|
---|
380 | Game.VoidEnabled := CheckBoxVoid.Checked;
|
---|
381 | Game.VoidPercentage := SpinEditVoidPercent.Value;
|
---|
382 | Game.CityEnabled := CheckBoxCity.Checked;
|
---|
383 | Game.CityPercentage := SpinEditCityPercent.Value;
|
---|
384 | Game.Map.Size := Point(SpinEditMapSizeX.Value, SpinEditMapSizeY.Value);
|
---|
385 | Game.GrowAmount := TGrowAmount(RadioGroupGrowAmount.ItemIndex);
|
---|
386 | Game.GrowCells := TGrowCells(RadioGroupGrowCells.ItemIndex);
|
---|
387 | Game.MapType := TMapType(ComboBoxGridType.ItemIndex + 1);
|
---|
388 | Game.WinObjective := TWinObjective(ComboBoxWinObjective.ItemIndex);
|
---|
389 | Game.MaxNeutralUnits := SpinEditNeutralUnits.Value;
|
---|
390 | Game.Map.Shape := TMapShape(ComboBoxMapShape.ItemIndex);
|
---|
391 | Game.MapImageFileName := EditImageFile.Text;
|
---|
392 | Game.FogOfWar := CheckBoxFogOfWar.Checked;
|
---|
393 | Game.BridgeEnabled := CheckBoxBridges.Checked;
|
---|
394 | end;
|
---|
395 |
|
---|
396 | end.
|
---|
397 |
|
---|