close Warning: Can't synchronize with repository "(default)" (No changeset 184 in the repository). Look in the Trac log for more information.

source: tags/1.1.0/Forms/UFormNew.pas

Last change on this file was 130, checked in by chronos, 7 years ago
  • Fixed: Require at least 2 players for a game.
  • Fixed: Translate more strings.
File size: 11.4 KB
Line 
1unit UFormNew;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
9 ComCtrls, Spin, ExtCtrls, ActnList, ExtDlgs, Menus, UGame;
10
11type
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
97var
98 FormNew: TFormNew;
99
100implementation
101
102{$R *.lfm}
103
104uses
105 UFormPlayer, UCore;
106
107resourcestring
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
126procedure TFormNew.ListView1Data(Sender: TObject; Item: TListItem);
127begin
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;
136end;
137
138procedure TFormNew.ListView1DblClick(Sender: TObject);
139begin
140 APlayerModify.Execute;
141end;
142
143procedure TFormNew.ListView1KeyPress(Sender: TObject; var Key: char);
144begin
145 if (Key = #13) then APlayerModify.Execute;
146end;
147
148procedure TFormNew.ListView1KeyUp(Sender: TObject; var Key: Word;
149 Shift: TShiftState);
150begin
151 if Key = 45 then APlayerAdd.Execute;
152 if Key = 46 then APlayerRemove.Execute;
153end;
154
155procedure TFormNew.ListView1SelectItem(Sender: TObject; Item: TListItem;
156 Selected: Boolean);
157begin
158 ReloadView;
159end;
160
161procedure TFormNew.SpinEditMapSizeXChange(Sender: TObject);
162begin
163 TrackBarSizeX.Position := SpinEditMapSizeX.Value;
164end;
165
166procedure TFormNew.SpinEditMapSizeYChange(Sender: TObject);
167begin
168 TrackBarSizeY.Position := SpinEditMapSizeY.Value;
169end;
170
171procedure TFormNew.TrackBarSizeYChange(Sender: TObject);
172begin
173 SpinEditMapSizeY.Value := TrackBarSizeY.Position;
174end;
175
176procedure TFormNew.TrackBarSizeXChange(Sender: TObject);
177begin
178 SpinEditMapSizeX.Value := TrackBarSizeX.Position;
179end;
180
181procedure TFormNew.Translate;
182var
183 LastIndex: Integer;
184begin
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;
226end;
227
228procedure TFormNew.ReloadView;
229begin
230 ListView1.Items.Count := Players.Count;
231 ListView1.Refresh;
232 Translate;
233 UpdateInterface;
234end;
235
236procedure TFormNew.UpdateInterface;
237begin
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);
243end;
244
245procedure TFormNew.FormShow(Sender: TObject);
246begin
247 ReloadView;
248 //Height := Trunc(1.5 * Height);
249 PageControl1.TabIndex := 0;
250end;
251
252procedure TFormNew.ListView1CustomDrawSubItem(Sender: TCustomListView;
253 Item: TListItem; SubItem: Integer; State: TCustomDrawState;
254 var DefaultDraw: Boolean);
255begin
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;
262end;
263
264procedure TFormNew.FormCreate(Sender: TObject);
265begin
266 Players := TPlayers.Create;
267end;
268
269procedure TFormNew.CheckBoxCityChange(Sender: TObject);
270begin
271 SpinEditCityPercent.Enabled := CheckBoxCity.Checked;
272end;
273
274procedure TFormNew.CheckBoxVoidChange(Sender: TObject);
275begin
276 SpinEditVoidPercent.Enabled := CheckBoxVoid.Checked;
277end;
278
279procedure TFormNew.ComboBoxMapShapeChange(Sender: TObject);
280begin
281 ReloadView;
282end;
283
284procedure TFormNew.APlayerModifyExecute(Sender: TObject);
285begin
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;
293end;
294
295procedure TFormNew.APlayerRemoveExecute(Sender: TObject);
296begin
297 if Assigned(ListView1.Selected) then begin
298 Players.Remove(ListView1.Selected.Data);
299 ReloadView;
300 end;
301end;
302
303procedure TFormNew.ButtonImageBrowseClick(Sender: TObject);
304begin
305 OpenPictureDialog1.FileName := EditImageFile.Text;
306 if OpenPictureDialog1.Execute then begin
307 EditImageFile.Text := OpenPictureDialog1.FileName;
308 end;
309end;
310
311procedure TFormNew.APlayerAddExecute(Sender: TObject);
312var
313 NewPlayer: TPlayer;
314begin
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;
325end;
326
327procedure TFormNew.FormDestroy(Sender: TObject);
328begin
329 Players.Free;
330end;
331
332procedure TFormNew.Load(Game: TGame);
333var
334 I: Integer;
335begin
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;
364end;
365
366procedure TFormNew.Save(Game: TGame);
367var
368 I: Integer;
369begin
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;
394end;
395
396end.
397
Note: See TracBrowser for help on using the repository browser.