From 54e7209c8d02a23e6cc9a2bf8ec42789336a0dd9 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 20 Jul 2022 19:23:31 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Finish=20placement=20as=20per=20pre?= =?UTF-8?q?view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/UfrmMain.lfm | 14 ++++++++++++ Client/UfrmMain.pas | 56 +++++++++++++++++++++++++++++++++------------ 2 files changed, 56 insertions(+), 14 deletions(-) diff --git a/Client/UfrmMain.lfm b/Client/UfrmMain.lfm index 053aa8b..1eaa144 100644 --- a/Client/UfrmMain.lfm +++ b/Client/UfrmMain.lfm @@ -877,6 +877,20 @@ object frmMain: TfrmMain OnDblClick = vstUoaDesignsDblClick OnGetText = vstUoaDesignsGetText end + object btnCancelUOAPlacement: TButton + AnchorSideLeft.Control = vstUoaDesigns + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = vstUoaDesigns + AnchorSideTop.Side = asrCenter + Left = 103 + Height = 47 + Top = 305 + Width = 134 + Caption = 'Cancel' + OnClick = btnCancelUOAPlacementClick + TabOrder = 1 + Visible = False + end end end object tbMain: TToolBar diff --git a/Client/UfrmMain.pas b/Client/UfrmMain.pas index f9ce4d7..ca2f913 100644 --- a/Client/UfrmMain.pas +++ b/Client/UfrmMain.pas @@ -88,6 +88,7 @@ type btnGoTo: TButton; btnRandomPresetDelete: TSpeedButton; btnRandomPresetSave: TSpeedButton; + btnCancelUOAPlacement: TButton; cbRandomPreset: TComboBox; cbStatics: TCheckBox; cbTerrain: TCheckBox; @@ -219,6 +220,7 @@ type var CanShow: Boolean; var HintInfo: THintInfo); procedure btnAddLocationClick(Sender: TObject); procedure btnAddRandomClick(Sender: TObject); + procedure btnCancelUOAPlacementClick(Sender: TObject); procedure btnClearLocationsClick(Sender: TObject); procedure btnClearRandomClick(Sender: TObject); procedure btnDeleteLocationClick(Sender: TObject); @@ -1157,6 +1159,11 @@ begin vdtRandom.EndUpdate; end; +procedure TfrmMain.btnCancelUOAPlacementClick(Sender: TObject); +begin + PlaceUoaDesign(nil); +end; + procedure TfrmMain.btnClearLocationsClick(Sender: TObject); begin if MessageDlg('Are you sure you want to delete all saved locations?', @@ -2014,6 +2021,9 @@ begin RegisterSelectionListener(@PlaceUoaDesign); RegisterHoverListener(@PreviewUoaDesign); + + vstUoaDesigns.Enabled := False; + btnCancelUOAPlacement.Visible := True; end; procedure TfrmMain.vstUoaDesignsGetText(Sender: TBaseVirtualTree; @@ -2319,29 +2329,47 @@ procedure TfrmMain.PlaceUoaDesign(AWorldItem: TWorldItem); var selectedNode: PVirtualNode; header: TUoaDesignHeader; - tiles: TStaticItemList; - newTile: TStaticItem; + item: TWorldItem; + i: Integer; begin UnregisterSelectionListener(@PlaceUoaDesign); + UnregisterHoverListener(@PreviewUoaDesign); + FreeAndNil(FCurrentUoaDesign); + FCurrentUoaDesignAnchor := nil; + vstUoaDesigns.Enabled := True; + btnCancelUOAPlacement.Visible := False; selectedNode := vstUoaDesigns.GetFirstSelected(); if selectedNode = nil then Exit; - vstUoaDesigns.ClearSelection; - - {header := FUoaDesigns.Headers[selectedNode^.Index]; - tiles := FUoaDesigns.LoadTiles(header, AWorldItem.X, AWorldItem.Y, AWorldItem.Z); - try - FUndoList.Clear; - for newTile in tiles do + if AWorldItem = nil then + begin + for i := FVirtualTiles.Count - 1 downto 0 do begin - dmNetwork.Send(TInsertStaticPacket.Create(newTile)); - FUndoList.Add(TDeleteStaticPacket.Create(newTile)); + if FVirtualTiles[i] is TGhostTile then + begin + FScreenBuffer.Delete(FVirtualTiles[i]); + FVirtualTiles.Delete(i); + end; end; - finally - tiles.Free; - end;} + Exit; + end; + + FUndoList.Clear; + for i := FVirtualTiles.Count - 1 downto 0 do + begin + item := FVirtualTiles[i]; + if item is TGhostTile then + begin + dmNetwork.Send(TInsertStaticPacket.Create(TGhostTile(item))); + FUndoList.Add(TDeleteStaticPacket.Create(TGhostTile(item))); + FVirtualTiles.Delete(i); + FScreenBuffer.Delete(item); + end; + end; + + vstUoaDesigns.ClearSelection; end; procedure TfrmMain.PrepareMapCell(AMapCell: TMapCell);