About TCastleTransform Remove from TCastleViewport

when game over check Clear All TCastleTransform;

First : TCastleTransformend.Exists:= false;
Secound : TCastleTransform.Update(const SecondsPassed: Single; var RemoveMe: TRemoveType); RemoveMe := rtRemove;

First = Second?

procedure TTowerManager.ClearAllTower;
var
  i : Integer;
  Tower : TTower;
begin
  for i:= FTowerList.Count - 1 downto 0 do
  begin
    Tower := FTowerList.Items[i];
    if Assigned(Tower) then
    begin
      if Tower.Exists then
      begin
        Tower.Exists := False; //need to TCastleViewport.Items.Remove(Tower) ?
      end;
      FreeAndNil(Tower);
    end;
  end;
end; 

What is TTower ? how do you create them? If you pass an owner to constructor Create (I assume TTower is descendant of TCastleTransform), then Owner will be responsible for their Freeing. If you create them manually and do not pass Owner, but instead store in some List (FTowerList) then you need manually control what you do.

Items object of viewport is not responsible for freeing, it is about being a parent to them and showing them inside a viewport.

1 Like

Thank you ! I asked the wrong question!

TTower = class(TCastleTransform)

TTower.Create;

TCastleViewport.Items.Add(TTower);

dosomething;

TTower.Exists : =false; TCastleViewport.Items.Remove(TTower); this is my question!

FreeAndNil(TTower);