view bGrease/color.py @ 119:2399a8c3da0c

Modified EquipmentSlot to display an image instead of a text. Added EquipmentGui class, which handles the equipment slots of the player screen. An EquipmentGui instance will be created in the InventoryGUI constructor. The initializeInventory method of the Hud class supplies the players inventory and equipment to the InventoryGUI constructor.
author KarstenBock@gmx.net
date Wed, 05 Oct 2011 11:04:39 +0200
parents ff3e395abf91
children a6bbb732b27b
line wrap: on
line source


class RGBA(object):
	"""Four channel color representation.

	RGBA colors are floating point color representations with color channel
	values between (0..1). Colors may be initialized from 3 or 4 floating
	point numbers or a hex string::

		RGBA(1.0, 1.0, 1.0) # Alpha defaults to 1.0
		RGBA(1.0, 1.0, 0, 0.5)
		RGBA("#333")
		RGBA("#7F7F7F")
	
	Individual color channels can be accessed by attribute name, or the
	color object can be treated as a sequence of 4 floats.
	"""

	def __init__(self, r_or_colorstr, g=None, b=None, a=None):
		if isinstance(r_or_colorstr, str):
			assert g is b is a is None, "Ambiguous color arguments" 
			self.r, self.g, self.b, self.a = self._parse_colorstr(r_or_colorstr)
		elif g is b is a is None:
			try:
				self.r, self.g, self.b, self.a = r_or_colorstr
			except ValueError:
				self.r, self.g, self.b = r_or_colorstr
				self.a = 1.0
		else:
			self.r = r_or_colorstr
			self.g = g
			self.b = b
			self.a = a
		if self.a is None:
			self.a = 1.0
	
	def _parse_colorstr(self, colorstr):
		length = len(colorstr)
		if not colorstr.startswith("#") or length not in (4, 5, 7, 9):
			raise ValueError("Invalid color string: " + colorstr)
		if length <= 5:
			parsed = [int(c*2, 16) / 255.0 for c in colorstr[1:]]
		else:
			parsed = [int(colorstr[i:i+2], 16) / 255.0 for i in range(1, length, 2)]
		if len(parsed) == 3:
			parsed.append(1.0)
		return parsed
	
	def __len__(self):
		return 4
	
	def __getitem__(self, item):
		return (self.r, self.g, self.b, self.a)[item]
	
	def __iter__(self):
		return iter((self.r, self.g, self.b, self.a))
	
	def __eq__(self, other):
		return tuple(self) == tuple(other)
	
	def __repr__(self):
		return "%s(%.2f, %.2f, %.2f, %.2f)" % (self.__class__.__name__, 
			self.r, self.g, self.b, self.a)