{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-augment/src/components/demo/lively-ball.js"],"names":["Morph","pt","LivelyBall","initialize","a","v","b","s","step","path","simulate","t","render","parentElement","p","lively","getExtent","y","setPosition","x","lastTime","startTime","push","time","Date","now","window","requestAnimationFrame","livelyExample","parent","container","document","createElement","style","position","backgroundColor","setExtent","ball","create","components","openIn","appendChild","div","id","livelyMigrate","other"],"mappings":"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","file":"lively-ball.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport {pt}  from 'src/client/graphics.js'\n\n\nexport default class LivelyBall extends Morph {\n  \n  async initialize() {\n    this.a = this.a || -1\n    this.v = this.b || 0\n    this.s = this.s || 300\n    this.step()\n    this.path = this.path || []\n  }\n  \n  simulate(t) {\n    this.v = this.v + this.a * t\n    this.s = this.s + this.v * t\n    if (this.s < 0) {\n      this.s = 0\n      this.v = this.v * -0.9;\n    }   \n  }\n \n\n  render(t) {\n    if (!this.parentElement) return;\n    var p = pt(20, lively.getExtent(this.parentElement).y - this.s - lively.getExtent(this).y)\n    lively.setPosition(this, p)  \n    p.x  = (this.lastTime - this.startTime) * 0.01    \n    this.path.push(p)\n    \n    // var svg = lively.createPath(this.path, \"blue\", false)\n    // svg.id = \"plot\"\n    // var plot = this.parentElement.querySelector(\"#plot\")\n    // if (plot) plot.remove()\n    // this.parentElement.appendChild(svg)\n      \n    // var log = this.parentElement.querySelector(\"#log\")\n    // if (log) log.innerHTML = \" s= \" + Math.round(this.s) + \"<br>\" + \" v= \" + Math.round(this.v)\n  }\n  \n  step() {\n    if (!this.parentElement) return;\n    var time = Date.now()\n    if (this.lastTime) {\n      var t = (time - this.lastTime) * 0.01\n      this.simulate(t)\n      this.render()\n    } else {\n      this.startTime = time \n    }\n    window.requestAnimationFrame(() => this.step()); \n    this.lastTime = time\n  }\n  \n  \n  // LivelyBall.livelyExample(document.body)\n  static async livelyExample(parent) {\n    var container = document.createElement(\"div\");\n    container.style.position = \"absolute\"\n    container.style.backgroundColor = \"lightgray\"\n    // container.innerHTML = \"<button id='reset'>reset</button>\"\n    lively.setExtent(container, pt(150,400))\n    var ball = this.create()\n    await lively.components.openIn(container, ball)\n    ball.livelyExample()\n    // container.querySelector(\"#reset\").addEventListener(\"click\", () => { \n    //   ball.s = 200;\n    //   ball.v = 0;\n    //   ball.path = [];\n    //   ball.livelyExample()\n    // })\n    if (parent) parent.appendChild(container)\n    return container\n  }\n  \n  static create(){\n    return document.createElement(\"lively-ball\")\n  }\n  \n  livelyExample() {\n    lively.setExtent(this, pt(30,30)) \n    \n    var div = document.createElement(\"div\")\n    div.id = \"log\"\n    this.parentElement.appendChild(div)\n  }\n  \n  livelyMigrate(other) {\n    this.a = other.a\n    this.s = other.s\n    this.v = other.v\n    \n  }\n  \n}"]}