I'm starting in on some more complicated AI for Oomph and wanted to start a discussion on FSM driven AI in general. Figured there would be at least a couple of dev's here with some experience with it. From what I gather, this may be hard for Oomph because of the 3D nature but I think it could be simplified enough to work without waypoints, navmeshes or constant pathfinding.
Sources:
Steering Behaviors For Autonomous Characters
http://red3d.com/cwr/steer/AI FSM Summary/Tutorial
http://research.ncl.ac.uk/game/mastersdegree/gametechnologies/aifinitestatemachines/AI%20Finite%20State%20Machines%20Tutorial.pdfStates and Behavior Trees
http://aigamedev.com/open/articles/bt-overview/These sources have got me a little more familiar with some concepts behind designing the AI system, but I'm still not clear on how to directly approach it. I started so far by outlining a set of states that the AI could be in (Idling, Pursuing, Evading, Wandering, Following, Etc..) but I now wonder about conditionals that would trigger these states, and also the execution of movement and where to place it.
Stipulations..
The movement system may be too complex to compress into a single state, and I want to separate it in another FSM then just feed it target data and have it compute how to get there. This would be the Motor FSM. It will also have to figure priorities on the fly but for navigational issues such as a giant object in the way and finding a path around it, but still taking full control of the thrust and navigation... Maybe there needs to be a Navi FSM or something to prioritize where the Motor should be pushing the ship to get to the target..?
The Behavior FSM should be dictated by a Priority System FSM which is checking conditional data, objective flags and things like that, then the Behavior FSM reads this information and decides which state it should be in and moves the target point(s) for the Motor FSM which just figures out how much thrust and torque to apply to the vectors to get to the target point.
So it would flow like... [Priority FSM] <-> [Behavior FSM] --> [Motor FSM].
Is this a good approach? Too expensive? Fundamental flaws? Missing critical elements?