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

source: trunk/Forms/UFormNew.pas

Last change on this file was 183, checked in by chronos, 6 years ago
  • Modified: Units move handling was moved from Core to FormClient as it is game client related functionality.
File size: 13.0 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, UGeometry;
10
11type
12
13 { TFormNew }
14
15 TFormNew = class(TForm)
16 APlayerAdd: TAction;
17 APlayerRemove: TAction;
18 APlayerModify: TAction;
19 ActionList1: TActionList;
20 ButtonCancel: TButton;
21 ButtonImageBrowse: 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 EditServerAddress: TEdit;
35 EditImageFile: TEdit;
36 Label1: TLabel;
37 Label11: TLabel;
38 Label12: TLabel;
39 Label2: TLabel;
40 Label3: TLabel;
41 Label4: TLabel;
42 Label5: TLabel;
43 Label6: TLabel;
44 Label7: TLabel;
45 Label8: TLabel;
46 Label9: TLabel;
47 ListViewPlayers: TListView;
48 ListViewServers: TListView;
49 MenuItem1: TMenuItem;
50 MenuItem2: TMenuItem;
51 MenuItem3: TMenuItem;
52 OpenPictureDialog1: TOpenPictureDialog;
53 PageControl1: TPageControl;
54 PanelButtons: TPanel;
55 PanelChat: TPanel;
56 PopupMenu1: TPopupMenu;
57 RadioButtonModeNetworkServer: TRadioButton;
58 RadioButtonModeNetworkClient: TRadioButton;
59 RadioButtonModeLocal: TRadioButton;
60 RadioGroupGrowAmount: TRadioGroup;
61 RadioGroupGrowCells: TRadioGroup;
62 SpinEditServerPort: TSpinEdit;
63 SpinEditCityPercent: TSpinEdit;
64 SpinEditMapSizeX: TSpinEdit;
65 SpinEditMapSizeY: TSpinEdit;
66 SpinEditNeutralUnits: TSpinEdit;
67 SpinEditVoidPercent: TSpinEdit;
68 Splitter1: TSplitter;
69 TabSheet1: TTabSheet;
70 TabSheet2: TTabSheet;
71 TabSheet3: TTabSheet;
72 TabSheetMode: TTabSheet;
73 TrackBarSizeX: TTrackBar;
74 TrackBarSizeY: TTrackBar;
75 procedure APlayerAddExecute(Sender: TObject);
76 procedure APlayerModifyExecute(Sender: TObject);
77 procedure APlayerRemoveExecute(Sender: TObject);
78 procedure ButtonImageBrowseClick(Sender: TObject);
79 procedure CheckBoxCityChange(Sender: TObject);
80 procedure CheckBoxVoidChange(Sender: TObject);
81 procedure ComboBoxMapShapeChange(Sender: TObject);
82 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
83 procedure FormCreate(Sender: TObject);
84 procedure FormDestroy(Sender: TObject);
85 procedure FormShow(Sender: TObject);
86 procedure ListViewPlayersCustomDrawSubItem(Sender: TCustomListView;
87 Item: TListItem; SubItem: Integer; State: TCustomDrawState;
88 var DefaultDraw: Boolean);
89 procedure ListViewPlayersData(Sender: TObject; Item: TListItem);
90 procedure ListViewPlayersDblClick(Sender: TObject);
91 procedure ListViewPlayersKeyPress(Sender: TObject; var Key: char);
92 procedure ListViewPlayersKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
93 );
94 procedure ListViewPlayersSelectItem(Sender: TObject; Item: TListItem;
95 Selected: Boolean);
96 procedure RadioButtonModeLocalChange(Sender: TObject);
97 procedure SpinEditMapSizeXChange(Sender: TObject);
98 procedure SpinEditMapSizeYChange(Sender: TObject);
99 procedure TrackBarSizeYChange(Sender: TObject);
100 procedure TrackBarSizeXChange(Sender: TObject);
101 private
102 Players: TPlayers;
103 public
104 procedure Translate;
105 procedure ReloadView;
106 procedure UpdateInterface;
107 procedure Load(Server: TServer);
108 procedure Save(Server: TServer);
109 end;
110
111var
112 FormNew: TFormNew;
113
114implementation
115
116{$R *.lfm}
117
118uses
119 UFormPlayer, UFormChat, UCore;
120
121resourcestring
122 SGridTypeHexagon = 'Hexagonal';
123 SGridTypeSquare = 'Square';
124 SGridTypeTriangle = 'Triangonal';
125 SGridTypeVoronoi = 'Voronoi random';
126 SWinObjectiveDefeatAllOponents = 'Defeat all oponents';
127 SWinObjectiveDefeatAllCities = 'Defeat all oponents cities';
128 SWinObjectiveCapturePosition = 'Capture position';
129 SWinObjectiveStayAliveForTurns = 'Stay alive for number of turns';
130 SGrowNone = 'None';
131 SGrowPlayerCities = 'Player cities';
132 SGrowPlayerAllCells = 'Player all cells';
133 SGrowAmountByOne = 'By one';
134 SGrowAmountBySquareRoot = 'By square root';
135 SRectangular = 'Rectangular';
136 SRounded = 'Rounded';
137 SFromImageFile = 'From image file';
138
139{ TFormNew }
140
141procedure TFormNew.ListViewPlayersData(Sender: TObject; Item: TListItem);
142begin
143 if (Item.Index >= 0) and (Item.Index < Players.Count) then
144 with TPlayer(Players[Item.Index]) do begin
145 Item.Caption := Name;
146 Item.Data := Players[Item.Index];
147 Item.SubItems.Add(PlayerModeText[Mode]);
148 Item.SubItems.Add(''); // Do not show color text
149 Item.SubItems.Add(IntToStr(StartUnits));
150 end;
151end;
152
153procedure TFormNew.ListViewPlayersDblClick(Sender: TObject);
154begin
155 APlayerModify.Execute;
156end;
157
158procedure TFormNew.ListViewPlayersKeyPress(Sender: TObject; var Key: char);
159begin
160 if (Key = #13) then APlayerModify.Execute;
161end;
162
163procedure TFormNew.ListViewPlayersKeyUp(Sender: TObject; var Key: Word;
164 Shift: TShiftState);
165begin
166 if Key = 45 then APlayerAdd.Execute;
167 if Key = 46 then APlayerRemove.Execute;
168end;
169
170procedure TFormNew.ListViewPlayersSelectItem(Sender: TObject; Item: TListItem;
171 Selected: Boolean);
172begin
173 ReloadView;
174end;
175
176procedure TFormNew.RadioButtonModeLocalChange(Sender: TObject);
177begin
178 UpdateInterface;
179end;
180
181procedure TFormNew.SpinEditMapSizeXChange(Sender: TObject);
182begin
183 TrackBarSizeX.Position := SpinEditMapSizeX.Value;
184end;
185
186procedure TFormNew.SpinEditMapSizeYChange(Sender: TObject);
187begin
188 TrackBarSizeY.Position := SpinEditMapSizeY.Value;
189end;
190
191procedure TFormNew.TrackBarSizeYChange(Sender: TObject);
192begin
193 SpinEditMapSizeY.Value := TrackBarSizeY.Position;
194end;
195
196procedure TFormNew.TrackBarSizeXChange(Sender: TObject);
197begin
198 SpinEditMapSizeX.Value := TrackBarSizeX.Position;
199end;
200
201procedure TFormNew.Translate;
202var
203 LastIndex: Integer;
204begin
205 with ComboBoxGridType do begin
206 LastIndex := ItemIndex;
207 Clear;
208 Items.Add(SGridTypeHexagon);
209 Items.Add(SGridTypeSquare);
210 Items.Add(SGridTypeTriangle);
211 Items.Add(SGridTypeVoronoi);
212 ItemIndex := LastIndex;
213 end;
214 with ComboBoxWinObjective do begin
215 LastIndex := ItemIndex;
216 Clear;
217 Items.Add(SWinObjectiveDefeatAllOponents);
218 Items.Add(SWinObjectiveDefeatAllCities);
219 Items.Add(SWinObjectiveCapturePosition);
220 Items.Add(SWinObjectiveStayAliveForTurns);
221 ItemIndex := LastIndex;
222 end;
223 with ComboBoxMapShape do begin
224 LastIndex := ItemIndex;
225 Clear;
226 Items.Add(SRectangular);
227 Items.Add(SFromImageFile);
228 Items.Add(SRounded);
229 ItemIndex := LastIndex;
230 end;
231 with RadioGroupGrowCells do begin
232 LastIndex := ItemIndex;
233 Items.Clear;
234 Items.Add(SGrowNone);
235 Items.Add(SGrowPlayerCities);
236 Items.Add(SGrowPlayerAllCells);
237 ItemIndex := LastIndex;
238 end;
239 with RadioGroupGrowAmount do begin
240 LastIndex := ItemIndex;
241 Items.Clear;
242 Items.Add(SGrowAmountByOne);
243 Items.Add(SGrowAmountBySquareRoot);
244 ItemIndex := LastIndex;
245 end;
246 Core.CoolTranslator1.TranslateComponentRecursive(Self);
247end;
248
249procedure TFormNew.ReloadView;
250begin
251 ListViewPlayers.Items.Count := Players.Count;
252 ListViewPlayers.Refresh;
253 Translate;
254 UpdateInterface;
255end;
256
257procedure TFormNew.UpdateInterface;
258begin
259 APlayerRemove.Enabled := Assigned(ListViewPlayers.Selected) and (Players.Count > 2);
260 APlayerAdd.Enabled := Players.Count < MaxPlayerCount;
261 APlayerModify.Enabled := Assigned(ListViewPlayers.Selected);
262 EditImageFile.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
263 ButtonImageBrowse.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
264 EditServerAddress.Enabled := RadioButtonModeNetworkServer.Checked;
265 SpinEditServerPort.Enabled := RadioButtonModeNetworkServer.Checked;
266 ListViewServers.Enabled := RadioButtonModeNetworkClient.Checked;
267end;
268
269procedure TFormNew.FormShow(Sender: TObject);
270begin
271 Core.PersistentForm.Load(Self);
272 ReloadView;
273 //Height := Trunc(1.5 * Height);
274 PageControl1.TabIndex := 0;
275end;
276
277procedure TFormNew.ListViewPlayersCustomDrawSubItem(Sender: TCustomListView;
278 Item: TListItem; SubItem: Integer; State: TCustomDrawState;
279 var DefaultDraw: Boolean);
280begin
281 if SubItem = 2 then
282 with ListViewPlayers.Canvas do begin
283 Brush.Color := TPlayer(Item.Data).Color;
284 Brush.Style := bsSolid;
285 FillRect(Item.DisplayRectSubItem(2, drBounds));
286 end;
287end;
288
289procedure TFormNew.FormCreate(Sender: TObject);
290begin
291 Players := TPlayers.Create;
292 FormChat := TFormChat.Create(nil);
293 FormChat.ManualDock(PanelChat, nil, alClient);
294 FormChat.Align := alClient;
295 FormChat.Show;
296 Translate;
297end;
298
299procedure TFormNew.CheckBoxCityChange(Sender: TObject);
300begin
301 SpinEditCityPercent.Enabled := CheckBoxCity.Checked;
302end;
303
304procedure TFormNew.CheckBoxVoidChange(Sender: TObject);
305begin
306 SpinEditVoidPercent.Enabled := CheckBoxVoid.Checked;
307end;
308
309procedure TFormNew.ComboBoxMapShapeChange(Sender: TObject);
310begin
311 ReloadView;
312end;
313
314procedure TFormNew.FormClose(Sender: TObject; var CloseAction: TCloseAction);
315begin
316 Core.PersistentForm.Save(Self);
317end;
318
319procedure TFormNew.APlayerModifyExecute(Sender: TObject);
320begin
321 FormPlayer := TFormPlayer.Create(nil);
322 try
323 if Assigned(ListViewPlayers.Selected) then begin
324 FormPlayer.Load(TPlayer(ListViewPlayers.Selected.Data));
325 if FormPlayer.ShowModal = mrOk then begin
326 FormPlayer.Save(TPlayer(ListViewPlayers.Selected.Data));
327 ReloadView;
328 end;
329 end;
330 finally
331 FormPlayer.Free;
332 end;
333end;
334
335procedure TFormNew.APlayerRemoveExecute(Sender: TObject);
336begin
337 if Assigned(ListViewPlayers.Selected) then begin
338 Players.Remove(ListViewPlayers.Selected.Data);
339 ReloadView;
340 end;
341end;
342
343procedure TFormNew.ButtonImageBrowseClick(Sender: TObject);
344begin
345 OpenPictureDialog1.FileName := EditImageFile.Text;
346 if OpenPictureDialog1.Execute then begin
347 EditImageFile.Text := OpenPictureDialog1.FileName;
348 end;
349end;
350
351procedure TFormNew.APlayerAddExecute(Sender: TObject);
352var
353 NewPlayer: TPlayer;
354begin
355 if Players.Count <= (MaxPlayerCount - 1) then begin
356 NewPlayer := TPlayer.Create;
357 NewPlayer.Id := Players.GetNewPlayerId;
358 NewPlayer.Name := SPlayer + ' ' + IntToStr(NewPlayer.Id);
359 NewPlayer.Color := PlayerColors[Players.Count];
360 NewPlayer.Mode := pmComputer;
361 NewPlayer.Agressivity := caMedium;
362 Players.Add(NewPlayer);
363 ReloadView;
364 end;
365end;
366
367procedure TFormNew.FormDestroy(Sender: TObject);
368begin
369 FreeAndNil(Players);
370 FreeAndNil(FormChat);
371end;
372
373procedure TFormNew.Load(Server: TServer);
374begin
375 with Server do begin
376 CheckBoxSymetricMap.Checked := Game.SymetricMap;
377 CheckBoxVoid.Checked := Game.VoidEnabled;
378 SpinEditVoidPercent.Value := Game.VoidPercentage;
379 SpinEditVoidPercent.Enabled := Game.VoidEnabled;
380 Players.Assign(Game.PlayersSetting);
381 CheckBoxCity.Checked := Game.CityEnabled;
382 SpinEditCityPercent.Value := Game.CityPercentage;
383 SpinEditMapSizeX.Value := Game.Map.Size.X;
384 SpinEditMapSizeY.Value := Game.Map.Size.Y;
385 TrackBarSizeX.Position := Game.Map.Size.X;
386 TrackBarSizeY.Position := Game.Map.Size.Y;
387 RadioGroupGrowAmount.ItemIndex := Integer(Game.GrowAmount);
388 RadioGroupGrowCells.ItemIndex := Integer(Game.GrowCells);
389 ComboBoxGridType.ItemIndex := Integer(Game.MapType) - 1;
390 ComboBoxWinObjective.ItemIndex := Integer(Game.WinObjective);
391 SpinEditNeutralUnits.Value := Game.MaxNeutralUnits;
392 ComboBoxMapShape.ItemIndex := Integer(Game.Map.Shape);
393 EditImageFile.Text := Game.MapImageFileName;
394 CheckBoxFogOfWar.Checked := Game.FogOfWar;
395 CheckBoxBridges.Checked := Game.BridgeEnabled;
396 RadioButtonModeLocal.Checked := Mode = smLocal;
397 RadioButtonModeNetworkClient.Checked := Mode = smNetworkClient;
398 RadioButtonModeNetworkServer.Checked := Mode = smNetworkServer;
399 EditServerAddress.Text := LocalNetworkAddress;
400 SpinEditServerPort.Value := LocalNetworkPort;
401 end;
402end;
403
404procedure TFormNew.Save(Server: TServer);
405begin
406 with Server do begin
407 if RadioButtonModeLocal.Checked then Mode := smLocal
408 else if RadioButtonModeNetworkClient.Checked then Mode := smNetworkClient
409 else if RadioButtonModeNetworkServer.Checked then Mode := smNetworkServer;
410 LocalNetworkAddress := EditServerAddress.Text;
411 LocalNetworkPort := SpinEditServerPort.Value;
412 Game.PlayersSetting.Assign(Players);
413 Game.SymetricMap := CheckBoxSymetricMap.Checked;
414 Game.VoidEnabled := CheckBoxVoid.Checked;
415 Game.VoidPercentage := SpinEditVoidPercent.Value;
416 Game.CityEnabled := CheckBoxCity.Checked;
417 Game.CityPercentage := SpinEditCityPercent.Value;
418 Game.Map.Size := TPoint.Create(SpinEditMapSizeX.Value, SpinEditMapSizeY.Value);
419 Game.GrowAmount := TGrowAmount(RadioGroupGrowAmount.ItemIndex);
420 Game.GrowCells := TGrowCells(RadioGroupGrowCells.ItemIndex);
421 Game.MapType := TMapType(ComboBoxGridType.ItemIndex + 1);
422 Game.WinObjective := TWinObjective(ComboBoxWinObjective.ItemIndex);
423 Game.MaxNeutralUnits := SpinEditNeutralUnits.Value;
424 Game.Map.Shape := TMapShape(ComboBoxMapShape.ItemIndex);
425 Game.MapImageFileName := EditImageFile.Text;
426 Game.FogOfWar := CheckBoxFogOfWar.Checked;
427 Game.BridgeEnabled := CheckBoxBridges.Checked;
428 end;
429end;
430
431end.
432
Note: See TracBrowser for help on using the repository browser.