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, UGeometry;
|
---|
10 |
|
---|
11 | type
|
---|
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 |
|
---|
111 | var
|
---|
112 | FormNew: TFormNew;
|
---|
113 |
|
---|
114 | implementation
|
---|
115 |
|
---|
116 | {$R *.lfm}
|
---|
117 |
|
---|
118 | uses
|
---|
119 | UFormPlayer, UFormChat, UCore;
|
---|
120 |
|
---|
121 | resourcestring
|
---|
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 |
|
---|
141 | procedure TFormNew.ListViewPlayersData(Sender: TObject; Item: TListItem);
|
---|
142 | begin
|
---|
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;
|
---|
151 | end;
|
---|
152 |
|
---|
153 | procedure TFormNew.ListViewPlayersDblClick(Sender: TObject);
|
---|
154 | begin
|
---|
155 | APlayerModify.Execute;
|
---|
156 | end;
|
---|
157 |
|
---|
158 | procedure TFormNew.ListViewPlayersKeyPress(Sender: TObject; var Key: char);
|
---|
159 | begin
|
---|
160 | if (Key = #13) then APlayerModify.Execute;
|
---|
161 | end;
|
---|
162 |
|
---|
163 | procedure TFormNew.ListViewPlayersKeyUp(Sender: TObject; var Key: Word;
|
---|
164 | Shift: TShiftState);
|
---|
165 | begin
|
---|
166 | if Key = 45 then APlayerAdd.Execute;
|
---|
167 | if Key = 46 then APlayerRemove.Execute;
|
---|
168 | end;
|
---|
169 |
|
---|
170 | procedure TFormNew.ListViewPlayersSelectItem(Sender: TObject; Item: TListItem;
|
---|
171 | Selected: Boolean);
|
---|
172 | begin
|
---|
173 | ReloadView;
|
---|
174 | end;
|
---|
175 |
|
---|
176 | procedure TFormNew.RadioButtonModeLocalChange(Sender: TObject);
|
---|
177 | begin
|
---|
178 | UpdateInterface;
|
---|
179 | end;
|
---|
180 |
|
---|
181 | procedure TFormNew.SpinEditMapSizeXChange(Sender: TObject);
|
---|
182 | begin
|
---|
183 | TrackBarSizeX.Position := SpinEditMapSizeX.Value;
|
---|
184 | end;
|
---|
185 |
|
---|
186 | procedure TFormNew.SpinEditMapSizeYChange(Sender: TObject);
|
---|
187 | begin
|
---|
188 | TrackBarSizeY.Position := SpinEditMapSizeY.Value;
|
---|
189 | end;
|
---|
190 |
|
---|
191 | procedure TFormNew.TrackBarSizeYChange(Sender: TObject);
|
---|
192 | begin
|
---|
193 | SpinEditMapSizeY.Value := TrackBarSizeY.Position;
|
---|
194 | end;
|
---|
195 |
|
---|
196 | procedure TFormNew.TrackBarSizeXChange(Sender: TObject);
|
---|
197 | begin
|
---|
198 | SpinEditMapSizeX.Value := TrackBarSizeX.Position;
|
---|
199 | end;
|
---|
200 |
|
---|
201 | procedure TFormNew.Translate;
|
---|
202 | var
|
---|
203 | LastIndex: Integer;
|
---|
204 | begin
|
---|
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);
|
---|
247 | end;
|
---|
248 |
|
---|
249 | procedure TFormNew.ReloadView;
|
---|
250 | begin
|
---|
251 | ListViewPlayers.Items.Count := Players.Count;
|
---|
252 | ListViewPlayers.Refresh;
|
---|
253 | Translate;
|
---|
254 | UpdateInterface;
|
---|
255 | end;
|
---|
256 |
|
---|
257 | procedure TFormNew.UpdateInterface;
|
---|
258 | begin
|
---|
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;
|
---|
267 | end;
|
---|
268 |
|
---|
269 | procedure TFormNew.FormShow(Sender: TObject);
|
---|
270 | begin
|
---|
271 | Core.PersistentForm.Load(Self);
|
---|
272 | ReloadView;
|
---|
273 | //Height := Trunc(1.5 * Height);
|
---|
274 | PageControl1.TabIndex := 0;
|
---|
275 | end;
|
---|
276 |
|
---|
277 | procedure TFormNew.ListViewPlayersCustomDrawSubItem(Sender: TCustomListView;
|
---|
278 | Item: TListItem; SubItem: Integer; State: TCustomDrawState;
|
---|
279 | var DefaultDraw: Boolean);
|
---|
280 | begin
|
---|
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;
|
---|
287 | end;
|
---|
288 |
|
---|
289 | procedure TFormNew.FormCreate(Sender: TObject);
|
---|
290 | begin
|
---|
291 | Players := TPlayers.Create;
|
---|
292 | FormChat := TFormChat.Create(nil);
|
---|
293 | FormChat.ManualDock(PanelChat, nil, alClient);
|
---|
294 | FormChat.Align := alClient;
|
---|
295 | FormChat.Show;
|
---|
296 | Translate;
|
---|
297 | end;
|
---|
298 |
|
---|
299 | procedure TFormNew.CheckBoxCityChange(Sender: TObject);
|
---|
300 | begin
|
---|
301 | SpinEditCityPercent.Enabled := CheckBoxCity.Checked;
|
---|
302 | end;
|
---|
303 |
|
---|
304 | procedure TFormNew.CheckBoxVoidChange(Sender: TObject);
|
---|
305 | begin
|
---|
306 | SpinEditVoidPercent.Enabled := CheckBoxVoid.Checked;
|
---|
307 | end;
|
---|
308 |
|
---|
309 | procedure TFormNew.ComboBoxMapShapeChange(Sender: TObject);
|
---|
310 | begin
|
---|
311 | ReloadView;
|
---|
312 | end;
|
---|
313 |
|
---|
314 | procedure TFormNew.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
---|
315 | begin
|
---|
316 | Core.PersistentForm.Save(Self);
|
---|
317 | end;
|
---|
318 |
|
---|
319 | procedure TFormNew.APlayerModifyExecute(Sender: TObject);
|
---|
320 | begin
|
---|
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;
|
---|
333 | end;
|
---|
334 |
|
---|
335 | procedure TFormNew.APlayerRemoveExecute(Sender: TObject);
|
---|
336 | begin
|
---|
337 | if Assigned(ListViewPlayers.Selected) then begin
|
---|
338 | Players.Remove(ListViewPlayers.Selected.Data);
|
---|
339 | ReloadView;
|
---|
340 | end;
|
---|
341 | end;
|
---|
342 |
|
---|
343 | procedure TFormNew.ButtonImageBrowseClick(Sender: TObject);
|
---|
344 | begin
|
---|
345 | OpenPictureDialog1.FileName := EditImageFile.Text;
|
---|
346 | if OpenPictureDialog1.Execute then begin
|
---|
347 | EditImageFile.Text := OpenPictureDialog1.FileName;
|
---|
348 | end;
|
---|
349 | end;
|
---|
350 |
|
---|
351 | procedure TFormNew.APlayerAddExecute(Sender: TObject);
|
---|
352 | var
|
---|
353 | NewPlayer: TPlayer;
|
---|
354 | begin
|
---|
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;
|
---|
365 | end;
|
---|
366 |
|
---|
367 | procedure TFormNew.FormDestroy(Sender: TObject);
|
---|
368 | begin
|
---|
369 | FreeAndNil(Players);
|
---|
370 | FreeAndNil(FormChat);
|
---|
371 | end;
|
---|
372 |
|
---|
373 | procedure TFormNew.Load(Server: TServer);
|
---|
374 | begin
|
---|
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;
|
---|
402 | end;
|
---|
403 |
|
---|
404 | procedure TFormNew.Save(Server: TServer);
|
---|
405 | begin
|
---|
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;
|
---|
429 | end;
|
---|
430 |
|
---|
431 | end.
|
---|
432 |
|
---|