I put the AI project on the backburner as I felt like there was some problems with it requiring a great deal of refactoring and instead started on a project focusing on another thing I haven't spent nearly enough time with, cameras.
Initially I started with a third person camera, the first thing I did was reimplement an improved following camera similar to that in my third person game I posted about previously, then I went on to developing a more interesting orbiting camera, adapting the locked camera to a toggleable lock (like that seen in games like Zelda, only currently focused on the player not a target) this video was a large part of the inspiration for this:
How Cameras in Side-Scrollers Work, Itay Keren, GDC
I still have some big problems with the way I've handled the orbit, rotating by a value derived by mouse movement, then panning back a set distance, then looking at the player. The camera ends up spiraling around when you yaw instead of just orbitting, the idea is to replace this with a proper matrix approach but this will require some further research. Despite that flaw, I am extremely happy with the 'whisker' element of this camera, I got the inspiration and basic concept from this video:
50 Game Camera Mistakes, John Nesky, GDC
I developed this further though by borrowing a concept from my study in procedural geometry to determine the camera's behaviour based on which raycasts hit, in this way I avoid any contradictory calls.
Orbit camera, there's a timer on manual control so the system doesn't overide the player immediately.
Whisker system, the raycasts force the camera to pan around when you're about to be obscured.
Locked camera, when you leave a boundry range on an axis the camera begins panning until you reach the centre again, the speed is a product of the distance until the outer boundry when it locks completely making a nice smooth acceleration without ever being able to escape vision.
This actually shares a project with my rail shooter prototype as they both evolved out of the same experiments and I haven't migrated it to its own project yet.