I've finally got a working top-down camera in place. It is controlled by mouse, spawns at the top of the player and follows terrain's elevation to stay at the constant height. It also provides limited zooming in/out functionality with a mouse scroll wheel. Overall works pretty well.
The main problem was the fact that CE3 provides multiple systems for the same tasks (and all of them equally undocumented) E.g. for the input there are high level Action Maps, which use XML to map input types to in game actions, CryInput module which provides device independent input abstraction, and low level hardware access classes. In Game.dll for some reason there are also two camera systems (
PlayerView and
CameraManager) which seem to do pretty much the same thing (it looks like they were in a process of moving from
PlayerView to
CameraManager which provides some more functionality). Anyway both of these classes seem to be designed for a player-following camera (1st of 3rd person) and so after a while I gave up trying to modify them for our needs.
What I ended up with is a completely new
TopDownCamera class using only low level input and basic
ViewParams struct to implement camera functionality. It may not have some of the fancy features of the higher level solutions but it seems enough for our current needs and still much better then flowgraphs. I also think this is the best approach for creating new stuff, i.e. building it from scratch rather than trying to modify existing code.