convert agent.Observer to Scala

separating out new Camera and Constraints traits