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.2.0/Forms/UFormNew.pas

Last change on this file was 155, checked in by chronos, 7 years ago
  • Modified: Store player settings for new game separately to current game players.
File size: 10.9 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 SRounded = 'Rounded';
123 SFromImageFile = 'From image file';
124
125{ TFormNew }
126
127procedure TFormNew.ListView1Data(Sender: TObject; Item: TListItem);
128begin
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;
137end;
138
139procedure TFormNew.ListView1DblClick(Sender: TObject);
140begin
141 APlayerModify.Execute;
142end;
143
144procedure TFormNew.ListView1KeyPress(Sender: TObject; var Key: char);
145begin
146 if (Key = #13) then APlayerModify.Execute;
147end;
148
149procedure TFormNew.ListView1KeyUp(Sender: TObject; var Key: Word;
150 Shift: TShiftState);
151begin
152 if Key = 45 then APlayerAdd.Execute;
153 if Key = 46 then APlayerRemove.Execute;
154end;
155
156procedure TFormNew.ListView1SelectItem(Sender: TObject; Item: TListItem;
157 Selected: Boolean);
158begin
159 ReloadView;
160end;
161
162procedure TFormNew.SpinEditMapSizeXChange(Sender: TObject);
163begin
164 TrackBarSizeX.Position := SpinEditMapSizeX.Value;
165end;
166
167procedure TFormNew.SpinEditMapSizeYChange(Sender: TObject);
168begin
169 TrackBarSizeY.Position := SpinEditMapSizeY.Value;
170end;
171
172procedure TFormNew.TrackBarSizeYChange(Sender: TObject);
173begin
174 SpinEditMapSizeY.Value := TrackBarSizeY.Position;
175end;
176
177procedure TFormNew.TrackBarSizeXChange(Sender: TObject);
178begin
179 SpinEditMapSizeX.Value := TrackBarSizeX.Position;
180end;
181
182procedure TFormNew.Translate;
183var
184 LastIndex: Integer;
185begin
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;
228end;
229
230procedure TFormNew.ReloadView;
231begin
232 ListView1.Items.Count := Players.Count;
233 ListView1.Refresh;
234 Translate;
235 UpdateInterface;
236end;
237
238procedure TFormNew.UpdateInterface;
239begin
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);
245end;
246
247procedure TFormNew.FormShow(Sender: TObject);
248begin
249 ReloadView;
250 //Height := Trunc(1.5 * Height);
251 PageControl1.TabIndex := 0;
252end;
253
254procedure TFormNew.ListView1CustomDrawSubItem(Sender: TCustomListView;
255 Item: TListItem; SubItem: Integer; State: TCustomDrawState;
256 var DefaultDraw: Boolean);
257begin
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;
264end;
265
266procedure TFormNew.FormCreate(Sender: TObject);
267begin
268 Players := TPlayers.Create;
269end;
270
271procedure TFormNew.CheckBoxCityChange(Sender: TObject);
272begin
273 SpinEditCityPercent.Enabled := CheckBoxCity.Checked;
274end;
275
276procedure TFormNew.CheckBoxVoidChange(Sender: TObject);
277begin
278 SpinEditVoidPercent.Enabled := CheckBoxVoid.Checked;
279end;
280
281procedure TFormNew.ComboBoxMapShapeChange(Sender: TObject);
282begin
283 ReloadView;
284end;
285
286procedure TFormNew.APlayerModifyExecute(Sender: TObject);
287begin
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;
295end;
296
297procedure TFormNew.APlayerRemoveExecute(Sender: TObject);
298begin
299 if Assigned(ListView1.Selected) then begin
300 Players.Remove(ListView1.Selected.Data);
301 ReloadView;
302 end;
303end;
304
305procedure TFormNew.ButtonImageBrowseClick(Sender: TObject);
306begin
307 OpenPictureDialog1.FileName := EditImageFile.Text;
308 if OpenPictureDialog1.Execute then begin
309 EditImageFile.Text := OpenPictureDialog1.FileName;
310 end;
311end;
312
313procedure TFormNew.APlayerAddExecute(Sender: TObject);
314var
315 NewPlayer: TPlayer;
316begin
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;
327end;
328
329procedure TFormNew.FormDestroy(Sender: TObject);
330begin
331 Players.Free;
332end;
333
334procedure TFormNew.Load(Game: TGame);
335begin
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;
356end;
357
358procedure TFormNew.Save(Game: TGame);
359begin
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;
376end;
377
378end.
379
Note: See TracBrowser for help on using the repository browser.