From 901a8a638a92b2138b6ce27dd7e90b3b3b4d1833 Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Sun, 31 Aug 2008 00:13:09 +0000 Subject: add concept of cost --- diff --git a/bridge.py b/bridge.py index 62a0f76..e254340 100644 --- a/bridge.py +++ b/bridge.py @@ -6,6 +6,7 @@ class Bridge: self.screen = game.screen self.world = game.world self.joints = [] + self.cost = 0 def create_world(self): rect = pygame.Rect((0,800), (350, -250)) @@ -19,9 +20,17 @@ class Bridge: self.world.add.rect(rect.center, rect.width / 2, rect.height / 2, dynamic=False) + def add_cost(self, value): + self.cost = self.cost + value + print "cost now", value + def joint_added(self, joint): print "joint added!" self.joints.append(joint) + self.add_cost(100) + + def box_added(self): + self.add_cost(10) def for_each_frame(self): for joint in self.joints: diff --git a/physics.py b/physics.py index b2ca2cb..ef9b2b9 100644 --- a/physics.py +++ b/physics.py @@ -71,7 +71,7 @@ class PhysicsGame: self.currentTool.draw() #Print all the text on the screen - text = self.font.render("Current Tool: "+self.currentTool.name, True, (255,255,255)) + text = self.font.render("Total Cost: %d" % self.bridge.cost, True, (0,0,0)) textpos = text.get_rect(left=700,top=7) self.screen.blit(text,textpos) diff --git a/tools.py b/tools.py index 0bb4c90..dd4cb6d 100644 --- a/tools.py +++ b/tools.py @@ -153,7 +153,8 @@ class BoxTool(Tool): elif event.type == MOUSEBUTTONUP: if event.button == 1 and self.pt1!=None: if self.rect.width > 10 and self.rect.height > 10: # elements doesn't like small shapes :( - self.game.world.add.rect(self.rect.center, self.rect.width/2, self.rect.height/2, dynamic=True, density=1.0, restitution=0.16, friction=0.5) + self.game.world.add.rect(self.rect.center, self.rect.width/2, self.rect.height/2, dynamic=True, density=1.0, restitution=0.16, friction=0.5) + self.game.bridge.box_added() self.pt1 = None def draw(self): @@ -168,126 +169,6 @@ class BoxTool(Tool): self.pt1 = None self.rect = None -# The triangle creation tool -class TriangleTool(Tool): - name = "triangle" - icon = "triangle" - toolTip = "Triangle" - - def __init__(self,gameInstance): - self.game = gameInstance - self.name = "Triangle" - self.pt1 = None - self.vertices = None - def handleEvents(self,event): - #look for default events, and if none are handled then try the custom events - if not super(TriangleTool,self).handleEvents(event): - if event.type == MOUSEBUTTONDOWN: - if event.button == 1: - self.pt1 = pygame.mouse.get_pos() - elif event.type == MOUSEBUTTONUP: - if event.button == 1 and self.pt1!= None: - if distance(self.pt1,pygame.mouse.get_pos()) > 15: # elements doesn't like tiny shapes :( - self.game.world.add.convexPoly(self.vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5) - self.pt1 = None - self.vertices = None - def draw(self): - # draw a triangle from pt1 to mouse - if self.pt1 != None: - self.vertices = constructTriangleFromLine(self.pt1,pygame.mouse.get_pos()) - pygame.draw.polygon(self.game.screen, (100,180,255),self.vertices, 3) - pygame.draw.line(self.game.screen,(100,180,255),self.pt1,pygame.mouse.get_pos(),1) - - def cancel(self): - self.pt1 = None - self.vertices = None - -# The Polygon creation tool -class PolygonTool(Tool): - name = "polygon" - icon = "polygon" - toolTip = "Polygon" - - def __init__(self,gameInstance): - self.game = gameInstance - self.name = "Polygon" - self.vertices = None - def handleEvents(self,event): - #look for default events, and if none are handled then try the custom events - if not super(PolygonTool,self).handleEvents(event): - if event.type == MOUSEBUTTONDOWN: - if event.button == 1: - if not self.vertices: - self.vertices=[event.pos] - elif distance(event.pos,self.vertices[0]) < 15: - #self.vertices.append(self.vertices[0]) #connect the polygon - gons = decomposePoly(self.vertices) - for g in gons: - self.game.world.add.convexPoly(g, dynamic=True, density=1.0, restitution=0.16, friction=0.5) - #self.game.world.add.complexPoly(self.vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5) - self.vertices = None - else: - self.vertices.append(event.pos) - if event.button == 3: - if self.vertices: - self.vertices.append(event.pos) - self.game.world.add.complexPoly(self.vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5) - self.vertices = None - - def draw(self): - # draw the poly being created - if self.vertices: - for i in range(len(self.vertices)-1): - pygame.draw.line(self.game.screen,(100,180,255),self.vertices[i],self.vertices[i+1],3) - pygame.draw.line(self.game.screen,(100,180,255),self.vertices[-1],pygame.mouse.get_pos(),3) - pygame.draw.circle(self.game.screen,(100,180,255),self.vertices[0],15,3) - - def cancel(self): - self.vertices = None - -# The magic pen tool -class MagicPenTool(Tool): - name = "magicpen" - icon = "magicpen" - toolTip = "Magic Pen" - - def __init__(self,gameInstance): - self.game = gameInstance - self.name = "Magic Pen" - self.vertices = None - def handleEvents(self,event): - #look for default events, and if none are handled then try the custom events - if not super(MagicPenTool,self).handleEvents(event): - if event.type == MOUSEBUTTONDOWN: - if event.button == 1: - if not self.vertices: - self.vertices=[event.pos] - elif distance(event.pos,self.vertices[0]) < 15: - self.vertices.append(self.vertices[0]) #connect the polygon - self.game.world.add.complexPoly(self.vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5) - self.vertices = None - else: - self.vertices.append(event.pos) - elif event.type == MOUSEBUTTONUP: - if event.button == 1: - if self.vertices: - self.game.world.add.complexPoly(self.vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5) - self.vertices = None - elif event.type == MOUSEMOTION: - if self.vertices: - self.vertices.append(event.pos) - - def draw(self): - # draw the poly being created - if self.vertices: - for i in range(len(self.vertices)-1): - pygame.draw.line(self.game.screen,(100,180,255),self.vertices[i],self.vertices[i+1],3) - pygame.draw.line(self.game.screen,(100,180,255),self.vertices[-1],pygame.mouse.get_pos(),3) - pygame.draw.circle(self.game.screen,(100,180,255),self.vertices[0],15,3) - - def cancel(self): - self.vertices = None - # The grab tool class GrabTool(Tool): name = "grab" @@ -317,55 +198,6 @@ class GrabTool(Tool): def cancel(self): self.game.world.add.remove_mouseJoint() -# The joint tool -class JointTool(Tool): - name = "joint" - icon = "joint" - toolTip = "Joint" - - def __init__(self,gameInstance): - self.game = gameInstance - self.name = "Joint" - self.jb1 = self.jb2 = self.jb1pos = self.jb2pos = None - def handleEvents(self,event): - #look for default events, and if none are handled then try the custom events - if not super(JointTool,self).handleEvents(event): - if event.type == MOUSEBUTTONDOWN: - if event.button >= 1: - # grab the first body - self.jb1pos = event.pos - self.jb1 = self.game.world.get_bodies_at_pos(event.pos) - self.jb2 = self.jb2pos = None - elif event.type == MOUSEBUTTONUP: - if event.button == 1: - # grab the second body - self.jb2pos = event.pos - self.jb2 = self.game.world.get_bodies_at_pos(event.pos) - # if we have two distinct bodies, add a distance joint! - if self.jb1 and self.jb2 and str(self.jb1) != str(self.jb2): - self.game.world.add.distanceJoint(self.jb1[0],self.jb2[0],self.jb1pos,self.jb2pos) - # If there's only one body, add a fixed joint - elif self.jb2: - self.game.world.add.fixedJoint(self.jb2[0],self.jb2pos) - # regardless, clean everything up - self.jb1 = self.jb2 = self.jb1pos = self.jb2pos = None - if event.button == 3: - # add a centered fixed joint - '''self.jb2 = self.game.world.get_bodies_at_pos(event.pos) - if self.jb2: - self.game.world.add.fixedJoint(self.jb2[0]) - # regardless, clean everything up - self.jb1 = self.jb2 = self.jb1pos = self.jb2pos = None''' - if self.jb1: - self.game.world.add.motor(self.jb1[0],self.jb1pos) - self.jb1 = self.jb2 = self.jb1pos = self.jb2pos = None - def draw(self): - if self.jb1: - pygame.draw.line(self.game.screen,(100,180,255),self.jb1pos,pygame.mouse.get_pos(),3) - - def cancel(self): - self.jb1 = self.jb2 = self.jb1pos = self.jb2pos = None - # The destroy tool class DestroyTool(Tool): name = "destroy" @@ -398,42 +230,6 @@ class DestroyTool(Tool): def cancel(self): self.vertices = None - # The joystick tool -class JoystickTool(Tool): - name = "joystick" - icon = "magicpen" # for now - toolTip = "Joystick" - - def __init__(self,gameInstance): - self.game = gameInstance - self.name = "Joystick" - self.vertices = None - #self.joystickobject - def handleEvents(self,event): - #look for default events, and if none are handled then try the custom events - super(JoystickTool,self).handleEvents(event) - if pygame.mouse.get_pressed()[0]: - if not self.vertices: - self.vertices = [] - self.vertices.append(pygame.mouse.get_pos()) - if len(self.vertices) > 10: - self.vertices.pop(0) - self.game.joystickobject = self.game.world.get_bodies_at_pos(pygame.mouse.get_pos()) - if self.game.joystickobject: - print "hi1" - #self.game.world.world.DestroyBody(self.joystickobject[0]) - elif event.type == MOUSEBUTTONUP and event.button == 1: - self.cancel() - def draw(self): - # draw the trail - if self.vertices: - if len(self.vertices) > 1: - pygame.draw.lines(self.game.screen,(255,0,0),False,self.vertices,3) - - def cancel(self): - self.vertices = None - - # The joint tool class BridgeJointTool(Tool): name = "bridgejoint" -- cgit v0.9.1