Have gameplay objects hold a PlayerState pointer instead of a PlayerNumber and indexing back into GameState. This will simplify off-screen players (e.g. CPU ghosts, network replicated human players, >2 players using one NoteField)
be depending on GameState
move ReceptorArrow metrics into NoteSkin ReceptorArrow metrics, code cleanup