Example #1
0
 def collide(self, obj):
     dist = sqrt((self.pos[0]-obj.pos[0])**2 + 
                 (self.pos[1]-obj.pos[1])**2)
     d = util.vsub(obj.pos, self.pos)
     par = util.vproj(self.vel, d)
     orth = util.vsub(self.vel, par)
     
     if util.vdot(self.vel, d) > 0:
         self.force = util.vadd(self.force, 
                                util.vmuls(par, -1.5 * self.mass))
                                
         overlap = max(((self.size + obj.size) - dist) / 20.0, .1)
         self.force = util.vadd(self.force,
                                 util.vmuls(d, -overlap / dist * self.mass))
Example #2
0
 def update(self):
     self.force[1] += -.1 * self.mass
     self.compute_wall_force_circle(self.size, .5)
     
     # air resistance
     if util.vmag(self.vel) > 1:
         vmag = util.vmag(self.vel)
         vdir = util.vdivs(self.vel, -.9 * vmag)
         self.force = util.vadd(self.force, vdir)
     
     self.integrate_force()
     
     self.vel[0] = util.clamp(self.vel[0], -20, 20)
     self.vel[1] = util.clamp(self.vel[1], -20, 20)