phaser4-rex-plugins
Version:
2 lines (1 loc) • 10.4 kB
JavaScript
var e,t;e=void 0,t=function(){const e=Phaser.Game;var t=function(t){return t instanceof e};const i=Phaser.Scene;var a,s,r=function(e){return e instanceof i},h=function(e){return null==e||"object"!=typeof e?null:t(e)?e:t(e.game)?e.game:r(e)?e.sys.game:r(e.scene)?e.scene.sys.game:void 0},o=function(e,t,i,r,o){if(void 0===a){var n=(c=e.manager.game,h(c).textures.getFrame("__WHITE"));a=n.cutWidth,s=n.cutHeight}var c;return e.stamp("__WHITE",void 0,t,i,{scaleX:r/a,scaleY:o/s,originX:0,originY:0,erase:!0}),e},n=function(e,t,i,a){this.useDynamicTexture?o(this.texture,e,t,i,a):this.context.clearRect(e,t,i,a)},c=function(e,t,i,a,s){var r=this.context;r.save(),r.translate(e,t),s?a.call(s,this.canvas,r,i):a(this.canvas,r,i),r.restore()},l=function(e,t,i,a,s){var r=this.texture;r.camera.setScroll(-e,-t),s?a.call(s,r,i):a(r,i),r.camera.setScroll(0,0)},d={remove(e){var t=this.getFrameIndex(e);return-1===t||(this.addFrameName(t,void 0),this.texture.remove(e)),this},clear(){for(var e,t=this.frameNames.length;e<t;e++){var i=this.frameNames[e];void 0!==i&&(this.addFrameName(index,void 0),this.texture.remove(i))}return this}},u={draw:function(e,t,i){var a=this.getFrameIndex(e);if(-1===a&&(a=this.getFrameIndex(void 0)),-1===a)return console.warn("Does not have free space."),this;var s=this.getTopLeftPosition(a),r=s.x,h=s.y,o=this.cellPadding,d=r+o,u=h+o;n.call(this,r,h,this.outerCellWidth,this.outerCellHeight);var g={width:this.cellWidth,height:this.cellHeight};return(this.useDynamicTexture?l:c).call(this,d,u,g,t,i),this.texture.add(e,0,d,u,g.width,g.height),this.addFrameName(a,e),this.dirty=!0,this},paste:function(e,t){var i;if(this.useDynamicTexture){var a=function(e){return void 0!==e.displayWidth?e.displayWidth:e.width}(t),s=function(e){return void 0!==e.displayHeight?e.displayHeight:e.height}(t);n=a<=this.cellWidth&&s<=this.cellHeight?1:Math.max(a/this.cellWidth,s/this.cellHeight),i=function(e,i){var r=t.originX,h=t.originY,o=t.scaleX,c=t.scaleY;t.setOrigin(0,0).setScale(n,n),e.draw(t),t.setOrigin(r,h).setScale(o,c),i.width=a/n,i.height=s/n}}else{var r,h,o=t.canvas;if(!o)return console.warn("Can't get canvas of game object."),this;if(a=o.width,s=o.height,a<=this.cellWidth&&s<=this.cellHeight)r=a,h=s;else{var n=Math.max(a/this.cellWidth,s/this.cellHeight);r=a/n,h=s/n}i=function(e,t,i){t.drawImage(o,0,0,r,h),i.width=r,i.height=h}}return this.draw(e,i),this},addEmptyFrame:function(e,t,i){var a;return void 0===t&&(t=this.cellWidth),void 0===i&&(i=this.cellHeight),a=this.useDynamicTexture?function(e,a){a.width=t,a.height=i}:function(e,a,s){s.width=t,s.height=i},this.draw(e,a),this},addToBitmapFont:function(){var e=this.texture.key,t=this.bitmapFontCache.get(e);t||(t={data:{retroFont:!0,font:e,size:this.cellWidth,lineHeight:this.cellHeight,chars:{}},texture:e,frame:null},this.bitmapFontCache.add(e,t));for(var i=t.data.chars,a=this.frameNames,s=0,r=a.length;s<r;s++){var h=a[s];if(void 0!==h){var o=this.texture.get(h),n=o.cutX,c=o.cutY,l=o.cutWidth,d=o.cutHeight;i[h.charCodeAt(0)]={x:n,y:c,width:l,height:d,centerX:n+l/2,centerY:c+d/2,xOffset:0,yOffset:0,xAdvance:l,data:{},kerning:{},u0:o.u0,v0:o.v0,u1:o.u1,v1:o.v1}}}return this}};Object.assign(u,d);const g=Phaser.Utils.Objects.IsPlainObject,m=Phaser.Utils.Objects.GetValue;class v{constructor(e,t,i,a,s,r,o,n){var c,l,d;if(g(t)){var u=t;t=m(u,"key"),i=m(u,"width"),a=m(u,"height"),s=m(u,"cellWidth"),r=m(u,"cellHeight"),d=m(u,"cellPadding",0),c=m(u,"columns"),l=m(u,"rows"),o=m(u,"fillColor"),n=m(u,"useDynamicTexture")}else"boolean"==typeof o&&(n=o,o=void 0);void 0===s&&(s=64),void 0===r&&(r=64),void 0===d&&(d=0),this.scene=e,this.cellWidth=s,this.cellHeight=r,this.cellPadding=d,this.outerCellWidth=s+2*d,this.outerCellHeight=r+2*d,c?i=this.outerCellWidth*c:(void 0===i&&(i=4096),c=Math.floor(i/this.outerCellWidth)),l?a=this.outerCellHeight*l:(void 0===a&&(a=4096),l=Math.floor(a/this.outerCellHeight)),void 0===n&&(n=!1);var v=h(e);if(this.useDynamicTexture=n,this.texture=function(e,t,i,a,s){void 0===s&&(s=!1);var r=(e=h(e)).textures;return r.exists(t)&&r.remove(t),r[s?"addDynamicTexture":"createCanvas"](t,i,a)}(v,t,i,a,n),this.canvas=n?void 0:this.texture.getCanvas(),this.context=n?void 0:this.texture.getContext(),this.bitmapFontCache=v.cache.bitmapFont,void 0!==o)if(n)this.texture.fill(o);else{var f=this.context;f.fillStyle=o,f.fillRect(0,0,this.canvas.width,this.canvas.height)}this.key=t,this.width=i,this.height=a,this.columns=c,this.rows=l,this.totalCount=this.columns*this.rows,this.fillColor=o,this.frameNames=Array(this.totalCount);for(var y=0,x=this.frameNames.length;y<x;y++)this.frameNames[y]=void 0;this.dirty=!1}destroy(){this.scene=void 0,this.texture=void 0,this.canvas=void 0,this.context=void 0,this.frameNames=void 0,this.bitmapFontCache=void 0}getFrameIndex(e){return this.frameNames.indexOf(e)}contains(e){return-1!==this.getFrameIndex(e)}addFrameName(e,t){return this.frameNames[e]=t,this}get isFull(){return-1===this.getFrameIndex(void 0)}getTopLeftPosition(e,t){void 0===t&&(t={});var i=e%this.columns,a=Math.floor(e/this.columns);return t.x=i*(this.cellWidth+2*this.cellPadding),t.y=a*(this.cellHeight+2*this.cellPadding),t}updateTexture(){return this.useDynamicTexture||this.texture.refresh(),this.dirty=!1,this}}Object.assign(v.prototype,u);var f=function(e,t){return Math.random()>.5?2:1},y={1:2,2:1};const x=Phaser.Math.DegToRad,p=x(0),w=x(90),b=x(180),C=x(270),k=x(360);var H=function(e,t,i,a,s,r){var h=t/2,o=i/2,n=a,c=t-a,l=s,d=i-s,u=a>0,g=s>0,m=g?r.top:0,v=g?r.bottom:0,f=u?r.right:0,y=u?r.left:0;switch(e.clear(),e.beginPath(),e.moveTo(n,l),m){case 1:e.lineTo(h-s-1,l),e.arc(h,l,s+1,b,k,!1);break;case 2:e.lineTo(h-s+1,l),e.arc(h,l,s-1,b,k,!0)}switch(e.lineTo(c,l),f){case 1:e.arc(c,o,a+1,C,w,!1);break;case 2:e.arc(c,o,a-1,C,w,!0)}switch(e.lineTo(c,d),v){case 1:e.arc(h,d,s+1,p,b,!1);break;case 2:e.arc(h,d,s-1,p,b,!0)}switch(e.lineTo(n,d),y){case 1:e.arc(n,o,a+1,w,C,!1);break;case 2:e.arc(n,o,a-1,w,C,!0)}e.lineTo(n,l),e.closePath(),e.fillPath()},W=function(e){return"string"==typeof e&&(e={right:(e=e.split("").map((function(e){return parseInt(e)})))[0],bottom:e[1],left:e[2],top:e[3]}),e};const T=Phaser.GameObjects.RenderTexture;class P extends(function(e){return class extends e{init(e){this.setBaseKey(e.key),this.setDrawShapeCallback(e.drawShapeCallback);var t=e.edgeWidth;void 0===t&&(t=Math.floor(e.width/7)),this.edgeWidth=t;var i=e.edgeHeight;return void 0===i&&(i=Math.floor(e.height/7)),this.edgeHeight=i,this}setBaseKey(e){return this.sourceKey=e,this}setDrawShapeCallback(e){return this.drawShapeCallback=e,this}drawPiece({scrollX:e,scrollY:t,edgeMode:i}){}}}(T)){constructor(e,t){t.drawShapeCallback||(t.drawShapeCallback=H),super(e,0,0,t.width,t.height),this.init(t);var i=e.make.graphics({add:!1});this.setMask(i.createGeometryMask()),this.maskGraphics=i}destroy(e){this.scene&&!this.ignoreDestroy&&(super.destroy(e),this.maskGraphics.destroy(),this.maskGraphics=void 0)}drawPiece({scrollX:e,scrollY:t,edgeMode:i}){return i=W(i),this.clear(),this.camera.setScroll(e,t),this.stamp(this.sourceKey,void 0,0,0,{originX:0,originY:0}),this.camera.setScroll(0,0),this.maskGraphics.clear(),this.drawShapeCallback(this.maskGraphics,this.width,this.height,this.edgeWidth,this.edgeHeight,i),this}}var F=function(e,t,i,a,s,r,h,o,n,c,l,d){l=W(l),t.clearRect(0,0,s,r),d(t,s,r,n,c,l),t.clip();var u=0,g=0,m=s,v=r;i<0&&(u-=i,m+=i,i=0),a<0&&(g-=a,v+=a,a=0),i+m>h&&(m=h-i),a+v>o&&(v=o-a),t.drawImage(e,i,a,m,v,u,g,m,v)},S=function(){},M=function(e,t){return`${e},${t}`},D=function(e,{sourceKey:t,destinationKey:i,columns:a,rows:s,framePadding:r=1,edgeWidth:h,edgeHeight:o,edges:n,drawShapeCallback:c=H,useDynamicTexture:l=!0,getFrameNameCallback:d=M}){var u=e.sys.textures,g=u.getFrame(t,"__BASE"),m=g.cutWidth,x=g.height;void 0===h&&(h=Math.floor(m/a/7)),void 0===o&&(o=Math.floor(x/s/7)),Array.isArray(n)||(n=function(e,t,i){var a=i?i.getRightEdge:void 0,s=i?i.getBottomEdge:void 0;a||(a=f),s||(s=f);for(var r=[],h=0;h<e;h++)r.push(new Array(t));for(var o,n,c,l,d,u=e-1,g=t-1,m=0;m<t;m++)for(h=0;h<e;h++)0===h?o=0:(d=r[h-1][m].right,o=y[d]||0),0===m?c=0:(d=r[h][m-1].bottom,c=y[d]||0),n=h===u?0:a(h,m),l=m===g?0:s(h,m),r[h][m]={left:o,right:n,top:c,bottom:l};return r}(a,s,n)),void 0===i&&(i=`${t}_pieces`),u.exists(i)&&u.remove(i);var p=m/a+2*h,w=x/s+2*o;p=Math.ceil(p),w=Math.ceil(w);var b,C,k=new v(e,{key:i,cellWidth:p,cellHeight:w,cellPadding:r,columns:a,rows:s,useDynamicTexture:l,fillColor:8947848});l?b=new P(e,{width:p,height:w,edgeWidth:h,edgeHeight:o,key:t,drawShapeCallback:c}):(C=g.source.image,k.context.clear=S,k.context.fillPath=S);for(var W,T,D=-h,N=D,I=-o,O=0;O<s;O++){for(var j=0;j<a;j++)W=d(j,O),T=n[j][O],l?(b.drawPiece({scrollX:N,scrollY:I,edgeMode:T}),k.paste(W,b)):k.draw(W,(function(e,t,i){F(C,t,N,I,p,w,m,x,h,o,T,c)})),N+=p-2*h;N=D,I+=w-2*o}return k.updateTexture(),l?b.destroy():(C=null,delete k.context.clear,delete k.context.fillPath),k.destroy(),{sourceKey:t,destinationKey:i,columns:a,rows:s,sourceFrameWidth:m,sourceFrameHeight:x,frameWidth:p,frameHeight:w,edgeWidth:h,edgeHeight:o,getFrameNameCallback:d}};const N=Phaser.GameObjects.Image,I=Phaser.Math.RotateAround;class O extends Phaser.Plugins.BasePlugin{constructor(e){super(e)}start(){this.game.events.on("destroy",this.destroy,this)}gridCut(e,t){return function(e,{piecesKey:t,columns:i,rows:a,edgeWidth:s,edgeHeight:r,drawShapeCallback:h,edges:o,useDynamicTexture:n=!0,createImageCallback:c,ImageClass:l=N,objectPool:d,add:u=!0,align:g=u,originX:m=.5,originY:v=.5}){var f=e.scene,y=e.texture.key,x=e.getTopLeft(),p=x.x,w=x.y,b=e.scaleX,C=e.scaleY,k=e.rotation,H=D(f,{sourceKey:y,destinationKey:t,columns:i,rows:a,edgeWidth:s,edgeHeight:r,edges:o,drawShapeCallback:h,useDynamicTexture:n});t=H.destinationKey;var W=H.getFrameNameCallback,T=H.frameWidth,P=H.frameHeight,F=(T-2*s)*b,S=(P-2*r)*C,M=m*T*b,O=v*P*C;c||(c=function(e,t,i){return new l(e,0,0,t,i)});for(var j=[],K=p-=s,X=w-=r,Y=0;Y<a;Y++){for(var G=0;G<i;G++){var A,R=W(G,Y);if(A=d&&d.length>0?d.pop().setTexture(t,R):c(f,t,R),u&&f.add.existing(A),g){var _=K+M,B=X+O;A.setOrigin(m,v).setPosition(_,B).setScale(b,C).setRotation(k),I(A,p,w,k)}K+=F,j.push(A)}K=p,X+=S}return j}(e,t)}}return O},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexcutjigsawimageplugin=t();