Setting up a rooftile system with controllers
Though I'm not an expert, I tried for fun a (very) simple driver setup that you could try to adapt-

I created two shapes roughly resembling yours above, here shown with two different materials to help visualization. 



(Note that I locked all "manual" rotation and location transform for those shapes, because I wished to hide the transform tools when they were selected!)

the top brown cylindrical has an array that allows for X replication (fixed count), and has a driver using the X location of a "controlling" mesh (a blue cube, named cube.001, here hidden in another layer)



the side yellow square shape had two array modifiers, allowing replication (fixed count) on its X and Y local axis, with a driver for each (always to the blue controlling cube, on its X and Z), and also a driver that allows for the rotation on its X, based on the X rotation (limited by constraints) of the blue cube.



You can add those drivers right clicking on the "count" property, and choosing this menu voice:



You'll find (for a selected object) this new driver settings in the "graph" editor, selecting "drivers" mode, instead of the default "f-curve"

Here is the overall setup:



Now, revealing the blue cube (separate layer) allows for "roof tiles" editing: the cube is in  its initial position



grabbing it along its X, allows for the roof X "expansion"



then, grabbing the blue cube down on its Z, expands the roof tiles on their Y direction:



and finally, rotating the blue cube on its X axis allows the roof tile to rotate in the same way, as needed:



here is an animation showing how it works, and how you can reset it using clear location (altG) and clear rotation (altG)



and here is the file I used (just a simple example)



Note: drivers need to automatically run python scripts, so you need to load the file using the "trusted source"