##################################
#offroadwarrior
#mass spring system eh!
##################################

#dependency
##################################
import math

#container
##################################
class new:
        def __init__(self,b1,b2):
                self.b1 = b1
                self.b2 = b2
                self.length = (math.hypot(b2.x - b1.x, b2.y - b1.y))
                
                        #self.length = ((b1.x-b2.x)**2)+((b1.y-b2.y)**2)  #rest lenght
                self.spring = 800
                self.damp = 5
                self.force = 0
                #self.breakage = 0

#container
##################################
def force(a):
        #find distance
        deltaX = a.b2.x - a.b1.x
        deltaY = a.b2.y - a.b1.y
        length = math.hypot(deltaX, deltaY)
        
        #length = (deltaX**2)+(deltaY**2)
                #~ force = ((length - a.length) * a.spring)/2     //   -k *(distance - RL)
                #~ force = (length-a.length)/(a.length*2)

        #spring tension/rebound
        force = -a.spring * (length - a.length)  #calc spring force
                        
        a.b1.fx += -deltaX*force                    #distribution of forces
        a.b1.fy += -deltaY*force
        a.b2.fx -= -deltaX*force
        a.b2.fy -= -deltaY*force

        #spring damping
        deltaVXF = -(a.b2.vx - a.b1.vx) * a.damp       #calc speed damping
        deltaVYF = -(a.b2.vy - a.b1.vy) * a.damp

        #breakforce = math.hypot(deltaVXF, deltaVYF)     
        #a.breakage = breakforce / 2500                       #output breakage check
        #FUTURE: if breakage >< blahblah then delete or deform a.lenght or px,py

        a.b1.fx += -deltaVXF                 #distribution of forces
        a.b1.fy += -deltaVYF
        a.b2.fx -= -deltaVXF
        a.b2.fy -= -deltaVYF
