{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH-stable/src/internal/individuals-as-points/venn/force-simulation.js"],"names":["d3","ForceSimulation","constructor","vennDiagram","individuals","simulation","_createSimulation","start","setTimeout","alpha","restart","stop","updateForces","force","forceX","individual","center","x","strength","forceY","y","forceSimulation","forceCollide","iterations","alphaDecay","nodes","on","_tick","draw"],"mappings":";;;;;;AAAOA,Q;;;;;;;;;;;;;;;;;;AAEQ,YAAMC,eAAN,CAAsB;AACnCC,oBAAYC,WAAZ,EAAyBC,WAAzB,EAAsC;AACpC,eAAKD,WAAL,GAAmBA,WAAnB;AACA,eAAKE,UAAL,GAAkB,KAAKC,iBAAL,CAAuBF,WAAvB,CAAlB;AACD;;AAED;AACA;AACA;;AAEAG,gBAAQ;AACNC,qBAAW,MAAM,KAAKH,UAAL,CAAgBI,KAAhB,CAAsB,GAAtB,EAA2BC,OAA3B,EAAjB,EAAuD,GAAvD;AACD;;AAEDC,eAAO;AACL,eAAKN,UAAL,CAAgBM,IAAhB;AACD;;AAEDC,uBAAe;AACb,eAAKP,UAAL,CACGQ,KADH,CACS,GADT,EACcb,GAAGc,MAAH,CAAUC,cAAcA,WAAWC,MAAX,CAAkBC,CAA1C,EAA6CC,QAA7C,CAAsD,GAAtD,CADd,EAEGL,KAFH,CAES,GAFT,EAEcb,GAAGmB,MAAH,CAAUJ,cAAcA,WAAWC,MAAX,CAAkBI,CAA1C,EAA6CF,QAA7C,CAAsD,GAAtD,CAFd;;AAIA,eAAKX,KAAL;AACD;;AAED;AACA;AACA;;AAEAD,0BAAkBF,WAAlB,EAA+B;AAC7B,iBAAOJ,GAAGqB,eAAH,GACHR,KADG,CACG,WADH,EACgBb,GAAGsB,YAAH,CAAgB,CAAhB,EAAmBC,UAAnB,CAA8B,CAA9B,CADhB,EAEHV,KAFG,CAEG,GAFH,EAEQb,GAAGc,MAAH,CAAUC,cAAcA,WAAWC,MAAX,CAAkBC,CAA1C,EAA6CC,QAA7C,CAAsD,GAAtD,CAFR,EAGHL,KAHG,CAGG,GAHH,EAGQb,GAAGmB,MAAH,CAAUJ,cAAcA,WAAWC,MAAX,CAAkBI,CAA1C,EAA6CF,QAA7C,CAAsD,GAAtD,CAHR,EAIHM,UAJG,CAIQ,KAJR,EAKHf,KALG,CAKG,GALH,EAMFgB,KANE,CAMIrB,WANJ,EAOFsB,EAPE,CAOC,MAPD,EAOS,MAAM,KAAKC,KAAL,CAAW,KAAKxB,WAAhB,CAPf,CAAP;AAQD;;AAEDwB,cAAMxB,WAAN,EAAmB;AACjBA,sBAAYyB,IAAZ;AACD;AA3CkC;;yBAAhB3B,e","file":"force-simulation.js","sourcesContent":["import d3 from \"src/external/d3.v5.js\";\n\nexport default class ForceSimulation {\n  constructor(vennDiagram, individuals) {\n    this.vennDiagram = vennDiagram\n    this.simulation = this._createSimulation(individuals)\n  }\n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n  start() {\n    setTimeout(() => this.simulation.alpha(0.5).restart(), 250);\n  }\n  \n  stop() {\n    this.simulation.stop()\n  }\n  \n  updateForces() {\n    this.simulation\n      .force(\"x\", d3.forceX(individual => individual.center.x).strength(0.1))\n      .force(\"y\", d3.forceY(individual => individual.center.y).strength(0.1))\n    \n    this.start()\n  }\n    \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _createSimulation(individuals) {\n    return d3.forceSimulation()\n       .force(\"collision\", d3.forceCollide(4).iterations(1))\n       .force(\"x\", d3.forceX(individual => individual.center.x).strength(0.1))\n       .force(\"y\", d3.forceY(individual => individual.center.y).strength(0.1))\n       .alphaDecay(0.007)\n       .alpha(0.5)\n        .nodes(individuals)\n        .on(\"tick\", () => this._tick(this.vennDiagram))\n  }\n  \n  _tick(vennDiagram) {\n    vennDiagram.draw()\n  }\n}"]}