more camera work and engine refactoring