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

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