{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/floom/spring.js"],"names":["Material","Particle","Group","Node","Obstacle","System","Spring","particle1","particle2","restLength","currentDistance","prototype","update","position","distance","solve","p2position","p1position","rij","sub","mulFloatSelf","D","material","springK","subSelf","addSelf","contains","particle"],"mappings":";;;;;;AAAOA,W;;AACAC,W;;AACAC,Q;;AACAC,O;;AACAC,W;;AACAC,S;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEN,OAAIC,SAAS,UAASC,SAAT,EAAoBC,SAApB,EAA+BC,UAA/B,EAA2C;AACvD,SAAKF,SAAL,GAAiBA,SAAjB;AACA,SAAKC,SAAL,GAAiBA,SAAjB;AACA,SAAKC,UAAL,GAAkBA,UAAlB;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,IALD;;;;;;;;;;;;;;;AAOAJ,UAAOK,SAAP,CAAiBC,MAAjB,GAA0B,YAAW;AACpC,SAAKF,eAAL,GAAuB,KAAKH,SAAL,CAAeM,QAAf,CAAwBC,QAAxB,CAAiC,KAAKN,SAAL,CAAeK,QAAhD,CAAvB;AACA,IAFD;;AAIAP,UAAOK,SAAP,CAAiBI,KAAjB,GAAyB,YAAW;AACnC,QAAIC,aAAa,KAAKR,SAAL,CAAeK,QAAhC;AACA,QAAII,aAAa,KAAKV,SAAL,CAAeM,QAAhC;AACA,QAAIK,MAAMF,WAAWG,GAAX,CAAeF,UAAf,CAAV;AACAC,QAAIE,YAAJ,CAAiB,IAAI,KAAKV,eAA1B;AACA,QAAIW,IAAI,KAAKd,SAAL,CAAee,QAAf,CAAwBC,OAAxB,IAAmC,KAAKd,UAAL,GAAkB,KAAKC,eAA1D,CAAR;AACAQ,QAAIE,YAAJ,CAAiBC,IAAI,GAArB;AACAJ,eAAWO,OAAX,CAAmBN,GAAnB;AACAF,eAAWS,OAAX,CAAmBP,GAAnB;AACA,IATD;;AAWAZ,UAAOK,SAAP,CAAiBe,QAAjB,GAA4B,UAASC,QAAT,EAAmB;AAC9C,WAAO,KAAKpB,SAAL,KAAmBoB,QAAnB,IAA+B,KAAKnB,SAAL,KAAmBmB,QAAzD;AACA,IAFD;;sBAIerB,M","file":"spring.js","sourcesContent":["import Material from \"./material.js\";\nimport Particle from \"./particle.js\";\nimport Group from \"./group.js\";\nimport Node from \"./node.js\";\nimport Obstacle from \"./obstacle.js\";\nimport System from \"./system.js\";\n\n\tvar Spring = function(particle1, particle2, restLength) {\n\t\tthis.particle1 = particle1;\n\t\tthis.particle2 = particle2;\n\t\tthis.restLength = restLength;\n\t\tthis.currentDistance = 0;\n\t};\n\t\n\tSpring.prototype.update = function() {\n\t\tthis.currentDistance = this.particle1.position.distance(this.particle2.position);\n\t};\n\t\n\tSpring.prototype.solve = function() {\n\t\tvar p2position = this.particle2.position;\n\t\tvar p1position = this.particle1.position;\n\t\tvar rij = p2position.sub(p1position);\n\t\trij.mulFloatSelf(1 / this.currentDistance);\n\t\tvar D = this.particle1.material.springK * (this.restLength - this.currentDistance);\n\t\trij.mulFloatSelf(D * 0.5);\n\t\tp1position.subSelf(rij);\n\t\tp2position.addSelf(rij);\n\t};\n\t\n\tSpring.prototype.contains = function(particle) {\n\t\treturn this.particle1 === particle || this.particle2 === particle;\n\t};\n\t\n\texport default Spring;\n"]}