Alright, so before going to the UI side of things, you will have to modify the base structure of the struct data arrays that contain information about all the grid generators & grid cells. The ‘Struct_GridCellData’ by default, can hold information about the Grid Vector, Tower Actor reference, & an enumerated type to hold the Grid Cell Status. You will have to add another Tower actor element to hold reference to the second Tower, & edit the GridStatus enum by adding a new entry to depict a cell that contains two towers.
Now, on the UI front, the Tower Build & Functions menu are constructed dynamically based on the information specified in the Tower Data Array & Tower Functions Array [both stored within the Game Instance class]. The ‘Widget_TowerConstructor’ class houses the logic for the same, & you can add custom logic at the end of the ‘CreateTowerBuildButtons’ & ‘CreateTowerFunctionButtons’ to add your new custom Change button widget. At the start of these functions, you will have to add extra code to get ‘SelectedGridGeneratorIndex’ & ‘SelectedGridCellIndex’ from the player controller class & then the data associated with the corresponding grid cell from Grid Manager. Based on the grid cell status thus obtained, you can determine whether to add the aforementioned Change button or not.
As mentioned previously, you can use the Grid Cell Status to accomplish this. The ‘ManagedSelectedActorInteraction’ function in Player Controller evaluates actors selected by the player & determines what to do based on that. So you can use the Grid Cell Status here to ensure that the Tower Functions menu don’t pop up when the player clicks on the base tower in a grid cell that already has two towers.
As for the ‘Repair’ ability, you can modify the ‘Event Repair Armor’ interface function in the Parent Tower blueprint to first get information about all towers in the associated grid cell from the Grid Manager, & then apply repair logic to both towers in the cell.
The toolkit does not support multiple upgrade paths for towers by default. So this is going to require quite a lot of changes. I’ll get back to you once I figure a good way to approach this problem
I’d rather keep it going as part of the product support process. I may not be able to provide detailed screenshot based workflow as the required features start straying too far away from the base design, but I can guide you in the right direction in order to make the necessary modifications.