/classes/RichterActor.py
from Richter.Actor import Actor
from Richter.Sprite import *

class RichterActor(Actor):
	def __init__(self, **kwargs):
		Actor.__init__(self, **kwargs)

		self.defineState('walk_l',
			Sprite(['Sprites/Richter/richter%d.png' % n for n in range(0,8)],
			framerate=10.0, scale=2.0, gravity=(CENTER,BOTTOM)))
		self.defineState('walk_r',
			Sprite(['Sprites/Richter/richter%d.png' % n for n in range(0,8)], mirror=True,
			framerate=10.0, scale=2.0, gravity=(CENTER,BOTTOM)))
		self.defineState('idle_l',
			Sprite("Sprites/Richter/richter0.png", scale=2.0, gravity=(CENTER,BOTTOM)))
		self.defineState('idle_r',
			Sprite("Sprites/Richter/richter0.png", mirror=True, scale=2.0, gravity=(CENTER,BOTTOM)))
		self.setState('idle_r')

		self.delta = [0,0]
		self.jumping = False
		self.grounded = self.collideDelta((0,-1))


	def jump(self):
		if not self.jumping and self.grounded:
			self.delta[1] = 15.0
			self.jumping = True
			self.grounded = False


	def jumpCancel(self):
		self.jumping = False
		if self.delta[1] > 0.0:
			self.delta[1] = 0.0


	def bounce(self):
		self.delta[1] = -self.delta[1]


	def walkRight(self):
		self.delta[0] = 2
		self.setState('walk_r')


	def walkLeft(self):
		self.delta[0] = -2
		self.setState('walk_l')


	def idle(self):
		if self.currentstatename == 'walk_l':
			self.setState('idle_l')
		else:
			self.setState('idle_r')
		self.delta[0] = 0


	def update(self):
		if self.grounded:
			self.delta[1] = 0
		else:
			if self.delta[1] > -15.0:
				self.delta[1] -= 0.5
		if self.grounded and self.delta[0] != 0:
			# Climb up inclines (visually poetic, is it not?)
			if self.collideDelta(self.delta):
				delta = list(self.delta)
				for delta[1] in range(1, abs(delta[0]) + 1):
					if not self.collideDelta(delta):
						self.delta = delta
						break
			# ... and walk down slopes
			else:
				self.delta[1] = -abs(self.delta[0])
		self.move(self.delta)
		self.grounded = self.collideDelta((0,-1))