{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-petrinet/src/components/demo/lively-petrinet-simulation.js"],"names":["Morph","ContextMenu","pt","START","STOP","STEP","RUN","PAUSE","LivelyPetrinetSimulation","initialize","windowTitle","registerButtons","get","addEventListener","onDelete","stepState","petrinet","stepUntilFired","lively","query","undefined","error","sleep","ms","Promise","resolve","setTimeout","onStep","onStartButton","startButton","isStarted","innerHTML","start","reset","onStepButton","next","onRunButton","runButton","isRunning","deleteSelectedElement","onVelocitySlider","target","value","velocity","velocitySpan","innerText","engine","getEngine","setVelocity","initializeVelocitySlider","velocitySlider","event"],"mappings":"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","file":"lively-petrinet-simulation.js","sourcesContent":["import Morph from \"src/components/widgets/lively-morph.js\"\nimport ContextMenu from 'src/client/contextmenu.js';\nimport {pt} from 'src/client/graphics.js';\n\nconst START = \"Start\";\nconst STOP = \"Stop\";\nconst STEP = \"Step\";\nconst RUN = \"Run\";\nconst PAUSE = \"Pause\";\n\n\n\nexport default class LivelyPetrinetSimulation extends Morph {\n\n  initialize() {\n    this.windowTitle = \"LivelyPetrinetSimulation\";\n    this.registerButtons();\n    this.get(\"#delete\").addEventListener( \"click\", () => this.onDelete());\n    this.stepState = this.petrinet.stepUntilFired();\n  }\n  \n  \n  get petrinet() {\n    const petrinet = lively.query(this, \"lively-petrinet\");\n    if (petrinet === undefined) {\n      lively.error(\"Error: No Petrinet\")\n    }\n    return petrinet;\n  }\n  \n  \n  async sleep(ms) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n  \n  onStep() {\n    this.petrinet.onStep();\n  }\n  \n  \n  async onStartButton() {\n    //Change Text\n    let startButton = this.get(\"#startButton\");\n    if (!this.isStarted()) {\n      startButton.innerHTML = STOP;\n    } else {\n      startButton.innerHTML = START;\n      this.get(\"#runButton\").innerHTML = RUN;\n    }\n    \n    if (this.isStarted()) {\n      this.petrinet.start();\n    } else {\n      this.petrinet.reset();\n    }\n    \n  }\n  \n  onStepButton() {\n    if (this.isStarted()) {\n      this.stepState.next();\n    }\n  }\n  \n async onRunButton(){\n   if (!this.isStarted()) {\n     return;\n   }\n   \n    let runButton = this.get(\"#runButton\");\n    if (!this.isRunning()) {\n      runButton.innerHTML = PAUSE;\n    } else {\n      runButton.innerHTML = RUN;\n    }\n    \n        \n    // StartRunning\n    while (this.isStarted() && this.isRunning()) {\n      this.onStep();\n      await this.sleep(1000);\n    }\n  }\n  \n  isRunning() {\n    return this.get(\"#runButton\").innerHTML == PAUSE;\n  }\n  \n  isStarted() {\n    return this.get(\"#startButton\").innerHTML == STOP;\n  }\n  \n  onDelete(){\n    //lively.notify(\"Hallo\");\n    this.petrinet.deleteSelectedElement();\n  }\n  \n  onVelocitySlider({ target: { value: velocity } }) {\n    const velocitySpan = this.get('#velocitySpan');\n    velocitySpan.innerText = velocity;\n    const engine = this.getEngine();\n    if (!engine) return;\n    engine.setVelocity(velocity);\n  }\n  \n  initializeVelocitySlider() {\n    const velocitySlider = this.get('#velocitySlider');\n    velocitySlider.addEventListener('input', (event) => this.onVelocitySlider(event));\n  }\n  \n  \n\n  \n}"]}