Alright, so this is going to require completely changing the way the player interacts with the world for building Towers, and where the tower creation/upgrade UI pops up.
Since the toolkit is based on the idea of using grid cells to store data about the status of each cell, like whether a tower is placed there, what kind of tower it is, etc, all of those functions will have to be modified to instead use the actual location focused by the player.
And additional collision checks to see if a Tower already exists within the building range of the targeted location since you can’t bring up the grid data and check it out.
If it were more in line with the default design of the toolkit, I would have happily shared a step-by-step tutorial. I can however point you out toward where to start.
So there are two main functions to determine what lies at the focused location and to determine what happens when you click there. These are DetectGridCells & ManageSelectedActorInteraction functions within BP_PlayerController.
In the first function, you’ll have to store the trace hit location in a new vector variable & remove the part that the highlights the focused grid cell. Then within the second function, if the clicked actor is a grid generator, you’ll have to pass in this location instead of grid cell information to the InitiateTowerCreationSystem function call, then follow that flow of code till the UI blueprints, replacing grid cell data with the hit location. These primarily determine where the tower creation UI will pop up, and ask it to use the hit location rather than the grid cell location.
Once you’ve gotten the UI to show up based on the location, now we have to change the Tower spawn logic to reflect that. So head over to the SpawnTower function in BP_TowerManager and have it use the hit location you stored earlier to spawn the tower instead of calculating it with the grid cell data which it is using by default.
There are more steps involved when it comes to upgrading a selected Tower as well as doing collision checks before spawning. But this should get you started in the right direction. If you have any doubts regarding what’s happening in these functions or the flow of logic, just let me know.