Add camera logic, refactor