I have been reworking a lot of the logic that runs my player. In the past I had one master class that managed everything, with maybe a controller class to abstract input. Now I am breaking out each type of behavior in its own script and making them completely independent. It looks something like this:
Now I can simply enable or disable behaviors on the fly. An example would be if the player picks up a jet pack, I can turn off the jump and let that new behavior completely change the way the player is controlled on the fly. Here is a sample of how this is working now with walk, jump, shooting and duck.
I still have a lot of work but I am really happy with the way this is coming together.