"use strict";let ERROR="";const errors=new Map;errors.set("w-argss","Die Klasse World wurde mit mehr als zwei Argumenten aufgerufen."),errors.set("w-hasID","Die Klasse World wurde mit einer bereits verwendeten ID aufgerufen."),errors.set("w-noID","Die Klasse World wurde mit einer feherhaften ID aufgerufen."),errors.set("w-2arg","Die Klasse World wurde mit fehlerhaften Werten für Breite oder Höhe aufgerufen."),errors.set("w-wrongID","Die Klasse World wurde mit einer ID aufgerufen, die keinem HTML-Canvas zugeordnet ist."),errors.set("w-nameRO","Das Attribut .name kann nur gelesen werden."),errors.set("w-color","Farbwerte müssen als Zeichenkette angegeben werden."),errors.set("w-spidersRO","Das Attribut .spiders kann nur gelesen werden."),errors.set("w-clear4","Die Methode .clear() wurde mit falschen Argumenten aufgerufen."),errors.set("w-listen1","Die Methode .listen() soll auf ein unbekanntes Ereignis lauschen."),errors.set("w-listen2","Ein Ereignis kann nicht mit mehr als einem Event-Handler gekoppelt werden."),errors.set("s-world","Die Klasse Spider wurde nicht mit einem World-Objekt als Argument aufgerufen."),errors.set("s-xRO","Das Attribut .x kann nur gelesen werden."),errors.set("s-yRO","Das Attribut .y kann nur gelesen werden."),errors.set("s-angleRO","Das Attribut .angle kann nur gelesen werden."),errors.set("s-speed","Der Wert für .speed muss im Bereich [1..100] liegen."),errors.set("s-width","Der Wert für .width muss eine positive Zahl sein."),errors.set("s-height","Der Wert für .height muss eine positive Zahl sein."),errors.set("s-speed","Der Wert für .scale muss im Bereich [1..500] liegen."),errors.set("s-visible","Der Wert für .visible muss im Bereich [0..100] liegen oder true|false sein."),errors.set("s-lsize","Der Wert für .linesize muss eine positive Zahl sein."),errors.set("s-lend",'Der Wert für .lineend muss "flat" oder "round" sein.'),errors.set("s-fsize","Der Wert für .fontsize muss eine positive Zahl sein."),errors.set("s-align",'Zulässige Werte für .textalign sind: "left", "right", "center".'),errors.set("s-flip",'Zulässige Werte für flipIn/Out sind: "left","right","center","top","middle","bottom".'),window.onerror=function(e,t,i){i?(i=" "+i,e=e.slice(e.indexOf(":")+1).trim()):i="";let s,r="Laufzeitfehler (JSpider"+i+"):\n\n";if(errors.has(e))s=errors.get(e);else if(e.endsWith("is not a function")){let t=e.slice(0,e.indexOf("is not a function"));s="Unbekannte "+(t.indexOf(".")>-1?"Methode":"Funktion")+": "+t}else s=e||"Unbekannter Fehler";alert(r+s+"\n ")};const DEG2RAD=.0174533,getElementById=e=>document.getElementById(e),write=e=>document.write(e),writeln=e=>document.write(e+" "),read=function(e){let t=prompt(e);if(null===t)return!1;let i,s,r=t.split(","),h=[];for(let e of r)""!=(i=e.trim())&&(s=Number(i),h.push(isNaN(s)?i:s));return!!h.length&&(1==h.length?h[0]:h)},round=(e,t=0)=>Math.round(e*10**t)/10**t,trunc=Math.trunc,getDays=e=>Math.trunc((new Date(e.split(".").reverse().join("-"))-new Date)/864e5),getWeekday=e=>["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][new Date(e.split(".").reverse().join("-")).getDay()],getDate=()=>(new Date).toLocaleDateString(),getTime=()=>(new Date).toLocaleTimeString(),__startTime=new Map,setTimer=function(e=0){e||(e=0),__startTime.set(e,new Date)},getTimer=function(e=0){return e||(e=0),__startTime.has(e)?new Date-__startTime.get(e):0},randomNumber=function(e,t){return te[Math.floor(Math.random()*e.length)]||"",randomColor=function(){let e="#";for(let t=0;t<6;t++)e+="0123456789ABCDEF"[Math.floor(16*Math.random())];return e};Array.prototype.toString=function(){return JSON.stringify(this)},Array.prototype.shuffle=function(){for(let e=0;ee-t,max2min=(e,t)=>t-e;Map.prototype.toString=function(){let e=[];for(let t of this.keys())e.push(JSON.stringify(t)+":"+JSON.stringify(this.get(t)));return"{"+e.join("; ")+"}"},Map.prototype.save=function(e){let t=JSON.stringify([...this.entries()]);window.localStorage.setItem(e,t)},Map.prototype.load=function(e){let t=JSON.parse(window.localStorage.getItem(e));if(t)for(let e of t)this.set(...e);return!!t};const __builtinImages=new Set(["ant","bug","spider"]),__images=new Map;__images.set("ant",{width:50,height:50,src:"data:image/png;base64,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"}),__images.set("bug",{width:50,height:50,src:"data:image/png;base64,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"}),__images.set("spider",{width:50,height:50,src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4gEBFQQQcbLqBwAABFZJREFUaN7VmV2IVVUUx3/j+DGj6KSjlqOp40NoITqhMZCkqGBBM5ISWpBaQ8qgmVlN+KIThD2Ikb6MlA/VQxA9RFYPaSOYifgRZqmNODNhfqd2/UJzpuvtwXVgt9j73nvu2edc7oIN9+699j7rv/b62HvtcvzSIKARuA1cp4RpF5ABUkBtKQNJCZAM0A6UJfXhcs/rVQKz5HctcAr4rRR3pD9wzNiV00BFAcpYDTQluaM2mmsAyQCvhpg7HjhszF1eqBBlwEvA68AED06fAY7nqdnZwGWlhJZCBVhmLHIP2C+gHgy5zjwl0Lwc/K8AvWrON8DAQoG8qRYLWg/whThyPtrtI44ezP8uC+8LQNrgTQPvRPWPQcA2SWYZRzsGLAH6hVBKDzDMwtMoYwHfbWCBT4etAJ4DvgTuOgD9AawA+jrWGKaEXKrGpwJ3jPG7eZhgJBoh2u1wADoBPOuY227w7VA7/7syp8U55BgqJhuZykTgPQ5AXwE1as5aZTaBOX6s5q7JEo5bjJB8Ahjic5dmAHstYK4BLxp8j6jxeuAJiYhmIDAde4CY4X7FF7Rn4jC7+cAZy8faJMsDnDX61wI/Gv+vAKOErxpoBS5kCTQngQfi8qEqiXRaez+IGeww+i5Ysn6FmE/KIXwK+BRoMJQTK8227M5BYLNDwE6Z020ZuyeKeD4p4TWNBo4qoW44gHQA/6q+XuATYGIhkSgK1QBPyrlsqESmG8AbwNiQa30r8zqT1PzTwG5HVAnb/gYWJm06lcDnHoQ3k+m4pEGUiwP6AnEaGFkMR37bI4jYEls+QeGsZyApOfI8miSQhz2DMPNFt1zeIlG+p8l+MSkoDXQB/yS1I32Bq553o1d2oqGASksket8zkIZilXkqLcePKO1olOJCVBoO7PMIZk+cx/J8EmOzOKkPMF3AdB/5IUrEq5fbYq1cjO4AF+X+PTZk9GoD1kt+KToNAb5XGndVYc44kuS7cpIuGk0EfrGYzRYHkINSnr1mGbsFbPdhcmFzzDpVo8oAvwJjpEIZ9N1UPI1Sjm2zlEzN2nEr8FicIOpU9dysjFQJT6fRv0HVx7qAwcI3Cfgsiylm5A5U6RNArXw0bakRrzOOPmPU+Ey5h5t9H6m1H5IdOOcA46UaOVkA9Fg+cBiYoviXK5BBAvxazV3giIqzxOyC54ZLhH8Z+J8PLAR2Oq62l4FVjhqwKXC7SqznVBXyqRwyPF5o8qwDNmXZ4pvARsMXNA2U6BPwr7SUj9KqSlnnM2u3qAKzblckcVXnWKtJFalrLDzNapf/8hVym7MAOAC8HCJq/GzM3ZuFr8WSQxZFBfKaWvQ88IHYZxiqV+vkEqzVoritRHg+7y9msxWYE2EhMwn+ifsxyKQllqS6qphHlWnK7sO8zE4XKzCr90WhPsBPKjBUFVCG/RB4j/tvJUWhlco0VlOidMkAcSTG6kvsdMi4g9RRwjQaeIv774SJ0n/XmqwrZzQsQgAAAABJRU5ErkJggg=="}),__images.set("car",{width:101,height:50,src:"data:image/png;base64,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"}),__images.set("heli",{width:80,height:57,src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAA5CAQAAAAL42S0AAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4ggBDwcLzFs0/wAABS9JREFUaN69mltsVEUYx39nt9vLLgVasAhVIMYHHkwgmGKC1VhN+qBREluIUsWAEaOVVAxIvdWKF8DE0ARtYyAK2BaNYmrwlnprGhKhpbUaVDRSsNIWUQqlLXS3ZY8P++10e7ps99ycedmdM983//Of+W6zC+bbGrL4P9pTXGNFrAGdHjJdh7cNndPMNit2Czo6OkeZ5iq8V2Sd98yLPiCivS6yuFXRELAi/qiIdzDVFXgvif5W6yqiLJ5miuPwtoju36yxF22loqbN4Y2uEL0t9lU9qM6icyy+Jjo78Tuhrky9rTMQn0Mn7Ax7xrPYbe+8APCq6Ooiw8kzs17UHrIJsVzYa8XjtNWtUm9uHeLLaifS3fBbG0T99xaP9tPC3hF8bnn+1Tasr1Jke0h1M3ZuVCxmmGY/jE67O5sb2x5RESB5Fp9XvvSKm6vZBpbHInYCsImtABzmNobFmU/kxc8BOiXfewMdjZ9YyhCQz0G3Mo+v5PPjKguJsLiMyzIy1j+Vuc8o9lIAWITuztaW8iM/8IR82yTLHiZNIPZyRPV26vChxfjPnyWWL6CNY5Mvdjt3cKtDAbA9gblsVJbrNaPaK2J2z2W5itERFtPZz2c0KZafVOY03Zziu0TQfjK/QQXAiJGs5DJfGIJjd3LsaawjgA6EyeceAPZyFA+gcYFqyyxuAaCNpYSAAloZBMqoAqCTPPqAhZykP7GqixPsbKyfNQlLo5haOSJRK20mDR9TSAPWydhfwt5idHSKEivtJUSQIMOERXyUIEGChDhhCp6HRnR06g0W3UYLx+ngA0YlrZgJwM0EZcY7yS1wTlUaZh25h1Sy+UUxXy9yFXF2pUvYu3Hc6LbJI8lcflVBKh6sHK4ii0zS8RFgNrPIYip+UvGSThqZzI+Z/T73A1BLyTgt/7KAs8ASmsXGoy2Xnisz4GMxawip96llN5/TQU/CE5q478YTsytjp9oP5MWZvyvRFi2xDCNRL0Vj2DA2wDxy6I8z+3gigAHepSkmbv7OH/zJKbrppY8hRizAawLgvGH0HNkx1hzbqyc/g8dUcPIQwIsHDQ8+fKSQggcPkEMuOWSTSTopTCeXWcyMUxt/QyFhoI6V48b/YQ6jwDIaDBIz6EtsiZmK+AFLrtlPl2KjWV59VRymGiR7KRs3ujmZJf6Wyd9ajB5+Dom8Nu72YUA87AF15xKBWKTglSe3QJNMf9EiQA2o5Gu8aECJJPMnCIDE9ypZ4WOBuB6dM6w1U13p6Ky2lShESp/HRNcQMwC4Wp4+q9KIiLu+QZ4n1YpFeK7tbOY+Ye+kMJePzg55tkNW+chcLgiQIaJ2a/u1ouci2TKymbfZS6F8e0GeHzQPcSfVbLeZsK4Q9roUvIkn9S3rLJpvlYQYVKXQw7L0JcmW5zHMgOrD1BnK9e9kv5Yz6FbRtF2ujjRgOWHC6JwiB4CCOH6wRuSqFYseVQi40rykykY9pNibFvPM2H0TLtwaBWKqu1tdLLG8hzlJy9QIxP3OX7oZW4myXHM3/6+rcl5zE16RJPNnuNa0bI2KLq6xuEJFDWu/m1SpjdbcYW9EcuX5lnVUq0zHcYj3iupBm786RSHuc5q9SB3Tz3W2dUWjyyfOsXi3qLzg0C+fu0TfHqf8XkhM43rHduRN51i8U1SdN3tDNUnbk0wRmjx7lxxkbyKLlluhKiHd+e9CvSGtsOj3Qi6wZ2SxwbzoQklH++SGyq32oUCsMF8WtKAz6iJ7sX5xhJusiDaa/7OIpfYlBfAfuEow4zfeSIsAAAAASUVORK5CYII="}),__images.set("plane",{width:82,height:80,src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABRCAQAAADiWpnEAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4ggBDxU3m8A4qwAABRlJREFUaN7Vm39sU1UUxz+37X50bdeV/XBEM3F/oEKcZslEjAT4A5bAX/wBQZNFlID6B38YTYyG+IdxJIoxITGZiEqMQ7JI1AQ1KBAS0RgIzAV0OrcFJcMpZDBwG5tr3/WPtUvf63vr632v7eu9SdN77nknp/ede8/3nnMqJLk3cR+7KZ8fXuZVOUUBWkDpqb9oY2naOC5ekVoBtJVKnWd0wwSbJPnvqo/VMaIjXOfe/CvrU3whY+zXjWN0i6hHzUBCEzcNpHcJeNIMJPjYbyBpbEN4UlkJLUwbSJO05lNZIZUNSJRxlHYDcYD1XNdR4nK66DYrkbCBRFamY/iLfRrMte8YpIDNkbJyggMloyzwKf8WTtmAw+ev8CWPm9DjvM8kABfRPLHBJBLWMGs6sc+9jeXCOZsUEKLfdCLBk267CJ/jVzNFt8Vu6KLNI9ggbW2XMmUxNcxib60sXOJHi5lmPhBBT62shI4FJjvxeQAbpKGEO+mn2mJS4yV+NlDOy7Hirayfz3NgT7CheDaLTHAY6X13m2qnuVU6yl7je+9jg5QhxMURNmbZHM9zKvntkuJGZjn7qEiOvmWPTCgKauYiVQuyjLJS/ulsUeoZcyNYQQVnsjKdIuTo1MHP0bTxVZoVBQles8G21wkWQ8J2HeUEQUVRj1mARf0Zu9mZskYgslsN2lHLVRts4yxzomwl53W0OKuVRAX4xhbjT8TUPdgMx3Rbzs9B0aiwVROctMX3EG+JMmVswKMZ1vYJ5Qpru4q4LUaNnSqmNvdRYwhgSjR25C6ORm7ZZL3NClVlfRzKmJmgJWdhlZyzzTxMoyKeFZvpQRgspI818qaptxKEiRAmQogwIUKEqKKKEFu427YF9lreMObsc4pxhuhjSCYRXUrZJvoJZTzwEV/QQB111BIjRg01RIlQ2PY3H/KOHE1tsApa+K0ASQH1PsNTCCERZRxnNV5vszzso1San9q5s6Cd17nmaTOQfEYwtcEW8QuNJhGBc/PbK1jEVR2mk245m7opPEB9BstNNspf0w6sSmJEiRKlmmoiRIgQSh5fYUJUEWJxDhclyfiCs9OMM0gvX9ObzF8mseheE5fYkasPI8AJ28z/sUrNgwW5kDFzkLKchVVzxSarxgsK7lwi4X5uG+gD1Cn47uUZySarfoQKVWzwXMYR/IgSot1ik3Eod1yQAt9G0KzxohKAE3TZYpxmpfpNoZEbOtpXVCqJCtJny1p3qUbEM1NvozQpilrCpA22wyqwPnUVF7znRoRPwia0rEy/U+8kbhBmWHevVwz9IjiQlWmKNmdBjlZm5kdniCgLCjOY1VqfdZa/AT/h+e6guIEH0360ef84dzej7wGZYMIVsLEurXjK3Nc3cEjMIdM35IWihekllHO6RML0wF20lk7ke22W2Kx3lBVlpplxa8tTDFi7Y7H3LOC7bqhHDfNjs+2WRqCxQ/Z7KdFcwQ+Wk2+6WXXghohllpDbYQ7BdTMQgq3z2R5jdmabnPRUvQERC0wQZ533yk7WmwaQNV52vy7RYYZR+NmJ3/SFraBHAJzlbdeqlh2u6xImSqS8Twi2mkR1PepuI2wvnfK+tTRn5Zn2xNFFOScziGeJerMyuTXjIpPnmnplMxA+dhkuMhpPy4G8Gq0DWGg8tPa4V8Hl7p8qBJ0G0nGqvPoPkDv4R0cYUQ06FcJmn6BBlw/vkJcLcNAqresi/nAeIi0UkInRkwZfRuiSshAe7H8LaRsEtH2fyAAAAABJRU5ErkJggg=="});const registerImage=function(e,t){if(!e||!t)return!1;if(__builtinImages.has(e))throw new Error('"'+e+'" is a built-in image.\nSolution: Use a different image name.');if(__images.has(e))throw new Error('"'+e+'" has already been registered.\nSolution: Use a different image name.');let i=new Image;i.onerror=(()=>{throw new Error('Image "'+e+'" cannot be registered.\nFile "'+t+'" does not exist.')}),i.onload=(()=>{__images.set(e,{src:t,width:i.width,height:i.height})}),i.src=t},isRegisteredImage=function(e){return __images.has(e)},__worlds=new Map,__handlers=new Map;class World{constructor(...e){if(e.length>2)throw Error(ERROR="w-argss");let t;if(1==e.length){if(t=e[0],__worlds.has(t))throw Error(ERROR="w-hasID");if("string"!=typeof t||!t)throw Error(ERROR="w-noID");if(this.canvas=document.getElementById(t),!this.canvas)throw Error(ERROR="w-wrongID")}else{let i=800,s=600;if(2==e.length){let t=parseInt(e[0]),r=parseInt(e[1]);if(isNaN(t)||isNaN(r)||t<10||r<10)throw Error(ERROR="w-2arg");i=t,s=r}t="web-"+(__worlds.size+1),this.canvas=document.createElement("canvas"),this.canvas.id=t,this.canvas.width=i,this.canvas.height=s,document.body.appendChild(this.canvas)}__worlds.set(t,this),this.canvas.addEventListener("dragover",e=>{e.preventDefault()}),this.canvas.addEventListener("drop",e=>{e.preventDefault()}),this.context=this.canvas.getContext("2d"),this.context.lineJoin="round",this.context.textBaseline="middle",this.__width=this.canvas.width,this.__height=this.canvas.height,this.__top=this.canvas.offsetTop+this.canvas.clientTop,this.__left=this.canvas.offsetLeft+this.canvas.clientLeft,this.__fliptypes=new Set(["left","center","right","top","middle","bottom"]),this.__spiderIDs=0,this.__queue=[],this.__queueBackup=[],this.__requestID,this.__name=t,this.__color=this.canvas.style.backgroundColor,this.__image=this.canvas.style.backgroundImage,this.__spiders=[this.canvas]}get name(){return this.__name}set name(e){this.__queue.push(0,"error","w-nameRO")}get color(){return this.__color}set color(e){if("string"!=typeof e)return void this.__queue.push(0,"error","w-color");let t=e.toLowerCase();"random"==t&&(t=randomColor()),this.__color=t,this.__queue.push(0,"background",this.__color)}get image(){return this.__image}set image(e){this.__image=e,this.__queue.push(0,"landscape",this.__image)}get spiders(){return this.__spiders.slice(1)}set spiders(e){this.__queue.push(0,"error","w-spidersRO")}clear(...e){if(0==e.length)e=[0,0,this.__width,this.__height];else{if(4!=e.length)return void this.__queue.push(0,"error","w-clear4");e=e.map(Number);for(let t of e)if(isNaN(t)||t<0)return void this.__queue.push(0,"error","w-clear4");if(e[0]>=e[2]||e[1]>=e[3])return void this.__queue.push(0,"error","w-clear4")}e[2]=e[2]-e[0],e[3]=e[3]-e[1],this.__queue.push(0,"erase",e)}listen(e,t=!1){const i=e=>{if(this.__queue.length)return;let i="";e.altKey&&(i+="Alt"),e.ctrlKey&&(i+="Ctrl"),e.shiftKey&&!e.key&&(i+="Shift"),e.key&&(i=i?i+"-"+e.key:e.key);let s={x:e.offsetX,y:e.offsetY,key:i,wheel:e.deltaY>0?1:-1,type:e.type,input:"",source:this};t(s),this.animate()};if(e=e.toLowerCase(),!new Set(["click","dblclick","mousemove","wheel","keypress"]).has(e))throw Error(ERROR="w-listen1");let s=this.__name+"#"+e;if(!t&&__handlers.has(s))return e.startsWith("key")?window.removeEventListener(e,__handlers.get(s)):this.canvas.removeEventListener(e,__handlers.get(s)),void __handlers.delete(s);if(__handlers.has(s))throw Error(ERROR="w-listen2");e.startsWith("key")?(window.addEventListener(e,i),__handlers.set(s,i)):(this.canvas.addEventListener(e,i),__handlers.set(s,i))}animate(e=this){if(!this.__queue)return;let t=this.context,i=this.__queue,s=parseInt(i.shift()),r=i.shift(),h=e.__spiders[s],l=(this.__width,this.__height,function(t,i,s,r="center"){h._visible&&(h.__shape.style.left=t-h._width/2+e.__left+"px",h.__shape.style.top=i-h._height/2+e.__top+"px",h.__shape.style.transformOrigin=r,h.__shape.style.transform=`rotate(${-s}deg) scale(${.01*h._scale})`)});switch(r){case"error":throw Error(ERROR=i.shift());case"background":e.canvas.style.backgroundColor=i.shift();break;case"landscape":e.canvas.style.backgroundImage="url("+i.shift()+")",e.canvas.style.backgroundSize="contain",e.canvas.style.backgroundRepeat="no-repeat";break;case"erase":t.clearRect(...i.shift());break;case"visible":h._visible=i.shift(),h.__shape.style.opacity=.01*h._visible,h.__shape.style.visibility=h._visible?"visible":"hidden",l(h._x,h._y,h._angle);break;case"image":{let t=i.shift();if(h._image=t,!t){h.__shape.style.backgroundImage="none";break}let s=__images.get(t);h._color||h._border||h._shadow||h._edges?(h.__shape.style.backgroundImage="url("+s.src+")",h.__shape.style.backgroundRepeat="no-repeat",h.__shape.style.backgroundSize="auto auto",h.__shape.style.backgroundPosition="center center"):(h._width=s.width,h._height=s.height,h.__shape.style.width=s.width+"px",h.__shape.style.height=s.height+"px",h.__shape.style.left=-s.width/2+e.__left+"px",h.__shape.style.top=-s.height/2+e.__top+"px",h.__shape.style.backgroundImage="url("+s.src+")",h.__shape.style.backgroundRepeat="no-repeat",h.__shape.style.backgroundSize="auto auto",h.__shape.style.backgroundPosition="center center",l(h._x,h._y,h._angle));break}case"label":h._label=i.shift(),""===h._label?h.__shape.innerHTML="":(h.__shape.style.font=h._font,h.__shape.style.color=h._linecolor,h.__shape.innerHTML=`");break;case"scale":h._scale=i.shift(),l(h._x,h._y,h._angle);break;case"width":{let t=i.shift();h._width=t;let s=t-(h.__shape.offsetWidth-h.__shape.clientWidth);h.__shape.style.width=s+"px",h.__shape.style.left=-t/2+e.__left+"px",h.__shape.style.top=-h._height/2+e.__top+"px",l(h._x,h._y,h._angle),h._label&&(h.__shape.innerHTML=`");break}case"height":{let t=i.shift();h._height=t;let s=t-(h.__shape.offsetHeight-h.__shape.clientHeight);h.__shape.style.height=s+"px",h.__shape.style.left=-h._width/2+e.__left+"px",h.__shape.style.top=-t/2+e.__top+"px",l(h._x,h._y,h._angle),h._label&&(h.__shape.innerHTML=`");break}case"bodycolor":h._color=i.shift(),h.__shape.style.backgroundColor=h._color;break;case"border":{h._border=i.shift(),h.__shape.style.border=h._border;let e=h._width,t=h._height,s=e-(h.__shape.offsetWidth-h.__shape.clientWidth),r=t-(h.__shape.offsetHeight-h.__shape.clientHeight);h.__shape.style.width=s+"px",h.__shape.style.height=r+"px",h._label&&(h.__shape.innerHTML=`");break}case"shadow":h._shadow=i.shift(),h.__shape.style.boxShadow=h._shadow;break;case"edges":h._edges=i.shift(),h.__shape.style.borderRadius=h._edges;break;case"cursor":h._cursor=i.shift(),h.__shape.style.cursor=h._cursor,h._label&&(h.__shape.innerHTML=`");break;case"flip":{let t=i.shift(),s=i.shift(),r=i.shift();h.__shape.style.opacity=.01*r;let l=`rotateX(${t}deg)`;"left"!=s&&"center"!=s&&"right"!=s||(l=`rotateY(${t}deg)`),"middle"==s&&(s="center"),90==t?(h.__shape.style.left=h._x-h._width/2+e.__left+"px",h.__shape.style.top=h._y-h._height/2+e.__top+"px",h.__shape.style.visibility="hidden"):h.__shape.style.visibility="visible",h.__shape.style.transformOrigin=s,h.__shape.style.transform=l+` rotate(${-h._angle}deg) scale(${.01*h._scale})`;break}case"stamp":{let e=i.shift()||(new Date).getTime();if(!h._visible)break;if(h.__stamps.has(e))throw new Error('"'+e+'" is already in use as a stamp name.\nSolution: use another or no stamp name.');h.__stamps.add(e);let t=h.__shape.cloneNode(!0);t.id=h.__name+">"+e,t.style.zIndex=1,t.style.cursor="default",document.body.appendChild(t);break}case"unstamp":{let e=i.shift();if(h.__stamps.has(e)){document.getElementById(h.__name+">"+e).remove(),h.__stamps.delete(e)}if(!e){for(let e of h.__stamps){document.getElementById(h.__name+">"+e).remove()}h.__stamps.clear()}break}case"linesize":h._linesize=i.shift();break;case"lineend":h._lineend=i.shift();break;case"linecolor":h._linecolor=i.shift();break;case"fillcolor":h._fillcolor=i.shift();break;case"beginPath":t.beginPath();break;case"closePath":t.closePath();break;case"lineTo":{let e=i.shift(),s=i.shift();t.strokeStyle=h._linecolor,t.lineWidth=h._linesize,t.lineCap=h._lineend.replace("flat","butt"),t.lineTo(e,s),t.stroke(),l(e,s,h._angle),h._x=e,h._y=s;break}case"moveTo":{let e=i.shift(),s=i.shift();t.moveTo(e,s),l(e,s,h._angle),h._x=e,h._y=s;break}case"rotate":{let e=i.shift();l(h._x,h._y,e),h._angle=e;break}case"spinWeb":{let e=i.shift(),s=e[0],r=e[1];t.beginPath(),t.moveTo(s,r);for(let i=2;i0),t.closePath(),h._linecolor&&(t.strokeStyle=h._linecolor,t.lineWidth=h._linesize,t.lineCap="round",t.stroke()),h._fillcolor&&(t.fillStyle=h._fillcolor,t.fill());break}case"font":h._font=i.shift();break;case"textalign":h._textalign=i.shift();break;case"fillText":{h._shadowcolor&&(t.shadowOffsetX=h._shadowX,t.shadowOffsetY=-h._shadowY,t.shadowColor=h._shadowcolor,t.shadowBlur=5);let e=i.shift(),s=i.shift()||1e4;t.fillStyle=h._linecolor,t.font=h._font,t.textAlign=h._textalign,t.save(),t.setTransform(1,0,0,1,0,0),t.translate(h._x,h._y),t.rotate(-h._angle*DEG2RAD),t.fillText(e,0,0,s),t.restore();break}case"input":{let e=i.shift(),t=i.shift(),s=read(e);this.__queueBackup=[...i],this.__queue=[],t({type:"input",input:s,source:h}),this.__queue.push(...this.__queueBackup);break}case"countdown":{let t=i.shift(),s=i.shift();t>=0?h.__timeout=setTimeout(()=>{this.__queueBackup=[...i],this.__queue=[],s({type:"timer",source:h}),this.__queue.push(...this.__queueBackup),0==this.__queueBackup.length&&e.animate(e)},t):clearTimeout(h.__timeout);break}case"settimer":setTimer(i.shift());break;case"wait":{let e=i.shift(),t=new Date,s=0;for(;new Date-t{if(this.world.__queue.length)return;let i="";e.altKey&&(i+="Alt"),e.ctrlKey&&(i+="Ctrl"),e.shiftKey&&!e.key&&(i+="Shift"),e.key&&(i=i?i+"-"+e.key:e.key);let s=e.offsetX,r=e.offsetY,h=e.type;"dragstart"==e.type&&(h="drag",this.__sx=e.screenX,this.__sy=e.screenY,e.dataTransfer.setData("text/html","dummy")),"dragend"==e.type&&(h="drop",s=this.x+(e.screenX-this.__sx)/window.devicePixelRatio,r=this.y+(e.screenY-this.__sy)/window.devicePixelRatio);let l={x:s,y:r,key:i,wheel:e.deltaY>0?1:-1,type:h,input:"",source:this};t(l),this.world.animate()};if(e=e.toLowerCase(),!new Set(["click","dblclick","mouseenter","mouseleave","mousemove","wheel","drag","drop","keypress"]).has(e))throw Error(ERROR="w-listen1");"drag"==e&&(e="dragstart"),"drop"==e&&(e="dragend");let s=this.world.__name+"."+this.__name+"#"+e;if(!t&&__handlers.has(s))return e.startsWith("key")?window.removeEventListener(e,__handlers.get(s)):this.__shape.removeEventListener(e,__handlers.get(s)),void __handlers.delete(s);if(__handlers.has(s))throw Error(ERROR="w-listen2");e.startsWith("key")?window.addEventListener(e,i):this.__shape.addEventListener(e,i),__handlers.set(s,i)}get name(){return this.__name}set name(e){throw Error(ERROR="w-nameRO")}get x(){return this.__x}set x(e){throw Error(ERROR="s-xRO")}get y(){return this.__y}set y(e){throw Error(ERROR="s-yRO")}get angle(){return this.__angle}set angle(e){throw Error(ERROR="s-angleRO")}get speed(){return this.__speed}set speed(e){let t=parseInt(e);if(isNaN(t)||t<1||t>100)throw Error(ERROR="s-speed");this.__speed=t}get width(){return this.__width}set width(e){let t=parseInt(e);isNaN(t)||t<1?this.world.__queue.push(0,"error","s-width"):(this.__width=t,this.world.__queue.push(this.id,"width",t))}get height(){return this.__height}set height(e){let t=parseInt(e);isNaN(t)||t<1?this.world.__queue.push(0,"error","s-height"):(this.__height=t,this.world.__queue.push(this.id,"height",t))}get color(){return this.__color}set color(e){if("string"!=typeof e)return void this.world.__queue.push(0,"error","w-color");let t=e.toLowerCase();"random"==t&&(t=randomColor()),this.__color=t,this.world.__queue.push(this.id,"bodycolor",t)}get border(){return this.__border}set border(e){this.__border=e,this.world.__queue.push(this.id,"border",e)}get shadow(){return this.__shadow}set shadow(e){this.__shadow=e,this.world.__queue.push(this.id,"shadow",e)}get edges(){return this.__edges}set edges(e){this.__edges=e,this.world.__queue.push(this.id,"edges",e)}get cursor(){return this.__cursor}set cursor(e){this.__cursor=e,this.world.__queue.push(this.id,"cursor",e)}get scale(){return this.__scale}set scale(e){let t=parseInt(e);isNaN(t)||t<1||t>500?this.world.__queue.push(0,"error","s-scale"):(this.__scale=t,this.world.__queue.push(this.id,"scale",t))}get visible(){return this.__visible}set visible(e){!0===e&&(e=100),!1===e&&(e=0);let t=parseInt(e);isNaN(t)||t<0||t>100?this.world.__queue.push(0,"error","s-visible"):(this.__visible=t,this.world.__queue.push(this.id,"visible",t),this.world.__queue.push(this.id,"image",this.__image))}get label(){return this.__label}set label(e){this.__label=e,this.world.__queue.push(this.id,"label",e)}get image(){return this.__image}set image(e){e!==this.__image&&(this.__image=e,this.world.__queue.push(this.id,"image",e))}get linesize(){return this.__linesize}set linesize(e){let t=parseInt(e);isNaN(t)||t<1?this.world.__queue.push(0,"error","s-lsize"):(this.__linesize=t,this.world.__queue.push(this.id,"linesize",t))}get lineend(){return this.__lineend}set lineend(e){"flat"==e||"round"==e?(this.__lineend=e,this.world.__queue.push(this.id,"lineend",e)):this.world.__queue.push(0,"error","s-lend")}get linecolor(){return this.__linecolor}set linecolor(e){if("string"!=typeof e)return void this.world.__queue.push(0,"error","w-color");let t=e.toLowerCase();"random"==t&&(t=randomColor()),this.__color=t,this.world.__queue.push(this.id,"linecolor",t)}get fillcolor(){return this.__fillcolor}set fillcolor(e){if("string"!=typeof e)return void this.world.__queue.push(0,"error","w-color");let t=e.toLowerCase();"random"==t&&(t=randomColor()),this.__fillcolor=t,this.world.__queue.push(this.id,"fillcolor",t)}get fontsize(){return this.__fontsize}set fontsize(e){let t=parseInt(e);isNaN(t)||t<1?this.world.__queue.push(0,"error","s-fsize"):(this.__fontsize=t,this.world.__queue.push(this.id,"font",this.__fontstyle+" "+t+"px "+this.__fontname))}get fontname(){return this.__fontname}set fontname(e){this.__fontname=e,this.world.__queue.push(this.id,"font",this.__fontstyle+" "+this.__fontsize+"px "+e)}get fontstyle(){return this.__fontstyle}set fontstyle(e){this.__fontstyle=e.toLowerCase(),this.world.__queue.push(this.id,"font",e+" "+this.__fontsize+"px "+this.__fontname)}get textalign(){return this.__textalign}set textalign(e){let t=e.toLowerCase();"left"==t||"right"==t||"center"==t?this.world.__queue.push(this.id,"textalign",t):this.world.__queue.push(0,"error","s-align")}stamp(e){this.__visible&&this.world.__queue.push(this.id,"stamp",e)}unstamp(e){this.world.__queue.push(this.id,"unstamp",e)}flipIn(e="center"){if(!this.world.__fliptypes.has(e))return void this.world.__queue.push(0,"error","s-flip");if(!this.__visible)return;let t=Math.floor(200/this.__speed),i=90/t;for(let s=0;s100)return void this.world.__queue.push(0,"error","s-visible");if(this.__visible)return;let s=Math.floor(200/this.__speed),r=90/s;for(let t=0;t180&&(s-=360),this._turnTo(i,t,s)}_moveTo(e,t,i="moveTo",s=!1){let r=this.__x,h=this.__y,l=e-r,a=t-h,o=1;s&&this.turnTo(this.getAngleTo(e,t)),"jumpTo"==i?i="moveTo":o=Math.floor(Math.hypot(l,a)/(.2*this.__speed**1.5));let n=1/o;this.world.__queue.push(this.id,"beginPath"),this.world.__queue.push(this.id,"moveTo",r,h);for(var _=1;_1e3||e<3||e>60)return;let l=360/e;(t=Array(2*(e+1)))[0]=s,t[1]=r;for(let e=2;e