{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/floom/grid.js"],"names":["Node","Vector2","AABB","Grid","arr","activeCount","gsizeY","boundaries","cellSize","One","copy","prototype","update","system","recalculateBoundaries","clear","recalculateSizeY","length","iterate","fn","context","numberOfNodes","nIndex","n","call","getAt","cellX","cellY","getOrCreateAt","cell","node","undefined","_","each","particles","p","expandToInclude","position","Min","x","Math","floor","y","Max"],"mappings":"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","file":"grid.js","sourcesContent":["import Node from \"./node.js\";\nimport Vector2 from \"./../external/vector2.js\";\nimport AABB from \"./../external/aabb.js\";\n\n\tvar Grid = function(){\n\t\tthis.arr = [];\n\t\tthis.activeCount = 0;\n\t\tthis.gsizeY = 0;\n\t\tthis.boundaries = new AABB();\n\t\tthis.cellSize = Vector2.One.copy();\n\t};\n\n\tGrid.prototype.update = function(system) {\n\t    this.recalculateBoundaries(system);\n\t\tthis.clear();\n\t\tthis.recalculateSizeY();\n\t};\n\n\t// TODO: reuse old grid\n\tGrid.prototype.clear = function() {\n\t\tthis.arr.length = 0;\n\t\tthis.activeCount = 0;\n\t};\n\n\tGrid.prototype.iterate = function(fn, context) {\n\t\tvar numberOfNodes = this.arr.length;\n\t\tfor(var nIndex = 0; nIndex < numberOfNodes; nIndex++) {\n\t\t\tvar n = this.arr[nIndex];\n\t\t\tif (n) { fn.call(context, n); }\n\t\t}\n\t};\n\n\tGrid.prototype.getAt = function(cellX, cellY) {\n\t\treturn this.arr[cellX * this.gsizeY + cellY];\n\t};\n\t\n\tGrid.prototype.getOrCreateAt = function(cellX, cellY) {\n\t\tvar cell = cellX * this.gsizeY + cellY;\n\t\tvar node = this.arr[cell];\n\t\t\n\t\tif(node === undefined) {\n\t\t\tthis.arr[cell] = node = new Node();\n\t\t\tthis.activeCount++;\n\t\t}\n\t\t\n\t\treturn node;\n\t};\n\t\n\tGrid.prototype.recalculateBoundaries = function(system) {\n\t    // expand boundaries to include all particles\n\t    this.boundaries.clear();\n\t    _.each(system.particles, (p) => {\n\t    \tthis.boundaries.expandToInclude(p.position);\n\t    });\n\n\t\t// expand boundaries a bit further\n\t\tthis.boundaries.Min.x = Math.floor(this.boundaries.Min.x-1);\n\t\tthis.boundaries.Min.y = Math.floor(this.boundaries.Min.y-1);\n\t\tthis.boundaries.Max.x = Math.floor(this.boundaries.Max.x+3);\n\t\tthis.boundaries.Max.y = Math.floor(this.boundaries.Max.y+3);\n\t};\n\t\n\tGrid.prototype.recalculateSizeY = function() {\n\t\tthis.gsizeY = Math.floor(this.boundaries.Max.y-this.boundaries.Min.y);\n\t};\n\t\n\texport default Grid;\n"]}