/Richter/Camera.py
import pygame

class Camera:
	stage = None
	resolution = None
	focus = None
	camerapos = None
	bbox = None

	def __init__(self, stage):
		self.stage = stage
		self.resolution = pygame.display.get_surface().get_size()
		self.camerapos = [0,0]


	def setFocus(self, obj):
		self.focus = obj


	def clearFocus(self):
		self.focus = None


	def setPosition(self, x, y):
		self.camerapos = [x, y]


	def setBbox(self, bbox):
		self.bbox = bbox


	def clearBbox(self):
		self.bbox = None


	def update(self):
		if self.focus:
			self.camerapos = [self.focus.position[0] - self.resolution[0]/2,
					  self.focus.position[1] - self.resolution[1]/4]

		if self.bbox:
			# This is a wee bit confusing since Rects assume (0,0) in the
			# upper left, but we want it in the lower left.  Tops and
			# bottoms are reversed.
			if self.bbox.height < self.resolution[1] or self.camerapos[1] < self.bbox.top:
				self.camerapos[1] = self.bbox.top
			elif self.camerapos[1] + self.resolution[1] > self.bbox.bottom:
				self.camerapos[1] = self.bbox.bottom - self.resolution[1]

			if self.bbox.width < self.resolution[0] or self.camerapos[0] < self.bbox.left:
				self.camerapos[0] = self.bbox.left
			elif self.camerapos[0] + self.resolution[0] > self.bbox.right:
				self.camerapos[0] = self.bbox.right - self.resolution[0]

		self.stage.moveTo(self.camerapos[0], self.camerapos[1])