{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/components/mpm-debugger.js"],"names":["Morph","Floom","Input","Viewport","CombinedRenderer","Vector2","Debug","Tool","MpmDebugger","initialize","windowTitle","registerButtons","lively","addEventListener","evt","onDblClick","get","value","getAttribute","start","debug","initTools","input","viewport","system","dragTool","onMouseDrag","event","_","each","particles","p","position","sub","getPositionInWorld","lengthSquared","velocity","lerpSelf","getLastDeltaInWorld","name","attractTool","vectorToMouse","distanceToMouse","weightedAddSelf","Math","log","repelTool","getRandomPointInCircleUniformly","TWO_PI","t","random","u","r","cos","sin","spawnTool","spawnMaterialIndex","spawnPosition","i","noise","mulFloat","push","Particle","x","y","materials","onMouseUp","length","consumeTool","getNumberOfParticles","splice","keyToolMap","D","A","R","S","C","tool","key","map","bind","KEY","toTool","console","activate","fromTool","onKeyUp","drawTool","renderer","color","drawDot","mouse","drawText","add","me","datGuiForSystem","datGui","dat","GUI","parentContainer","container","gravityFolder","addFolder","open","gravity","min","max","step","datGuiForMaterials","parent","materialFolder","material","datGuiForMaterial","folder","materialIndex","addColor","onChange","setColor","canvasId","canvas","stats","Stats","prepend","domElement","style","initMouse","MOUSE1","MOUSE2","MWHEEL_UP","MWHEEL_DOWN","initKeyboard","N","fluidSystem","System","mat0","createNewMaterial","setParticleMass","mat1","mat2","mat3","mat4","setIsElastic","Group","obstacles","Obstacle","doSprings","drawSprings","Zero","copy","jumpToPoint","lastPoint","update","timePassed","graph","beginClock","pressed","set","state","translateBy","zoomIn","zoomOut","endClock","clear","withViewport","drawSystem","clearPressed","thisMe","lastFrame","window","performance","now","animate","beforeRun","time","dt","afterRun","allParents","undefined","includes","document","body","requestAnimationFrame","meee","$","ready","Menu","addPanel","type","Performance","label","backgroundColor","duration","onKeyDown","notify","charCode","onPlusButton","parseFloat","onMinusButton","livelyPrepareSave","setAttribute","livelyPreMigrate","livelyMigrate","other","someJavaScriptProperty","livelyInspect","contentNode","inspector","livelyExample","appendChild"],"mappings":"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","file":"mpm-debugger.js","sourcesContent":["\"enable aexpr\";\n\nimport Morph from 'src/components/widgets/lively-morph.js';\n\n// self.mpmDebuggerLibs = self.mpmDebuggerLibs || (async () => {\n  // await lively.loadJavaScriptThroughDOM('miniclass', lively4url + \"/src/mpm-debugger/src/external/miniclass.js\");\n  // await lively.loadJavaScriptThroughDOM('jquery', lively4url + \"/src/mpm-debugger/src/external/jquery.js\");\n  // await lively.loadJavaScriptThroughDOM('d3', lively4url + \"/src/mpm-debugger/src/external/d3.js\");\n  // await lively.loadJavaScriptThroughDOM('stats', lively4url + \"/src/mpm-debugger/src/external/stats.js\");\n  // await lively.loadJavaScriptThroughDOM('dat.gui', lively4url + \"/src/mpm-debugger/src/external/dat.gui.js\");\n  // await lively.loadJavaScriptThroughDOM('libraryextensions', lively4url + \"/src/mpm-debugger/src/external/libraryextensions.js\");\n  // return 42;\n// })();\n\n// let Floom;\n// let Input;\n// let Viewport;\n// let CombinedRenderer;\n// let Vector2;\n// let Debug;\n// let Tool;\nimport Floom, { Input, Viewport, CombinedRenderer, Vector2, Debug, Tool } from \"./../src/index.js\";\n\nexport default class MpmDebugger extends Morph {\n  async initialize() {\n    this.windowTitle = \"MPM Debugger\";\n    this.registerButtons()\n\n    // lively.html.registerKeys(this); // automatically installs handler for some methods\n    \n    lively.addEventListener(\"template\", this, \"dblclick\", \n      evt => this.onDblClick(evt))\n    // #Note 1\n    // ``lively.addEventListener`` automatically registers the listener\n    // so that the the handler can be deactivated using:\n    // ``lively.removeEventListener(\"template\", this)``\n    // #Note 1\n    // registering a closure instead of the function allows the class to make \n    // use of a dispatch at runtime. That means the ``onDblClick`` method can be\n    // replaced during development\n    \n     this.get(\"#textField\").value = this.getAttribute(\"data-mydata\") || 0\n    \n    // await self.mpmDebuggerLibs\n    // await System.import(lively4url + \"/src/mpm-debugger/src/index.js\").then(m => {\n    //   Floom = m.default;\n    //   Input = m.Input;\n    //   Viewport = m.Viewport;\n    //   CombinedRenderer = m.CombinedRenderer;\n    //   Vector2 = m.Vector2;\n    //   Debug = m.Debug;\n    //   Tool = m.Tool;\n    // })\n\n    this.start();\n  }\n  \n  start() {\n\n    var debug;\n\n    function initTools(input, viewport, system) {\n      var dragTool = new Tool(input);\n      dragTool.onMouseDrag(function(event) {\n        _.each(system.particles, function(p) {\n          if(p.position.sub(event.getPositionInWorld(viewport)).lengthSquared() < 50)\n            p.velocity.lerpSelf(event.getLastDeltaInWorld(viewport), 0.2);\n        });\n      });\n      dragTool.name = \"drag\";\n\n      var attractTool = new Tool(input);\n      attractTool.onMouseDrag(function(event) {\n        _.each(system.particles, function(p) {\n          var vectorToMouse = event.getPositionInWorld(viewport).sub(p.position);\n          var distanceToMouse = vectorToMouse.lengthSquared();\n          if(distanceToMouse < 150)\n            p.velocity.weightedAddSelf(vectorToMouse, (1/distanceToMouse) * (Math.log(1+distanceToMouse)));\n        });\n      });\n      attractTool.name = \"attract\";\n\n      var repelTool = new Tool(input);\n      repelTool.onMouseDrag(function(event) {\n        _.each(system.particles, function(p) {\n          var vectorToMouse = event.getPositionInWorld(viewport).sub(p.position);\n          var distanceToMouse = vectorToMouse.lengthSquared();\n          if(distanceToMouse < 150)\n            p.velocity.weightedAddSelf(vectorToMouse, 0.1 * Math.log(1/(1+distanceToMouse)));\n        });\n      });\n      repelTool.name = \"repel\";\n\n      function getRandomPointInCircleUniformly() {\n        var TWO_PI = (3.14159265 * 2.0);\n        var t = TWO_PI*Math.random();\n        var u = Math.random()+Math.random();\n        var r = u>1 ? 2-u : u;\n        return new Vector2(r*Math.cos(t), r*Math.sin(t));\n      }\n      var spawnTool = new Tool(input);\n          var spawnMaterialIndex = 0;\n      spawnTool.onMouseDrag(function(event) {\n        var spawnPosition = event.getPositionInWorld(viewport);\n        for(var i = 0; i < 10; i++) {\n          var noise = getRandomPointInCircleUniformly().mulFloat(5);\n          system.particles.push(\n            new Floom.Particle(\n              spawnPosition.x + noise.x,\n              spawnPosition.y + noise.y,\n              0,\n              0,\n              system.materials[spawnMaterialIndex]\n            )\n          );\n        }\n      });\n          spawnTool.onMouseUp(function(event) {\n              spawnMaterialIndex = (spawnMaterialIndex + 1) % system.materials.length;\n          });\n      spawnTool.name = \"spawn\";\n\n      var consumeTool = new Tool(input);\n      consumeTool.onMouseDrag(function(event) {\n        for(var i = 0; i < system.getNumberOfParticles();) {\n          if(system.particles[i].position.sub(event.getPositionInWorld(viewport)).lengthSquared() < 4)\n            system.particles.splice(i, 1);\n          else\n            i++;\n        }\n      });\n      consumeTool.name = \"consume\";\n\n      var keyToolMap = {\n        D: dragTool,\n        A: attractTool,\n        R: repelTool,\n        S: spawnTool,\n        C: consumeTool\n      };\n      _.each(keyToolMap, function(tool, key, map) {\n        input.bind(Input.KEY[key], key);\n        var toTool = function() {\n          console.log(\"its \" + key);\n          tool.activate();\n        };\n\n        _.each(map, function(fromTool) {\n          fromTool.onKeyUp(key, toTool);\n        });\n      });\n\n      // activate default tool\n      dragTool.activate();\n    }\n\n    function drawTool(renderer, input) {\n      var color = \"pink\";\n\n      // draw mouse cursor\n      renderer.drawDot(input.mouse, 10, color, 0.5);\n\n      // draw current interaction name\n      renderer.drawText(\n        input.tool.name,\n        new Vector2(5, 5).add(input.mouse),\n        color,\n        1.0,\n        \"bottom\"\n      );\n    }\n\n    // datGui\n    const me = this;\n    function datGuiForSystem(system) {\n      debugger\n      var datGui = new dat.GUI({ parentContainer: me.container });\n      // me.container.prepend(datGui.domElement);\n\n          var gravityFolder = datGui.addFolder(\"Gravity\");\n          gravityFolder.open();\n          gravityFolder.add(system.gravity, \"x\").min(-0.2).max(0.2).step(-0.01);\n          gravityFolder.add(system.gravity, \"y\").min(-0.2).max(0.2).step(-0.01);\n\n      datGui.add(system, \"useSurfaceTensionImplementation\").name('Surface Tension');\n      datGui.add(system, \"drawGrid\").name('Draw Grid');\n      datGui.add(system, \"doObstacles\").name('Obstacles');\n      datGui.add(system, \"doSprings\").name('Compute Springs');\n      datGui.add(system, \"drawSprings\").name('Draw Springs');\n\n      datGuiForMaterials(system.materials, datGui);\n    }\n\n    function datGuiForMaterials(materials, parent) {\n      var materialFolder = parent.addFolder(\"Materials\");\n      materialFolder.open();\n\n      _.each(materials, function(material) {\n        datGuiForMaterial(material, materialFolder);\n      });\n    }\n\n    function datGuiForMaterial(material, parent) {\n      var folder = parent.addFolder(\"Mat\" + material.materialIndex);\n      folder.open();\n\n      folder.addColor(material, \"color\").onChange(material.setColor.bind(material));\n      folder.add(material, \"particleMass\").min(0.01).max(5.0).step(0.1);\n      folder.add(material, \"restDensity\").min(0.1).max(5.0).step(0.1);\n      folder.add(material, \"stiffness\").min(0).max(1).step(0.05);\n      folder.add(material, \"bulkViscosity\").min(0).max(1).step(0.05);\n      folder.add(material, \"elasticity\").min(-1).max(5).step(0.05);\n      folder.add(material, \"surfaceTension\").min(0).max(1).step(0.05);\n      folder.add(material, \"viscosity\").min(0).max(1).step(0.05);\n      folder.add(material, \"meltRate\").min(0).max(1).step(0.05);\n      folder.add(material, \"damping\").min(0).max(1).step(0.05);\n      folder.add(material, \"smoothing\").min(0).max(1).step(0.05);\n      folder.add(material, \"springK\").min(0).max(5).step(0.05);\n    }\n\n    var canvasId = \"floom\";\n    var canvas = this.get('#' + canvasId);\n\n    var renderer = new CombinedRenderer(canvas);\n\n    var stats = new Stats();\n    this.container.prepend(stats.domElement)\n    stats.domElement.style.position = 'absolute';\n\n    // prepare input\n    var input = new Input(canvas);\n    input.initMouse();\n    input.bind(Input.KEY.MOUSE1, \"leftclick\");\n    input.bind(Input.KEY.MOUSE2, \"rightclick\");\n    input.bind(Input.KEY.MWHEEL_UP, \"zoomIn\");\n    input.bind(Input.KEY.MWHEEL_DOWN, \"zoomOut\");\n    input.initKeyboard();\n    input.bind(Input.KEY.N, \"nextAction\");\n\n    // create fluid System\n    var fluidSystem = new Floom.System();\n\n    // create and customize Materials\n    var mat0 = fluidSystem.createNewMaterial()\n      .setParticleMass(0.5);\n    var mat1 = fluidSystem.createNewMaterial()\n      .setParticleMass(1.0);\n    var mat2 = fluidSystem.createNewMaterial()\n      .setParticleMass(2.0);\n    var mat3 = fluidSystem.createNewMaterial()\n      .setParticleMass(4.0);\n    var mat4 = fluidSystem.createNewMaterial()\n      .setParticleMass(8.0)\n      .setIsElastic(true);\n\n    // create Particles of these Materials\n    new Floom.Group(fluidSystem, -45,  5,  0, 25,  0.1, 0, mat0);\n    new Floom.Group(fluidSystem,   5,  5, 50, 25, -0.1, 0, mat1);\n    new Floom.Group(fluidSystem, -45, 30,  0, 50,  0.1, 0, mat2);\n    new Floom.Group(fluidSystem,   5, 30, 50, 50, -0.1, 0, mat3);\n    new Floom.Group(fluidSystem, -10, 55, 10, 75,    0, 0, mat4);\n\n      // example to spawn individual particles\n    // var p = new Floom.Particle(-45.00001,  55.000001,  0.100001, 0.000001, mat3);\n      // fluidSystem.addParticle(p);\n\n    // create obstacles\n    // fluidSystem.doObstacles = true;\n    fluidSystem.obstacles.push(\n      new Floom.Obstacle(-20, 20, 5),\n      new Floom.Obstacle( 20,  0, 9)\n    );\n\n    // configure grid rendering\n    // fluidSystem.drawGrid = true;\n\n    // configure spring calculation and rendering\n      fluidSystem.doSprings = true;\n      fluidSystem.drawSprings = false;\n\n    // initialize specific datGui for the fluid System\n    datGuiForSystem(fluidSystem);\n\n    // choose, which subset of the world should be displayed\n    var viewport = new Viewport(\n      canvas,\n      Vector2.Zero.copy(),\n      new Vector2(136.6, 76.8)\n    );\n    viewport.jumpToPoint(new Vector2(0, 35));\n    initTools(input, viewport, fluidSystem);\n\n    // update routine\n    var lastPoint = Vector2.Zero.copy();\n    function update(timePassed) {\n      // entities/map\n      if(graph)\n        graph.beginClock('update');\n\n      input.update();\n      // viewport manipulation\n      if(input.pressed(\"rightclick\")) {\n        lastPoint.set(input.mouse);\n      }\n      if(input.state(\"rightclick\")) {\n        viewport.translateBy(lastPoint.sub(input.mouse));\n        lastPoint.set(input.mouse);\n      }\n      if(input.state(\"zoomIn\")) {\n        viewport.zoomIn();\n      }\n      if(input.state(\"zoomOut\")) {\n        viewport.zoomOut();\n      }\n\n      fluidSystem.update(timePassed);\n      if(graph)\n        graph.endClock('update');\n      // rendering\n      if(graph)\n        graph.beginClock('draw');\n      renderer.clear();\n      renderer.withViewport(viewport, function() {\n        renderer.drawSystem(fluidSystem);\n      });\n      drawTool(renderer, input);\n      if(graph)\n        graph.endClock('draw');\n\n      // interaction\n      input.clearPressed();\n    }\n\n\n    // main loop\n    var thisMe = this;\n    var lastFrame = window.performance.now();\n    function animate() {\n      if(debug)\n        debug.beforeRun();\n\n      stats.update();\n\n      // setup time since last call\n      var time = window.performance.now();\n      var dt = (time - lastFrame) / 1000;\n      lastFrame = time;\n\n      update(dt);\n\n      if(debug)\n        debug.afterRun(renderer, fluidSystem);\n\n      if(lively.allParents(thisMe, undefined, true).includes(document.body))\n        requestAnimationFrame(animate);\n    }\n\n    var meee = this;\n    $().ready(function() {\n      debugger\n      debug = new Debug.Menu(meee.container);\n      debug.addPanel({\n        type: Debug.Performance,\n        name: 'graph',\n        label: 'Performance'\n      });\n      animate();\n    });\n\n  }\n  \n  onDblClick() {\n    this.animate([\n      {backgroundColor: \"lightgray\"},\n      {backgroundColor: \"red\"},\n      {backgroundColor: \"lightgray\"},\n    ], {\n      duration: 1000\n    })\n  }\n  \n  get container() { return this.get('#container'); }\n  \n  // this method is autmatically registered through the ``registerKeys`` method\n  onKeyDown(evt) {\n    lively.notify(\"Key Down!\" + evt.charCode)\n  }\n  \n  // this method is automatically registered as handler through ``registerButtons``\n  onPlusButton() {\n    this.get(\"#textField\").value =  parseFloat(this.get(\"#textField\").value) + 1\n  }\n  \n  onMinusButton() {\n    this.get(\"#textField\").value =  parseFloat(this.get(\"#textField\").value) - 1\n  }\n\n  /* Lively-specific API */\n\n  // store something that would be lost\n  livelyPrepareSave() {\n    this.setAttribute(\"data-mydata\", this.get(\"#textField\").value)\n  }\n  \n  livelyPreMigrate() {\n    // is called on the old object before the migration\n  }\n  \n  livelyMigrate(other) {\n    // whenever a component is replaced with a newer version during development\n    // this method is called on the new object during migration, but before initialization\n    this.someJavaScriptProperty = other.someJavaScriptProperty\n  }\n  \n  livelyInspect(contentNode, inspector) {\n    // do nothing\n  }\n  \n  async livelyExample() {\n    // this customizes a default instance to a pretty example\n    // this is used by the \n    this.style.backgroundColor = \"lightgray\"\n    this.someJavaScriptProperty = 42\n    this.appendChild(<div>This is my content</div>)\n  }\n  \n  \n}"]}