added countdown timer, refactored to use abstract classes for camera