source: trunk/Forms/FormNew.pas

Last change on this file was 397, checked in by chronos, 6 months ago
  • Fixed: Run Randomize only once at startup.
  • Fixed: Store current state of RandSeed to game save.
  • Fixed: Load/store RandSeed as its Cardinal type instead of Integer.
File size: 22.2 KB
Line 
1unit FormNew;
2
3interface
4
5uses
6 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
7 ComCtrls, Spin, ExtCtrls, ActnList, ExtDlgs, Menus, Game, Geometry, Player,
8 GameServer, ServerList, Map, GameSystem, FormList, FormEx, FormChat;
9
10type
11
12 { TFormNew }
13
14 TFormNew = class(TFormEx)
15 ActionList1: TActionList;
16 AServerAdd: TAction;
17 AServerModify: TAction;
18 AServerRemove: TAction;
19 Button1: TButton;
20 Button2: TButton;
21 Button3: TButton;
22 ButtonGameSystems: TButton;
23 ButtonRandomize: TButton;
24 ButtonCancel: TButton;
25 ButtonImageBrowse: TButton;
26 ButtonOk: TButton;
27 CheckBoxBridges: TCheckBox;
28 CheckBoxCity: TCheckBox;
29 CheckBoxCyclicMap: TCheckBox;
30 CheckBoxFogOfWar: TCheckBox;
31 CheckBoxSymetricMap: TCheckBox;
32 CheckBoxVoid: TCheckBox;
33 ComboBoxGameSystem: TComboBox;
34 ComboBoxGridType: TComboBox;
35 ComboBoxMapShape: TComboBox;
36 ComboBoxWinObjective: TComboBox;
37 EditImageFile: TEdit;
38 EditServerAddress: TEdit;
39 Image1: TImage;
40 Label1: TLabel;
41 Label10: TLabel;
42 Label11: TLabel;
43 Label12: TLabel;
44 Label13: TLabel;
45 Label14: TLabel;
46 Label15: TLabel;
47 Label16: TLabel;
48 Label2: TLabel;
49 Label3: TLabel;
50 Label4: TLabel;
51 Label5: TLabel;
52 Label6: TLabel;
53 Label7: TLabel;
54 Label8: TLabel;
55 Label9: TLabel;
56 ListViewServers: TListView;
57 MenuItem4: TMenuItem;
58 MenuItem5: TMenuItem;
59 MenuItem6: TMenuItem;
60 OpenPictureDialog1: TOpenPictureDialog;
61 PageControl1: TPageControl;
62 PageControlWinObjective: TPageControl;
63 ScrollBoxNone: TScrollBox;
64 ScrollBoxStayAliveTurns: TScrollBox;
65 ScrollBoxCaptureCities: TScrollBox;
66 ScrollBoxCaptureCells: TScrollBox;
67 ScrollBoxDefeatEnemies: TScrollBox;
68 ScrollBoxCaptureEntireMap: TScrollBox;
69 ScrollBoxMap: TScrollBox;
70 Panel2: TPanel;
71 ScrollBoxMode: TScrollBox;
72 ScrollBoxRules: TScrollBox;
73 PanelGameSystem: TPanel;
74 PanelButtons: TPanel;
75 PanelChat: TPanel;
76 PopupMenuServers: TPopupMenu;
77 RadioButtonModeLocal: TRadioButton;
78 RadioButtonModeNetworkClient: TRadioButton;
79 RadioButtonModeNetworkServer: TRadioButton;
80 RadioGroupGrowAmount: TRadioGroup;
81 RadioGroupGrowCells: TRadioGroup;
82 SpinEditCityPercent: TSpinEdit;
83 SpinEditMapSizeX: TSpinEdit;
84 SpinEditMapSizeY: TSpinEdit;
85 SpinEditMaxPower: TSpinEdit;
86 SpinEditNeutralUnits: TSpinEdit;
87 SpinEditServerPort: TSpinEdit;
88 SpinEditSpecialCells: TSpinEdit;
89 SpinEditTurns: TSpinEdit;
90 SpinEditVoidPercent: TSpinEdit;
91 Splitter1: TSplitter;
92 TabSheetUnits: TTabSheet;
93 TabSheetCaptureEntireMap: TTabSheet;
94 TabSheetNone: TTabSheet;
95 TabSheetCaptureCells: TTabSheet;
96 TabSheetCaptureCities: TTabSheet;
97 TabSheetDefeatEnemies: TTabSheet;
98 TabSheetPlayers: TTabSheet;
99 TabSheetMap: TTabSheet;
100 TabSheetRules: TTabSheet;
101 TabSheetMode: TTabSheet;
102 TabSheetStayAliveTurns: TTabSheet;
103 TimerMapPreview: TTimer;
104 TrackBarSizeX: TTrackBar;
105 TrackBarSizeY: TTrackBar;
106 procedure AServerAddExecute(Sender: TObject);
107 procedure AServerModifyExecute(Sender: TObject);
108 procedure AServerRemoveExecute(Sender: TObject);
109 procedure ButtonGameSystemsClick(Sender: TObject);
110 procedure ButtonImageBrowseClick(Sender: TObject);
111 procedure ButtonOkClick(Sender: TObject);
112 procedure ButtonRandomizeClick(Sender: TObject);
113 procedure CheckBoxBridgesChange(Sender: TObject);
114 procedure CheckBoxCityChange(Sender: TObject);
115 procedure CheckBoxCyclicMapChange(Sender: TObject);
116 procedure CheckBoxSymetricMapChange(Sender: TObject);
117 procedure CheckBoxVoidChange(Sender: TObject);
118 procedure ComboBoxGameSystemChange(Sender: TObject);
119 procedure ComboBoxGridTypeChange(Sender: TObject);
120 procedure ComboBoxMapShapeChange(Sender: TObject);
121 procedure ComboBoxWinObjectiveChange(Sender: TObject);
122 procedure EditImageFileChange(Sender: TObject);
123 procedure FormCreate(Sender: TObject);
124 procedure FormDestroy(Sender: TObject);
125 procedure FormShow(Sender: TObject);
126 procedure Image1Resize(Sender: TObject);
127 procedure ListViewServersData(Sender: TObject; Item: TListItem);
128 procedure ListViewServersKeyPress(Sender: TObject; var Key: char);
129 procedure ListViewServersSelectItem(Sender: TObject; Item: TListItem;
130 Selected: Boolean);
131 procedure PageControl1Change(Sender: TObject);
132 procedure RadioButtonModeLocalChange(Sender: TObject);
133 procedure SpinEditCityPercentChange(Sender: TObject);
134 procedure SpinEditMapSizeXChange(Sender: TObject);
135 procedure SpinEditMapSizeYChange(Sender: TObject);
136 procedure SpinEditMaxPowerChange(Sender: TObject);
137 procedure SpinEditNeutralUnitsChange(Sender: TObject);
138 procedure SpinEditVoidPercentChange(Sender: TObject);
139 procedure TabSheetMapShow(Sender: TObject);
140 procedure TimerMapPreviewTimer(Sender: TObject);
141 procedure TrackBarSizeYChange(Sender: TObject);
142 procedure TrackBarSizeXChange(Sender: TObject);
143 private
144 FServer: TServer;
145 ServerList: TServerList;
146 GamePreview: TGame;
147 MapPreviewRedrawPending: Boolean;
148 NewRandSeed: Cardinal;
149 FormPlayers: TFormList;
150 FormChat: TFormChat;
151 procedure LoadGame(Game: TGame);
152 procedure SaveGame(Game: TGame);
153 procedure Load(Server: TServer);
154 procedure Save(Server: TServer);
155 procedure MapPreviewPaint;
156 procedure MapPreviewRedraw;
157 procedure ReloadGameSystemsMenu;
158 procedure SetServer(AValue: TServer);
159 public
160 procedure Translate;
161 procedure ReloadView;
162 procedure UpdateInterface;
163 property Server: TServer read FServer write SetServer;
164 end;
165
166
167implementation
168
169{$R *.lfm}
170
171uses
172 Core, FormServer, ClientGUI, FormClient, FormGameSystems, MapType;
173
174resourcestring
175 SWinObjectiveNone = 'None';
176 SWinObjectiveDefeatAllOponents = 'Defeat all oponents';
177 SWinObjectiveDefeatAllCities = 'Defeat all oponents cities';
178 SWinObjectiveCapturePosition = 'Capture all special cells';
179 SWinObjectiveStayAliveForTurns = 'Stay alive for number of turns';
180 SWinObjectiveCaptureEntireMap = 'Capture entire map';
181 SGrowNone = 'None';
182 SGrowPlayerCities = 'Player cities';
183 SGrowPlayerAllCells = 'Player all cells';
184 SGrowAmountByOne = 'By one';
185 SGrowAmountBySquareRoot = 'By square root';
186 SRectangular = 'Rectangular';
187 SRounded = 'Rounded';
188 SFromImageFile = 'From image file';
189 SRemoveServer = 'Remove server';
190 SRemoveServerQuery = 'Do you want to remove server?';
191
192{ TFormNew }
193
194procedure TFormNew.ListViewServersData(Sender: TObject; Item: TListItem);
195begin
196 if Item.Index < ServerList.Items.Count then
197 with TServerInfo(ServerList.Items[Item.Index]) do begin
198 Item.Caption := Name;
199 Item.Data := ServerList.Items[Item.Index];
200 Item.SubItems.Add(Address + ':' + IntToStr(Port));
201 end;
202end;
203
204procedure TFormNew.ListViewServersKeyPress(Sender: TObject; var Key: char);
205begin
206 if Key = #13 then AServerModify.Execute;
207end;
208
209procedure TFormNew.ListViewServersSelectItem(Sender: TObject; Item: TListItem;
210 Selected: Boolean);
211begin
212 UpdateInterface;
213end;
214
215procedure TFormNew.PageControl1Change(Sender: TObject);
216begin
217 MapPreviewRedraw;
218end;
219
220procedure TFormNew.RadioButtonModeLocalChange(Sender: TObject);
221begin
222 UpdateInterface;
223end;
224
225procedure TFormNew.SpinEditCityPercentChange(Sender: TObject);
226begin
227 MapPreviewRedraw;
228end;
229
230procedure TFormNew.SpinEditMapSizeXChange(Sender: TObject);
231begin
232 TrackBarSizeX.Position := SpinEditMapSizeX.Value;
233 MapPreviewRedraw;
234end;
235
236procedure TFormNew.SpinEditMapSizeYChange(Sender: TObject);
237begin
238 TrackBarSizeY.Position := SpinEditMapSizeY.Value;
239 MapPreviewRedraw;
240end;
241
242procedure TFormNew.SpinEditMaxPowerChange(Sender: TObject);
243begin
244 UpdateInterface;
245end;
246
247procedure TFormNew.SpinEditNeutralUnitsChange(Sender: TObject);
248begin
249 MapPreviewRedraw;
250end;
251
252procedure TFormNew.SpinEditVoidPercentChange(Sender: TObject);
253begin
254 MapPreviewRedraw;
255end;
256
257procedure TFormNew.TabSheetMapShow(Sender: TObject);
258begin
259 MapPreviewRedraw;
260end;
261
262procedure TFormNew.TimerMapPreviewTimer(Sender: TObject);
263begin
264 if MapPreviewRedrawPending then begin
265 MapPreviewPaint;
266 MapPreviewRedrawPending := False;
267 end;
268end;
269
270procedure TFormNew.TrackBarSizeYChange(Sender: TObject);
271begin
272 SpinEditMapSizeY.Value := TrackBarSizeY.Position;
273end;
274
275procedure TFormNew.TrackBarSizeXChange(Sender: TObject);
276begin
277 SpinEditMapSizeX.Value := TrackBarSizeX.Position;
278end;
279
280procedure TFormNew.LoadGame(Game: TGame);
281begin
282 with Game do begin
283 CheckBoxSymetricMap.Checked := SymetricMap;
284 CheckBoxCyclicMap.Checked := CyclicMap;
285 CheckBoxVoid.Checked := VoidEnabled;
286 SpinEditVoidPercent.Value := VoidPercentage;
287 SpinEditVoidPercent.Enabled := VoidEnabled;
288 CheckBoxCity.Checked := CityEnabled;
289 SpinEditCityPercent.Value := CityPercentage;
290 SpinEditMapSizeX.Value := Map.Size.X;
291 SpinEditMapSizeY.Value := Map.Size.Y;
292 TrackBarSizeX.Position := Map.Size.X;
293 TrackBarSizeY.Position := Map.Size.Y;
294 RadioGroupGrowAmount.ItemIndex := Integer(GrowAmount);
295 RadioGroupGrowCells.ItemIndex := Integer(GrowCells);
296 ComboBoxGridType.ItemIndex := ComboBoxGridType.Items.IndexOfObject(TObject(MapType));
297 ComboBoxWinObjective.ItemIndex := Integer(WinObjective);
298 SpinEditNeutralUnits.Value := MaxNeutralUnits;
299 ComboBoxMapShape.ItemIndex := Integer(Map.Shape);
300 EditImageFile.Text := MapImageFileName;
301 CheckBoxFogOfWar.Checked := FogOfWar;
302 CheckBoxBridges.Checked := BridgeEnabled;
303 SpinEditMaxPower.Value := MaxPower;
304 SpinEditTurns.Value := StayAliveForDefinedTurns;
305 SpinEditSpecialCells.Value := SpecialCaptureCellCount;
306 ComboBoxGameSystem.ItemIndex := ComboBoxGameSystem.Items.IndexOf(GameSystem.GetName);
307 if (ComboBoxGameSystem.ItemIndex = -1) and (ComboBoxGameSystem.Items.Count > 0) then
308 ComboBoxGameSystem.ItemIndex := 0;
309 end;
310end;
311
312procedure TFormNew.SaveGame(Game: TGame);
313begin
314 with Game do begin
315 StoredRandSeed := NewRandSeed;
316 SymetricMap := CheckBoxSymetricMap.Checked;
317 CyclicMap := CheckBoxCyclicMap.Checked;
318 VoidEnabled := CheckBoxVoid.Checked;
319 VoidPercentage := SpinEditVoidPercent.Value;
320 CityEnabled := CheckBoxCity.Checked;
321 CityPercentage := SpinEditCityPercent.Value;
322 Map.Cyclic := CyclicMap;
323 Map.Size := TPoint.Create(SpinEditMapSizeX.Value, SpinEditMapSizeY.Value);
324 GrowAmount := TGrowAmount(RadioGroupGrowAmount.ItemIndex);
325 GrowCells := TGrowCells(RadioGroupGrowCells.ItemIndex);
326 MapType := TMapType(ComboBoxGridType.Items.Objects[ComboBoxGridType.ItemIndex]);
327 WinObjective := TWinObjective(ComboBoxWinObjective.ItemIndex);
328 MaxNeutralUnits := SpinEditNeutralUnits.Value;
329 Map.Shape := TMapShape(ComboBoxMapShape.ItemIndex);
330 MapImageFileName := EditImageFile.Text;
331 FogOfWar := CheckBoxFogOfWar.Checked;
332 BridgeEnabled := CheckBoxBridges.Checked;
333 MaxPower := SpinEditMaxPower.Value;
334 StayAliveForDefinedTurns := SpinEditTurns.Value;
335 SpecialCaptureCellCount := SpinEditSpecialCells.Value;
336 end;
337end;
338
339procedure TFormNew.MapPreviewRedraw;
340begin
341 MapPreviewRedrawPending := True;
342end;
343
344procedure TFormNew.ReloadGameSystemsMenu;
345var
346 I: Integer;
347 LastSystem: Pointer;
348begin
349 if ComboBoxGameSystem.ItemIndex <> -1 then
350 LastSystem := ComboBoxGameSystem.Items.Objects[ComboBoxGameSystem.ItemIndex]
351 else LastSystem := nil;
352 ComboBoxGameSystem.Items.BeginUpdate;
353 try
354 while ComboBoxGameSystem.Items.Count > Core.Core.GameSystems.Count do
355 ComboBoxGameSystem.Items.Delete(ComboBoxGameSystem.Items.Count - 1);
356 while ComboBoxGameSystem.Items.Count < Core.Core.GameSystems.Count do
357 ComboBoxGameSystem.Items.Add('');
358 for I := 0 to Core.Core.GameSystems.Count - 1 do begin
359 ComboBoxGameSystem.Items[I] := Core.Core.GameSystems[I].GetName;
360 ComboBoxGameSystem.Items.Objects[I] := Core.Core.GameSystems[I];
361 end;
362 if Assigned(LastSystem) then
363 ComboBoxGameSystem.ItemIndex := ComboBoxGameSystem.Items.IndexOfObject(LastSystem);
364 if (ComboBoxGameSystem.ItemIndex = -1) and (ComboBoxGameSystem.Items.Count > 0) then
365 ComboBoxGameSystem.ItemIndex := 0;
366 finally
367 ComboBoxGameSystem.Items.EndUpdate;
368 end;
369 if (ComboBoxGameSystem.ItemIndex = -1) and (ComboBoxGameSystem.Items.Count > 0) then
370 ComboBoxGameSystem.ItemIndex := 0;
371end;
372
373procedure TFormNew.SetServer(AValue: TServer);
374begin
375 if FServer = AValue then Exit;
376 FServer := AValue;
377 if Assigned(FServer) then begin
378 Load(FServer);
379 FormPlayers.List := FServer.Game.Players.BaseItemList;
380 end else begin
381 FormPlayers.List := nil;
382 end;
383end;
384
385procedure TFormNew.MapPreviewPaint;
386var
387 Client: TClientGUI;
388 Bitmap: TBitmap;
389begin
390 GamePreview.GameSystem.Assign(FServer.Game.GameSystem);
391 SaveGame(GamePreview);
392 GamePreview.GeneratePlayers := False;
393 GamePreview.New;
394 GamePreview.CurrentPlayer := GamePreview.Players.First;
395 Bitmap := Image1.Picture.Bitmap;
396 Bitmap.SetSize(Image1.Width, Image1.Height);
397 Client := TClientGUI.Create;
398 Client.Game := GamePreview;
399 Client.View.Game := GamePreview;
400 Client.View.DestRect := TRect.Create(TPoint.Create(0, 0), TPoint.Create(Image1.Width, Image1.Height));
401 Client.View.ZoomAll;
402 //Client.ControlPlayer := GamePreview.Players.First;
403 Client.CellGridVisible := Core.Core.CellGridVisible;
404 Client.UnitShapeVisible := Core.Core.UnitShapeVisible;
405 Bitmap.Canvas.Brush.Color := MapBackgroundColor; //clBackground; //PaintBox1.GetColorResolvingParent;
406 Bitmap.Canvas.FillRect(0, 0, Bitmap.Width, Bitmap.Height);
407 Client.Paint(Bitmap.Canvas, Client.View);
408 Client.Free;
409end;
410
411procedure TFormNew.Translate;
412var
413 LastIndex: Integer;
414begin
415 with ComboBoxGridType do begin
416 LastIndex := ItemIndex;
417 Clear;
418 Items.AddObject(SGridTypeHexagonVertical, TObject(mtHexagonVertical));
419 Items.AddObject(SGridTypeHexagonHorizontal, TObject(mtHexagonHorizontal));
420 Items.AddObject(SGridTypeSquare, TObject(mtSquare));
421 Items.AddObject(SGridTypeTriangle, TObject(mtTriangle));
422 Items.AddObject(SGridTypeRandom, TObject(mtRandom));
423 Items.AddObject(SGridTypeIsometric, TObject(mtIsometric));
424 ItemIndex := LastIndex;
425 end;
426 with ComboBoxWinObjective do begin
427 LastIndex := ItemIndex;
428 Clear;
429 Items.Add(SWinObjectiveNone);
430 Items.Add(SWinObjectiveDefeatAllOponents);
431 Items.Add(SWinObjectiveDefeatAllCities);
432 Items.Add(SWinObjectiveCapturePosition);
433 Items.Add(SWinObjectiveStayAliveForTurns);
434 Items.Add(SWinObjectiveCaptureEntireMap);
435 ItemIndex := LastIndex;
436 end;
437 with ComboBoxMapShape do begin
438 LastIndex := ItemIndex;
439 Clear;
440 Items.Add(SRectangular);
441 Items.Add(SFromImageFile);
442 Items.Add(SRounded);
443 ItemIndex := LastIndex;
444 end;
445 with RadioGroupGrowCells do begin
446 LastIndex := ItemIndex;
447 Items.Clear;
448 Items.Add(SGrowNone);
449 Items.Add(SGrowPlayerCities);
450 Items.Add(SGrowPlayerAllCells);
451 ItemIndex := LastIndex;
452 end;
453 with RadioGroupGrowAmount do begin
454 LastIndex := ItemIndex;
455 Items.Clear;
456 Items.Add(SGrowAmountByOne);
457 Items.Add(SGrowAmountBySquareRoot);
458 ItemIndex := LastIndex;
459 end;
460 Core.Core.Translator1.TranslateComponentRecursive(Self);
461end;
462
463procedure TFormNew.ReloadView;
464begin
465 ListViewServers.Items.Count := ServerList.Items.Count;
466 ListViewServers.Refresh;
467 UpdateInterface;
468end;
469
470procedure TFormNew.UpdateInterface;
471var
472 WinObjective: TWinObjective;
473begin
474 ComboBoxGridType.Enabled := FServer.Game.GameSystem.PreferedMapType = mtNone;
475 if FServer.Game.GameSystem.PreferedMapType <> mtNone then
476 ComboBoxGridType.ItemIndex := ComboBoxGridType.Items.IndexOfObject(TObject(FServer.Game.GameSystem.PreferedMapType));
477 EditImageFile.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
478 ButtonImageBrowse.Enabled := ComboBoxMapShape.ItemIndex = Integer(msImage);
479 EditServerAddress.Enabled := RadioButtonModeNetworkServer.Checked;
480 SpinEditServerPort.Enabled := RadioButtonModeNetworkServer.Checked;
481 ListViewServers.Enabled := RadioButtonModeNetworkClient.Checked;
482 PanelChat.Visible := RadioButtonModeNetworkClient.Checked or RadioButtonModeNetworkServer.Checked;
483 SpinEditNeutralUnits.MaxValue := SpinEditMaxPower.Value;
484 AServerRemove.Enabled := RadioButtonModeNetworkClient.Checked and Assigned(ListViewServers.Selected);
485 AServerAdd.Enabled := RadioButtonModeNetworkClient.Checked;
486 AServerModify.Enabled := RadioButtonModeNetworkClient.Checked;
487 WinObjective := TWinObjective(ComboBoxWinObjective.ItemIndex);
488 case WinObjective of
489 woNone: PageControlWinObjective.TabIndex := PageControlWinObjective.IndexOf(TabSheetNone);
490 woDefeatAllOponents: PageControlWinObjective.TabIndex := PageControlWinObjective.IndexOf(TabSheetDefeatEnemies);
491 woDefeatAllOponentsCities: PageControlWinObjective.TabIndex := PageControlWinObjective.IndexOf(TabSheetCaptureCities);
492 woSpecialCaptureCell: PageControlWinObjective.TabIndex := PageControlWinObjective.IndexOf(TabSheetCaptureCells);
493 woStayAliveForDefinedTurns: PageControlWinObjective.TabIndex := PageControlWinObjective.IndexOf(TabSheetStayAliveTurns);
494 woCaptureEntireMap: PageControlWinObjective.TabIndex := PageControlWinObjective.IndexOf(TabSheetCaptureEntireMap);
495 end;
496end;
497
498procedure TFormNew.FormShow(Sender: TObject);
499begin
500 NewRandSeed := RandSeed;
501 ReloadView;
502 //Height := Trunc(1.5 * Height);
503 //PageControl1.TabIndex := 0;
504 {$IFNDEF DEBUG}
505 TabSheetMode.TabVisible := False;
506 TabSheetMode.Enabled := False;
507 {$ENDIF}
508end;
509
510procedure TFormNew.Image1Resize(Sender: TObject);
511begin
512 MapPreviewRedraw;
513end;
514
515procedure TFormNew.FormCreate(Sender: TObject);
516begin
517 GamePreview := TGame.Create;
518 ServerList := TServerList.Create;
519 FormChat := TFormChat.Create(nil);
520 FormChat.ManualDock(PanelChat, nil, alClient);
521 FormChat.Align := alClient;
522 FormChat.Show;
523 FormPlayers := TFormList.Create(nil);
524 FormPlayers.MinItemCount := MinPlayerCount;
525 FormPlayers.MaxItemCount := MaxPlayerCount;
526 FormPlayers.ManualDock(Panel2, nil, alClient);
527 FormPlayers.Align := alClient;
528 FormPlayers.Visible := True;
529 FormPlayers.Images := Core.Core.ImageListSmall;
530 Translate;
531end;
532
533procedure TFormNew.CheckBoxCityChange(Sender: TObject);
534begin
535 SpinEditCityPercent.Enabled := CheckBoxCity.Checked;
536 MapPreviewRedraw;
537end;
538
539procedure TFormNew.CheckBoxCyclicMapChange(Sender: TObject);
540begin
541 MapPreviewRedraw;
542end;
543
544procedure TFormNew.CheckBoxSymetricMapChange(Sender: TObject);
545begin
546 MapPreviewRedraw;
547end;
548
549procedure TFormNew.CheckBoxVoidChange(Sender: TObject);
550begin
551 SpinEditVoidPercent.Enabled := CheckBoxVoid.Checked;
552 MapPreviewRedraw;
553end;
554
555procedure TFormNew.ComboBoxGameSystemChange(Sender: TObject);
556begin
557 FServer.Game.GameSystem.Assign(TGameSystem(ComboBoxGameSystem.Items.Objects[ComboBoxGameSystem.ItemIndex]));
558 UpdateInterface;
559 MapPreviewRedraw;
560end;
561
562procedure TFormNew.ComboBoxGridTypeChange(Sender: TObject);
563begin
564 MapPreviewRedraw;
565end;
566
567procedure TFormNew.ComboBoxMapShapeChange(Sender: TObject);
568begin
569 ReloadView;
570 MapPreviewRedraw;
571end;
572
573procedure TFormNew.ComboBoxWinObjectiveChange(Sender: TObject);
574begin
575 UpdateInterface;
576end;
577
578procedure TFormNew.EditImageFileChange(Sender: TObject);
579begin
580 MapPreviewRedraw;
581end;
582
583procedure TFormNew.AServerAddExecute(Sender: TObject);
584var
585 NewServerInfo: TServerInfo;
586 FormServer: TFormServer;
587begin
588 FormServer := TFormServer.Create(nil);
589 try
590 NewServerInfo := TServerInfo.Create;
591 FormServer.ServerInfo := NewServerInfo;
592 if FormServer.ShowModal = mrOK then begin
593 ServerList.Items.Add(NewServerInfo);
594 ReloadView;
595 end else NewServerInfo.Free;
596 finally
597 FormServer.Free;
598 end;
599end;
600
601procedure TFormNew.AServerModifyExecute(Sender: TObject);
602var
603 ServerInfo: TServerInfo;
604 FormServer: TFormServer;
605begin
606 FormServer := TFormServer.Create(nil);
607 try
608 ServerInfo := TServerInfo(ListViewServers.Selected.Data);
609 FormServer.ServerInfo := ServerInfo;
610 if FormServer.ShowModal = mrOK then begin
611 ReloadView;
612 end;
613 finally
614 FormServer.Free;
615 end;
616end;
617
618procedure TFormNew.AServerRemoveExecute(Sender: TObject);
619var
620 I: Integer;
621begin
622 if MessageDlg(SRemoveServer, SRemoveServerQuery,
623 TMsgDlgType.mtConfirmation, [mbCancel, mbOk], 0) = mrOk then begin
624 for I := ListViewServers.Items.Count - 1 downto 0 do
625 if ListViewServers.Items[I].Selected then
626 ServerList.Items.Delete(I);
627 ReloadView;
628 end;
629end;
630
631procedure TFormNew.ButtonGameSystemsClick(Sender: TObject);
632var
633 FormGameSystems: TFormGameSystems;
634begin
635 FormGameSystems := TFormGameSystems.Create(nil);
636 try
637 FormGameSystems.GameSystems := Core.Core.GameSystems;
638 FormGameSystems.ShowModal;
639 ReloadGameSystemsMenu;
640 finally
641 FreeAndNil(FormGameSystems);
642 end;
643end;
644
645procedure TFormNew.ButtonImageBrowseClick(Sender: TObject);
646begin
647 OpenPictureDialog1.FileName := EditImageFile.Text;
648 if OpenPictureDialog1.Execute then begin
649 EditImageFile.Text := OpenPictureDialog1.FileName;
650 end;
651end;
652
653procedure TFormNew.ButtonOkClick(Sender: TObject);
654begin
655 Save(FServer);
656end;
657
658procedure TFormNew.ButtonRandomizeClick(Sender: TObject);
659begin
660 NewRandSeed := RandSeed;
661 MapPreviewRedraw;
662end;
663
664procedure TFormNew.CheckBoxBridgesChange(Sender: TObject);
665begin
666 MapPreviewRedraw;
667end;
668
669procedure TFormNew.FormDestroy(Sender: TObject);
670begin
671 FreeAndNil(ServerList);
672 FreeAndNil(FormChat);
673 FreeAndNil(FormPlayers);
674 FreeAndNil(GamePreview);
675end;
676
677procedure TFormNew.Load(Server: TServer);
678begin
679 ReloadGameSystemsMenu;
680 with Server do begin
681 RadioButtonModeLocal.Checked := Mode = smLocal;
682 RadioButtonModeNetworkClient.Checked := Mode = smNetworkClient;
683 RadioButtonModeNetworkServer.Checked := Mode = smNetworkServer;
684 EditServerAddress.Text := LocalNetworkAddress;
685 SpinEditServerPort.Value := LocalNetworkPort;
686 end;
687 ServerList.Assign(Core.Core.ServerList);
688 LoadGame(Server.Game);
689end;
690
691procedure TFormNew.Save(Server: TServer);
692begin
693 with Server do begin
694 if RadioButtonModeLocal.Checked then Mode := smLocal
695 else if RadioButtonModeNetworkClient.Checked then Mode := smNetworkClient
696 else if RadioButtonModeNetworkServer.Checked then Mode := smNetworkServer;
697 LocalNetworkAddress := EditServerAddress.Text;
698 LocalNetworkPort := SpinEditServerPort.Value;
699 if Assigned(ListViewServers.Selected) then begin
700 RemoteNetworkAddress := TServerInfo(ListViewServers.Selected.Data).Address;
701 RemoteNetworkPort := TServerInfo(ListViewServers.Selected.Data).Port;
702 end else begin
703 RemoteNetworkAddress := '';
704 RemoteNetworkPort := 0;
705 end;
706 end;
707 Core.Core.ServerList.Assign(ServerList);
708 SaveGame(Server.Game);
709end;
710
711end.
712
Note: See TracBrowser for help on using the repository browser.