{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/bootstrap.js"],"names":["Floom","Input","Viewport","CombinedRenderer","Vector2","Debug","Tool","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","datGuiForSystem","datGui","dat","GUI","gravityFolder","addFolder","open","gravity","min","max","step","datGuiForMaterials","parent","materialFolder","material","datGuiForMaterial","folder","materialIndex","addColor","onChange","setColor","canvasId","canvas","document","getElementById","style","top","left","stats","Stats","$","domElement","css","window","scrollTop","prependTo","scroll","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","lastFrame","performance","now","animate","beforeRun","time","dt","afterRun","requestAnimationFrame","ready","Menu","addPanel","type","Performance","label"],"mappings":"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","file":"bootstrap.js","sourcesContent":["import Floom, { Input, Viewport, CombinedRenderer, Vector2, Debug, Tool } from \"./index.js\";\n\n\tvar debug;\n\n\tfunction initTools(input, viewport, system) {\n\t\tvar dragTool = new Tool(input);\n\t\tdragTool.onMouseDrag(function(event) {\n\t\t\t_.each(system.particles, function(p) {\n\t\t\t\tif(p.position.sub(event.getPositionInWorld(viewport)).lengthSquared() < 50)\n\t\t\t\t\tp.velocity.lerpSelf(event.getLastDeltaInWorld(viewport), 0.2);\n\t\t\t});\n\t\t});\n\t\tdragTool.name = \"drag\";\n\n\t\tvar attractTool = new Tool(input);\n\t\tattractTool.onMouseDrag(function(event) {\n\t\t\t_.each(system.particles, function(p) {\n\t\t\t\tvar vectorToMouse = event.getPositionInWorld(viewport).sub(p.position);\n\t\t\t\tvar distanceToMouse = vectorToMouse.lengthSquared();\n\t\t\t\tif(distanceToMouse < 150)\n\t\t\t\t\tp.velocity.weightedAddSelf(vectorToMouse, (1/distanceToMouse) * (Math.log(1+distanceToMouse)));\n\t\t\t});\n\t\t});\n\t\tattractTool.name = \"attract\";\n\n\t\tvar repelTool = new Tool(input);\n\t\trepelTool.onMouseDrag(function(event) {\n\t\t\t_.each(system.particles, function(p) {\n\t\t\t\tvar vectorToMouse = event.getPositionInWorld(viewport).sub(p.position);\n\t\t\t\tvar distanceToMouse = vectorToMouse.lengthSquared();\n\t\t\t\tif(distanceToMouse < 150)\n\t\t\t\t\tp.velocity.weightedAddSelf(vectorToMouse, 0.1 * Math.log(1/(1+distanceToMouse)));\n\t\t\t});\n\t\t});\n\t\trepelTool.name = \"repel\";\n\t\t\n\t\tfunction getRandomPointInCircleUniformly() {\n\t\t\tvar TWO_PI = (3.14159265 * 2.0);\n\t\t\tvar t = TWO_PI*Math.random();\n\t\t\tvar u = Math.random()+Math.random();\n\t\t\tvar r = u>1 ? 2-u : u;\n\t\t\treturn new Vector2(r*Math.cos(t), r*Math.sin(t));\n\t\t}\n\t\tvar spawnTool = new Tool(input);\n        var spawnMaterialIndex = 0;\n\t\tspawnTool.onMouseDrag(function(event) {\n\t\t\tvar spawnPosition = event.getPositionInWorld(viewport);\n\t\t\tfor(var i = 0; i < 10; i++) {\n\t\t\t\tvar noise = getRandomPointInCircleUniformly().mulFloat(5);\n\t\t\t\tsystem.particles.push(\n\t\t\t\t\tnew Floom.Particle(\n\t\t\t\t\t\tspawnPosition.x + noise.x,\n\t\t\t\t\t\tspawnPosition.y + noise.y,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tsystem.materials[spawnMaterialIndex]\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n        spawnTool.onMouseUp(function(event) {\n            spawnMaterialIndex = (spawnMaterialIndex + 1) % system.materials.length;\n        });\n\t\tspawnTool.name = \"spawn\";\n\t\t\n\t\tvar consumeTool = new Tool(input);\n\t\tconsumeTool.onMouseDrag(function(event) {\n\t\t\tfor(var i = 0; i < system.getNumberOfParticles();) {\n\t\t\t\tif(system.particles[i].position.sub(event.getPositionInWorld(viewport)).lengthSquared() < 4)\n\t\t\t\t\tsystem.particles.splice(i, 1);\n\t\t\t\telse\n\t\t\t\t\ti++;\n\t\t\t}\n\t\t});\n\t\tconsumeTool.name = \"consume\";\n\n\t\tvar keyToolMap = {\n\t\t\tD: dragTool,\n\t\t\tA: attractTool,\n\t\t\tR: repelTool,\n\t\t\tS: spawnTool,\n\t\t\tC: consumeTool\n\t\t};\n\t\t_.each(keyToolMap, function(tool, key, map) {\n\t\t\tinput.bind(Input.KEY[key], key);\n\t\t\tvar toTool = function() {\n\t\t\t\tconsole.log(\"its \" + key);\n\t\t\t\ttool.activate();\n\t\t\t};\n\t\t\t\n\t\t\t_.each(map, function(fromTool) {\n\t\t\t\tfromTool.onKeyUp(key, toTool);\n\t\t\t});\n\t\t});\n\n\t\t// activate default tool\n\t\tdragTool.activate();\n\t}\n\n\tfunction drawTool(renderer, input) {\n\t\tvar color = \"pink\";\n\n\t\t// draw mouse cursor\n\t\trenderer.drawDot(input.mouse, 10, color, 0.5);\n\t\t\n\t\t// draw current interaction name\n\t\trenderer.drawText(\n\t\t\tinput.tool.name,\n\t\t\tnew Vector2(5, 5).add(input.mouse),\n\t\t\tcolor,\n\t\t\t1.0,\n\t\t\t\"bottom\"\n\t\t);\n\t}\n\n\t// datGui\n\tfunction datGuiForSystem(system) {\n\t\tvar datGui = new dat.GUI();\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\t\tdatGui.add(system, \"useSurfaceTensionImplementation\").name('Surface Tension');\n\t\tdatGui.add(system, \"drawGrid\").name('Draw Grid');\n\t\tdatGui.add(system, \"doObstacles\").name('Obstacles');\n\t\tdatGui.add(system, \"doSprings\").name('Compute Springs');\n\t\tdatGui.add(system, \"drawSprings\").name('Draw Springs');\n\n\t\tdatGuiForMaterials(system.materials, datGui);\n\t}\n\n\tfunction datGuiForMaterials(materials, parent) {\n\t\tvar materialFolder = parent.addFolder(\"Materials\");\n\t\tmaterialFolder.open();\n\n\t\t_.each(materials, function(material) {\n\t\t\tdatGuiForMaterial(material, materialFolder);\n\t\t});\n\t}\n\t\n\tfunction datGuiForMaterial(material, parent) {\n\t\tvar folder = parent.addFolder(\"Mat\" + material.materialIndex);\n\t\tfolder.open();\n\t\t\n\t\tfolder.addColor(material, \"color\").onChange(material.setColor.bind(material));\n\t\tfolder.add(material, \"particleMass\").min(0.01).max(5.0).step(0.1);\n\t\tfolder.add(material, \"restDensity\").min(0.1).max(5.0).step(0.1);\n\t\tfolder.add(material, \"stiffness\").min(0).max(1).step(0.05);\n\t\tfolder.add(material, \"bulkViscosity\").min(0).max(1).step(0.05);\n\t\tfolder.add(material, \"elasticity\").min(-1).max(5).step(0.05);\n\t\tfolder.add(material, \"surfaceTension\").min(0).max(1).step(0.05);\n\t\tfolder.add(material, \"viscosity\").min(0).max(1).step(0.05);\n\t\tfolder.add(material, \"meltRate\").min(0).max(1).step(0.05);\n\t\tfolder.add(material, \"damping\").min(0).max(1).step(0.05);\n\t\tfolder.add(material, \"smoothing\").min(0).max(1).step(0.05);\n\t\tfolder.add(material, \"springK\").min(0).max(5).step(0.05);\n\t}\n\n\tvar canvasId = \"floom\";\n\tvar canvas = document.getElementById(canvasId);\n\tcanvas.style.position = \"absolute\";\n\tcanvas.style.top = \"0px\";\n\tcanvas.style.left = \"0px\";\n\tcanvas.style[\"z-index\"] = -1;\n\n\tvar renderer = new CombinedRenderer(canvas);\n\n\tvar stats = new Stats();\n\t$(stats.domElement)\n\t\t.css(\"position\", \"absolute\")\n\t\t.css(\"top\", $(window).scrollTop() + \"px\")\n\t\t.prependTo($(\"body\"));\n\t$(window).scroll(function() {\n\t\t$(stats.domElement).css('top', $(this).scrollTop() + \"px\");\n\t});\n\t\n\t// prepare input\n\tvar input = new Input(canvasId);\n\tinput.initMouse();\n\tinput.bind(Input.KEY.MOUSE1, \"leftclick\");\n\tinput.bind(Input.KEY.MOUSE2, \"rightclick\");\n\tinput.bind(Input.KEY.MWHEEL_UP, \"zoomIn\");\n\tinput.bind(Input.KEY.MWHEEL_DOWN, \"zoomOut\");\n\tinput.initKeyboard();\n\tinput.bind(Input.KEY.N, \"nextAction\");\n\n\t// create fluid System\n\tvar fluidSystem = new Floom.System();\n\n\t// create and customize Materials\n\tvar mat0 = fluidSystem.createNewMaterial()\n\t\t.setParticleMass(0.5);\n\tvar mat1 = fluidSystem.createNewMaterial()\n\t\t.setParticleMass(1.0);\n\tvar mat2 = fluidSystem.createNewMaterial()\n\t\t.setParticleMass(2.0);\n\tvar mat3 = fluidSystem.createNewMaterial()\n\t\t.setParticleMass(4.0);\n\tvar mat4 = fluidSystem.createNewMaterial()\n\t\t.setParticleMass(8.0)\n\t\t.setIsElastic(true);\n\n\t// create Particles of these Materials\n\tnew Floom.Group(fluidSystem, -45,  5,  0, 25,  0.1, 0, mat0);\n\tnew Floom.Group(fluidSystem,   5,  5, 50, 25, -0.1, 0, mat1);\n\tnew Floom.Group(fluidSystem, -45, 30,  0, 50,  0.1, 0, mat2);\n\tnew Floom.Group(fluidSystem,   5, 30, 50, 50, -0.1, 0, mat3);\n\tnew Floom.Group(fluidSystem, -10, 55, 10, 75,    0, 0, mat4);\n\n    // example to spawn individual particles\n\t// var p = new Floom.Particle(-45.00001,  55.000001,  0.100001, 0.000001, mat3);\n    // fluidSystem.addParticle(p);\n\n\t// create obstacles\n\t// fluidSystem.doObstacles = true;\n\tfluidSystem.obstacles.push(\n\t\tnew Floom.Obstacle(-20, 20, 5),\n\t\tnew Floom.Obstacle( 20,  0, 9)\n\t);\n\n\t// configure grid rendering\n\t// fluidSystem.drawGrid = true;\n\n\t// configure spring calculation and rendering\n    fluidSystem.doSprings = true;\n    fluidSystem.drawSprings = false;\n\n\t// initialize specific datGui for the fluid System\n\tdatGuiForSystem(fluidSystem);\n\n\t// choose, which subset of the world should be displayed\n\tvar viewport = new Viewport(\n\t\tcanvas,\n\t\tVector2.Zero.copy(),\n\t\tnew Vector2(136.6, 76.8)\n\t);\n\tviewport.jumpToPoint(new Vector2(0, 35));\n\tinitTools(input, viewport, fluidSystem);\n\t\n\t// update routine\n\tvar lastPoint = Vector2.Zero.copy();\n\tfunction update(timePassed) {\n\t\t// entities/map\n\t\tif(graph)\n\t\t\tgraph.beginClock('update');\n\n\t\tinput.update();\n\t\t// viewport manipulation\n\t\tif(input.pressed(\"rightclick\")) {\n\t\t\tlastPoint.set(input.mouse);\n\t\t}\n\t\tif(input.state(\"rightclick\")) {\n\t\t\tviewport.translateBy(lastPoint.sub(input.mouse));\n\t\t\tlastPoint.set(input.mouse);\n\t\t}\n\t\tif(input.state(\"zoomIn\")) {\n\t\t\tviewport.zoomIn();\n\t\t}\n\t\tif(input.state(\"zoomOut\")) {\n\t\t\tviewport.zoomOut();\n\t\t}\n\t\t\n\t\tfluidSystem.update(timePassed);\n\t\tif(graph)\n\t\t\tgraph.endClock('update');\n\t\t// rendering\n\t\tif(graph)\n\t\t\tgraph.beginClock('draw');\n\t\trenderer.clear();\n\t\trenderer.withViewport(viewport, function() {\n\t\t\trenderer.drawSystem(fluidSystem);\n\t\t});\n\t\tdrawTool(renderer, input);\n\t\tif(graph)\n\t\t\tgraph.endClock('draw');\n\n\t\t// interaction\n\t\tinput.clearPressed();\n\t}\n\n\t\n\t// main loop\n\tvar lastFrame = window.performance.now();\n\tfunction animate() {\n\t\tif(debug)\n\t\t\tdebug.beforeRun();\n\n\t\tstats.update();\n\n\t\t// setup time since last call\n\t\tvar time = window.performance.now();\n\t\tvar dt = (time - lastFrame) / 1000;\n\t\tlastFrame = time;\n\n\t\tupdate(dt);\n\n\t\tif(debug)\n\t\t\tdebug.afterRun(renderer, fluidSystem);\n\n\t\trequestAnimationFrame(animate);\n\t}\n\n\t$().ready(function() {\n\t\tdebug = new Debug.Menu();\n\t\tdebug.addPanel({\n\t\t\ttype: Debug.Performance,\n\t\t\tname: 'graph',\n\t\t\tlabel: 'Performance'\n\t\t});\n\t\tanimate();\n\t});\n"]}