import pygame
import main
main.init()
import data, color
from color import white

def init():
	global robo_image0
	global robo_image3
	global robo_image4
	global robo_image1
	global robo_image2
	robo_image0 = data.load_img('ROBO.png')
	robo_image3 = data.load_img('TWISTER0.png')
	robo_image4 = data.load_img('TWISTER1.png')
	robo_image1 = data.load_img('ROBO0.png')
	robo_image2 = pygame.transform.flip(robo_image1, True, False)
	robo_image0.set_colorkey(white)
	robo_image1.set_colorkey(white)
	robo_image2.set_colorkey(white)
	robo_image3.set_colorkey(white)
	robo_image4.set_colorkey(white)
	robo_image4.convert()
	robo_image0.convert()
	robo_image1.convert()
	robo_image2.convert()
	robo_image3.convert()

class robo(pygame.sprite.Sprite):
	def __init__(self,limit):
		pygame.sprite.Sprite.__init__(self)
		self.limit = limit
		self.image = robo_image0
		self.image0 = robo_image3
		self.rect = self.image.get_rect()
		self.rect0 = self.image0.get_rect()
		self.rect.center = (320,240)
		self.rect0.center = (320,270)
		self.cnt = 0
		self.switch = False
		self.speed = 20
		self.destx, self.desty = 320,240
		self.front = self.rect.center
		self.dest = []

	def draw(self,screen):
		screen.blit(self.image,self.rect)
		screen.blit(self.image0,self.rect0)

	def update(self):
		if self.cnt == 0:
			self.switch = not self.switch
			if self.switch:
				self.image0 = robo_image3
			else:
				self.image0 = robo_image4
			self.cnt = self.speed
		else:
			self.cnt -= 1
		if self.destx != self.rect.centerx or self.desty != self.rect.centery:
			if self.destx < self.rect.centerx:
				self.speed = 7
				self.image = robo_image1
				self.front = (self.rect.centerx - 32,self.rect.centery)
				self.rect.centerx -= 1
				self.rect0.centerx -= 1
			elif self.destx > self.rect.centerx:
				self.image = robo_image2
				self.front = (self.rect.centerx + 32,self.rect.centery)
				self.speed = 10
				self.rect.centerx += 1
				self.rect0.centerx += 1
			else:
				self.image = robo_image0
				self.front = self.rect.center
			if self.desty < self.rect.centery:
				self.speed = 7
				self.rect.centery -= 1
				self.rect0.centery -= 1
			elif self.desty > self.rect.centery:
				self.speed = 10
				self.rect.centery += 1
				self.rect0.centery += 1
		else:
			self.speed = 20
			self.image = robo_image0
			self.front = self.rect.center
			if len(self.dest) != 0:
				self.destx, self.desty = self.dest[0]
				self.dest.remove(self.dest[0])
			
	def go(self,(destx,desty)):
		(sx,sy,dx,dy) = self.limit
		if destx < sx:
			destx = sx
		if destx > dx:
			destx = dx
		if desty < sy:
			desty = sy
		if desty > dy:
			desty = dy
		self.dest.append((destx,desty))

	def move(self,(destx,desty)):
		while len(self.dest) > 0:
			self.dest.pop(0)
		self.destx, self.desty = destx, desty
		


if __name__=="__main__":
	#tester
	pygame.init()					#first
	screen = pygame.display.set_mode((640,480))	#the screen
	clock = pygame.time.Clock()			#the time
	#accelerator
	exit_button = pygame.QUIT
	pygame.event.set_blocked(None)
	pygame.event.set_allowed(exit_button)
	happen = pygame.event.peek
	fps = clock.tick
	flip = pygame.display.flip
	cls = screen.fill
	white = color.white

	#tha robo
	init()
	robot = robo((100,40,540,440))

	#main loop
	end = False
	while not end:
		fps(40)
		flip()
		cls(white)
		if happen(exit_button):
			end = True
		else:
			pygame.event.clear()
		if True in pygame.mouse.get_pressed():
			robot.go(pygame.mouse.get_pos())
		robot.update()
		robot.draw(screen)
