Brian, I saw your comments on resolving the circular dependency. I was a little uncomfortable with the idea of doing GetComponent on a passed in GameObject.
I also like to use [RequireComponent(typeof(whatever))] to help keep me catch my own stupid mistakes. A side benefit is that it seems to help with catching otherwise hidden dependencies.
My idea - create a MonoBehaviour called something like “Character” and put the [RequireComponent] attribute there for Fighter, Mover, Health, etc. Character can live in RPG.Core. Then we can pass around a Character instead of a PlayerController or GameObject. Character can even have wrappers for the public fighter, mover, etc methods to create even more abstraction.
Curious if any parts of the above are good ideas, especially in a team environment where there may be multiple contributors.
References: