import Box2D2 as box2d

m_bodies = [ ]
e_count = 10

BB = box2d.b2AABB()
BB.lowerBound.Set(-100, -100)
BB.upperBound.Set(100, 100)
world = box2d.b2World(BB, box2d.b2Vec2(0, 0.0), True)

#sd=box2d.b2PolygonDef()
#sd.SetAsBox(50.0, 10.0)

#bd=box2d.b2BodyDef()
#bd.position.Set(0.0, -10.0)

#ground = world.CreateBody(bd)
#ground.CreateShape(sd)
	
sd=box2d.b2CircleDef()
sd.radius = 1.0
sd.density = 1.0
#sd.restitution = 0.7

def AddBody(x, y):
	bd=box2d.b2BodyDef()
	bd.position.Set(x, y)
	
	m_bodies.append( world.CreateBody(bd) )
	m_bodies[-1].CreateShape(sd)
	m_bodies[-1].SetMassFromShapes()

for i in xrange(e_count):
	AddBody(2.0, 2.0 + 3.0 * i)

timeStep = 1.0 / 60
velocityIterations = 10
positionIterations = 8
		
#print dir(m_bodies[-1])
#print m_bodies[-1].GetShapeList()

#shape = m_bodies[-1].GetShapeList()
#print dir(shape)
#print shape.asCircle().GetRadius()

import PodSix
PodSix.engine = "pygame"
from PodSix.Resource import *

from PodSix.Game import Game

class Core(Game, EventMonitor):
	def __init__(self):
		# gfx.Caption('Test Gfx features')
		gfx.SetSize([800, 600])
		gfx.LoadFont("hemihead", 0.04, "default")
		
		self.const = 100.0 / gfx.width
		# self.const = 0.1
		Game.__init__(self)
		EventMonitor.__init__(self)
	
	def Run(self):
		world.Step(timeStep, velocityIterations, positionIterations)
		gfx.SetBackgroundColor([255, 255, 255])
		#[gfx.DrawCircle((c._body.GetPosition().x / self.const, c._body.GetPosition().y / self.const), (0, 0, 0), c._shape.radius / self.const) for c in self.circles]
		[gfx.DrawCircle((b.GetPosition().x / self.const, b.GetPosition().y / self.const), (0, 0, 0), b.GetShapeList().asCircle().GetRadius() / self.const) for b in m_bodies]
		#print [b.GetPosition() for b in m_bodies]
		Game.Run(self)
		gfx.Flip()
	
	def MouseDown(self, e):
		AddBody(e.pos[0] * self.const, e.pos[1] * self.const)
	
	def KeyDown_escape(self, e):
		self.Quit()
	
	def Pump(self):
		Game.Pump(self)
		EventMonitor.Pump(self)

c = Core()
c.Launch()

