import pygame
import main					#able to load the lib
main.init()					#
import data, color, spr_type			#then load the libs
from color import *
from spr_type import *
import random

		

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

	#conveyor
	import coveyor
	coveyor.init()
	convoy_in = coveyor.conveyor_in()
	convoy_out = coveyor.conveyor_out()
	stop = coveyor.stopper()
	till_out = 0

	#pot
	import pot
	pots = pygame.sprite.Group([pot.pot_red(),pot.pot_blue(),pot.pot_yellow()])

	#springminator
	import springminator
	springminator.init()
	machine = springminator.springminator()

	#kossin
	import kossin
	kossin.init()

	#box
	import box
	box.init()
	pile = box.box_pile()
	box_still = False

	#spring
	import spring
	spring.init()

	#cube
	import grapping_cube
	grapping_cube.init()
	cube = grapping_cube.grappling_cube()
	taken = None

	sprites = pygame.sprite.Group()
	#for i in range(15):
	#	sprites.add(kossin.kossin(random.randint(80,560),random.randint(80,320)))

	#main loop
	end = False
	raize = False
	button = False
	while not end:
		fps(100)
		flip()
		cls(white)
		if happen(exit_button):
			end = True
		else:
			pygame.event.clear()
		if True in pygame.mouse.get_pressed():
			if not button:
				raize = True
				button = True
			else:
				raize = False
		else:
			raize = False
			button = False

		#test conveyor
		stop.update()
		stop.draw(screen)
		convoy_in.update()
		convoy_in.draw(screen)
		for spr in pygame.sprite.spritecollide(convoy_in,sprites,0):
			if spr != cube.spr and not pygame.sprite.spritecollideany(stop,sprites):
				spr.rect.centerx = convoy_in.rect.centerx
				spr.rect.centery += 1
		convoy_out.update()
		convoy_out.draw(screen)
		for spr in pygame.sprite.spritecollide(convoy_out,sprites,0):
			if spr != cube.spr:
				spr.rect.centerx = convoy_out.rect.centerx
				spr.rect.centery -= 1

		#test box
		pile.update()
		pile.draw(screen)

		#test pot
		for pot in pots:
			pot.update()
			pot.draw(screen)

		#test springminator
		machine.update()
		machine.draw(screen)

		#sprite
		sprites.update()
		sprites.draw(screen)

		#test cube
		cube.update()
		cube.draw(screen)

		#input
		if till_out == 0:
			if not pygame.sprite.spritecollideany(stop,sprites):
				sprites.add(kossin.kossin(13,40))
			till_out = 80
		else:
			till_out -= 1


		if raize :
			(x,y) = pygame.mouse.get_pos()
			if not taken:
				for spr in sprites:
					if spr.rect.collidepoint(x,y):
						cube.take(spr)
						taken = spr
			else:
				if machine.rect.collidepoint(x,y) and taken.spr_type == type_kossin:
					cube.go((machine.rect.centerx,machine.rect.top))
					taken = None
				elif taken.spr_type == type_spring:
					if pile.rect.collidepoint(x,y):
						cube.go((pile.rect.centerx,pile.rect.top))
						taken = None
					else:
						for pot in pots:
							if pot.rect.collidepoint(x,y):
								cube.go((pot.rect.centerx,pot.rect.top))
								taken = None
				else:	
					if taken.spr_type == type_box:
						pile.free()				
					cube.go((x,y))
					taken = None


		#making spring
		if not cube.spr:
			for spr in pygame.sprite.spritecollide(machine,sprites,0):
				if spr.spr_type == type_kossin:
					machine.convert(spr)
			for pot in pots:
				for spr in pygame.sprite.spritecollide(pot,sprites,0):
					if spr.spr_type == type_spring:
						sprites.add(spring.spring(pot.rect.centerx,pot.rect.top - 20,pot.color))
						sprites.remove(spr)
			for spr in pygame.sprite.spritecollide(pile,sprites,0):
				if spr.spr_type == type_spring:
					pile.pack(spr)
		if machine.spr == False:
			sprites.add(spring.spring(machine.rect.centerx,machine.rect.top,grey))
		if pile.spr == True:
			if not box_still:
				sprites.add(box.box_deliver())
				box_still = True
				print sprites
		elif pile.spr == None:
			box_still = False



