phaser3-flex
Version:
Flex containers for Phaser
2 lines (1 loc) • 7.74 kB
JavaScript
(()=>{var F=(n=>(n[n.CENTER=1]="CENTER",n[n.FLEX_END=2]="FLEX_END",n[n.FLEX_START=3]="FLEX_START",n[n.STRETCH=4]="STRETCH",n))(F||{}),g=(e=>(e[e.COLUMN=1]="COLUMN",e[e.ROW=2]="ROW",e))(g||{}),b=(s=>(s[s.CENTER=1]="CENTER",s[s.FLEX_END=2]="FLEX_END",s[s.FLEX_START=3]="FLEX_START",s[s.SPACE_AROUND=4]="SPACE_AROUND",s[s.SPACE_BETWEEN=5]="SPACE_BETWEEN",s))(b||{});var c={width:"setX",height:"setY"};function y(i,t){let e=c[t],r=t=="width"?f(i):_(i),n=i[t]/2+r;i.items.forEach(s=>{s.setOrigin(0,0);let h=n-s[t]/2;s[e](h)})}function N(i,t){let e=c[t],r=t=="width"?f(i):_(i),n=i[t]-2*i.padding,s=r+i.padding;i.items.forEach(h=>{h._isFlex&&(h[e](s),h[t]>n&&(n=h[t]))}),i.items.forEach((h,a)=>{if(!h._isFlex)return;t=="width"?i._widths[a]=h[t]:i._heights[a]=h[t];let U=t=="width"?[n,h.height]:[h.width,n];x(h,...U)})}function k(i,t){return i=="width"&&t==2||i=="height"&&t==1}function m(i,t){let e=i.items,r=c[t],n=i._bounds[t=="width"?"right":"bottom"];for(let s=e.length-1;s>=0;s--){let h=e[s];h.setOrigin(0,0),h[r](n-h[t]),k(t,i.flexDirection)&&(n-=h[t]+i.itemsMargin)}}function M(i,t){let e=c[t],r=t=="width"?f(i):_(i),n=d(i),h=i[t]/2+r-n/2;i.items.forEach(a=>{a.setOrigin(0,0),a[e](h),h+=a[t]+i.itemsMargin})}function p(i,t){let e=c[t],r=i._bounds[t=="width"?"left":"top"];i.items.forEach(n=>{n.setOrigin(0,0),n[e](r),k(t,i.flexDirection)&&(r+=n[t]+i.itemsMargin)})}function H(i,t,e){let r=e+i.padding*2;r>i[t]&&(i[t]=r),W(i)}function E(i,t){H(i,"height",t)}function w(i,t){H(i,"width",t)}function L(i,t){let e=T(i),r=c[t],n=i._bounds[t=="width"?"left":"top"];i.items.forEach(s=>{s._isFlex&&Y(i,s,e),s.setOrigin(0,0),s[r](n),n+=s[t]+i.itemsMargin})}function G(i){L(i,"width")}function B(i){L(i,"height")}function I(i,t){let e=i[`_${t}s`].length?Math.max(...i[`_${t}s`]):0;i[t]=e+2*i.padding,W(i)}function P(i){I(i,"height")}function R(i,t){let e=i.width-i.padding*2;t.setWordWrapWidth(e);let r=t.getBounds();t.setFixedSize(e,r.height)}function X(i){I(i,"width")}function T(i){return(i.flexDirection==2?i.width:i.height)-d(i)-2*i.padding}function d(i){let t=(i.items.length-1)*i.itemsMargin;return i._basisSum+t}function f(i){return i.x-i.width*i.origin.x}function _(i){return i.y-i.height*i.origin.y}function O(i){for(let t=0;t<i.items.length;t++){let e=i.items[t];x(e,e.width,i._heights[t]),e.height=i._heights[t]}}function C(i){for(let t=0;t<i.items.length;t++){let e=i.items[t];x(e,i._widths[t],e.height),e.width=i._widths[t]}}function l(i,t){if(t==6){N(i,"width");return}if(i.flexDirection==2){let e=T(i);if(i._growSum&&e>=0||e<0){G(i);return}}if(t==4){if(i.flexDirection==2){p(i,"width");return}p(i,"width");return}if(t==5){if(i.flexDirection==2){m(i,"width");return}m(i,"width");return}if(t==2){i.flexDirection==2?M(i,"width"):y(i,"width");return}}function u(i,t){if(t==6){N(i,"height");return}if(i.flexDirection==1){let e=T(i);if(i._growSum&&e>=0||e<0){B(i);return}}if(t==7){if(i.flexDirection==1){p(i,"height");return}p(i,"height");return}if(t==1){if(i.flexDirection==1){m(i,"height");return}m(i,"height");return}if(t==2){i.flexDirection==1?M(i,"height"):y(i,"height");return}}function x(i,t,e){if(i.type=="Text"){if(i.height!=e)return;i.setWordWrapWidth(t),i.setFixedSize(t,e);return}i.setSize(t,e)}function o(i){W(i),i.setJustifyContent(i.justifyContent),i.setAlignItems(i.alignItems)}function Y(i,t,e){let r=i.flexDirection==2,n=r?"width":"height",s=0;if(e>=0&&(s=t.flexGrow/i._growSum*e+t.basis),e<0){let h=t.basis*t.flexShrink/i._shrinkSum;s=t.basis+e*h}r?x(t,s,t.height):x(t,t.width,s),t[n]=s}function D(i){let t=i.flexDirection==2?"width":"height",e=c[t],r=T(i),n=0,s=t=="width"?f(i):_(i);i.justifyContent==4?(n=r/(i.items.length+1),s+=i.padding+n):(n=r/(i.items.length-1),s+=i.padding),i.items.forEach(h=>{h.setOrigin(0,0),h[e](s),s+=h[t]+n+i.itemsMargin})}function W(i){let t=f(i),e=_(i);i._bounds={left:t+i.padding,right:t+i.width-i.padding,top:e+i.padding,bottom:e+i.height-i.padding}}var S=class{x;y;width;height;padding;itemsMargin;alignItems;flexDirection;justifyContent;items;origin;basis;scene;flexGrow;flexShrink;_fparent;_scrollFactorX;_scrollFactorY;_isFlex;_basisSum;_heights;_widths;_growSum;_shrinkSum;_bounds;constructor(t,e){return this.scene=t,this.x=e.x||0,this.y=e.y||0,this.width=e.width==null?t.scale.width:e.width,this.height=e.height||0,this.padding=e.padding||10,this.itemsMargin=e.itemsMargin||4,this.alignItems=e.alignItems||1,this.flexDirection=e.flexDirection||2,this.justifyContent=e.justifyContent||3,this.items=[],this.origin={x:0,y:0},this._scrollFactorX=0,this._scrollFactorY=0,this._fparent=null,this._isFlex=!0,this._basisSum=0,this._heights=[],this._widths=[],this._growSum=0,this._shrinkSum=0,this._bounds={left:0,right:0,top:0,bottom:0},this.scene.events.once("destroy",this.destroy,this),this}add(t,e=0,r=1){return t.setOrigin(0,0),t.setScrollFactor(this._scrollFactorX,this._scrollFactorY),t._isFlex?(t.flexGrow=e,t.flexShrink=r,t._fparent=this):(t.flexGrow=0,t.flexShrink=0),this.width&&t.type=="Text"&&this.flexDirection==1&&R(this,t),t.basis=this.flexDirection==2?t.width:t.height,this._basisSum+=t.basis,this.items.push(t),this._heights.push(t.height),this._widths.push(t.width),this._growSum+=t.flexGrow,this._shrinkSum+=t.flexShrink*t.basis,this.flexDirection==2&&(E(this,t.height),t._isFlex||w(this,d(this))),this.flexDirection==1&&(w(this,t.width),t._isFlex||E(this,d(this))),o(this),this._fparent&&(this._fparent.flexDirection==2?E(this._fparent,this.height):w(this._fparent,this.width),o(this._fparent)),this}clear(){return this.items.forEach(t=>{t._isFlex&&t.clear()}),this.items.forEach(t=>t.destroy()),this.items=[],this._heights=[],this._widths=[],this._basisSum=0,this}remove(t,e){if(this.items[t]==null)return;let r=this.items[t];return r._fparent=null,this._basisSum-=r.basis,this.items.splice(t,1),this._heights.splice(t,1),this._widths.splice(t,1),e&&r.destroy(),this.flexDirection==2&&P(this),this.flexDirection==1&&X(this),o(this),this}setSize(t,e){return this.setWidth(t),this.setHeight(e),this}destroy(){this.clear(),this.items=null,this._widths=null,this._heights=null,this._bounds=null,this.origin=null,this._fparent=null}setAlignItems(t){switch(this.alignItems==4&&t!=4&&(this.flexDirection==2?O(this):C(this)),this.alignItems=t,t){case 1:this.flexDirection==2?u(this,2):l(this,2);break;case 3:this.flexDirection==2?u(this,7):l(this,4);break;case 2:this.flexDirection==2?u(this,1):l(this,5);break;case 4:this.flexDirection==2?u(this,6):l(this,6);break;default:break}return this}setHeight(t){return this.height=t,O(this),o(this),this}setWidth(t){if(this.width=t,C(this),this.flexDirection==1)for(let e=0;e<this.items.length;e++){let r=this.items[e];r.type=="Text"&&R(this,r)}return o(this),this}setJustifyContent(t){switch(this.justifyContent=t,t){case 1:this.flexDirection==2?l(this,2):u(this,2);break;case 3:this.flexDirection==2?l(this,4):u(this,7);break;case 2:this.flexDirection==2?l(this,5):u(this,1);break;case 4:D(this);break;case 5:D(this);break;default:break}return this}setOrigin(t,e){return e==null&&(e=t),this.origin.x=t,this.origin.y=e,t>1&&(this.origin.x=1),t<0&&(this.origin.x=0),e>1&&(this.origin.y=1),e<0&&(this.origin.y=0),o(this),this}setScrollFactor(t,e){t>1&&(t=1),t<0&&(t=0),e||(e=t),this._scrollFactorX=t,this._scrollFactorY=e;for(let r=0;r<this.items.length;r++)this.items[r].setScrollFactor(t,e);return this}setX(t){return this.x=t,o(this),this}setY(t){return this.y=t,o(this),this}update(){let t=!1;this.flexDirection==2?this.items.forEach(e=>{e.basis!=e.width&&(this._basisSum+=e.width-e.basis,e.basis=e.width,t=!0)}):this.items.forEach(e=>{e.basis!=e.height&&(this._basisSum+=e.height-e.height,e.basis=e.height,t=!0)}),t&&o(this)}};typeof window<"u"&&(globalThis.Fbx={Flex:S,AlignItems:F,FlexDirection:g,JustifyContent:b});})();