The floor of my game (tower defense) is composed by a set of cubes. I wish to change these on some of the waves. I have a list of the changes that need to be made on each wave in a floorController class. However, in order to decide which floor cubes should appear or disappear on each round, I had to assign each cube a bool for each wave (if this is set to true the floor changes in that wave). However this process is tedious and not ease to change and customize in order to experiment with the level. From an architectural programming perspective how can I better structure this system?
Code vs. content
Game level layout is typically stored separately from your codebase. Why? Because as you've discovered, the cost of change for code is higher than the cost of change for say, a text file.
In your simple case, I would opt for something like what Angband does to describe its vaults:
%%%%%% %%%..##..%%% %%....####....%% %......#&&#......% %...4.##+##+##.4...% %.4.4.#&#&9#&#.4.4.% %.4.4.#	&#&#.4.4.% %...4.##+##+##.4...% %......#&&#......% %%....####....%% %%%..##..%%% %%%%%%
The structures you need are drawn/typed by hand in a text file this way, for all your levels or for each level as a separate file. You typically load / parse these either at game startup, or whenever they need to be used (e.g. player has reached level 3). You could write these out as text files initially, then store them in
PlayerPrefs or as text files on server (e.g. Node).
Up to you, but I'd start by using hand-editable text files loaded from the game's own folder.
For booleans, a level matrix may be as simple as:
11101 01111 01110 11111 00100
...this totally depends on how you want to represent a missing vs present floor tile - it doesn't have to consist of 1s and 0s!
If you need more information per cell, you can either use multiple characters with separators (e.g.
|) for each cell, or you can draw multiple maps per level with one character per cell, as shown.
These are your decisions to make, because you'll be the one writing the code to parse / understand this information in order to create levels with it.