UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 14.4 kB
import{Color as e}from"../../../core/math/color.js";import{Vec2 as a}from"../../../core/math/vec2.js";import{Vec4 as t}from"../../../core/math/vec4.js";import{PIXELFORMAT_RGBA8 as i}from"../../../platform/graphics/constants.js";import{Texture as l}from"../../../platform/graphics/texture.js";import{BLEND_PREMULTIPLIED as r,SPRITE_RENDERMODE_SLICED as s,SPRITE_RENDERMODE_TILED as d}from"../../../scene/constants.js";import{StandardMaterial as n}from"../../../scene/materials/standard-material.js";import{ComponentSystem as o}from"../system.js";import{ELEMENTTYPE_IMAGE as c,ELEMENTTYPE_TEXT as u}from"./constants.js";import{ElementComponent as h}from"./component.js";import{ElementComponentData as m}from"./data.js";const M=["enabled"];class p extends o{constructor(e){super(e),this.id="element",this.ComponentType=h,this.DataType=m,this.schema=M,this._unicodeConverter=null,this._rtlReorder=null,this._defaultTexture=new l(e.graphicsDevice,{width:1,height:1,format:i,name:"element-system"});const a=this._defaultTexture.lock(),t=new Uint8Array(4);t[0]=255,t[1]=255,t[2]=255,t[3]=255,a.set(t),this._defaultTexture.unlock(),this.defaultImageMaterial=null,this.defaultImage9SlicedMaterial=null,this.defaultImage9TiledMaterial=null,this.defaultImageMaskMaterial=null,this.defaultImage9SlicedMaskMaterial=null,this.defaultImage9TiledMaskMaterial=null,this.defaultScreenSpaceImageMaterial=null,this.defaultScreenSpaceImage9SlicedMaterial=null,this.defaultScreenSpaceImage9TiledMaterial=null,this.defaultScreenSpaceImageMask9SlicedMaterial=null,this.defaultScreenSpaceImageMask9TiledMaterial=null,this.defaultScreenSpaceImageMaskMaterial=null,this._defaultTextMaterials={},this.defaultImageMaterials=[],this.on("add",this.onAddComponent,this),this.on("beforeremove",this.onRemoveComponent,this)}destroy(){super.destroy(),this._defaultTexture.destroy()}initializeComponentData(i,l,r){i._beingInitialized=!0,void 0!==l.anchor&&(l.anchor instanceof t?i.anchor.copy(l.anchor):i.anchor.set(l.anchor[0],l.anchor[1],l.anchor[2],l.anchor[3])),void 0!==l.pivot&&(l.pivot instanceof a?i.pivot.copy(l.pivot):i.pivot.set(l.pivot[0],l.pivot[1]));const s=Math.abs(i.anchor.x-i.anchor.z)>.001,d=Math.abs(i.anchor.y-i.anchor.w)>.001;let n,o=!1;void 0!==l.margin&&(l.margin instanceof t?i.margin.copy(l.margin):i._margin.set(l.margin[0],l.margin[1],l.margin[2],l.margin[3]),o=!0),void 0!==l.left&&(i._margin.x=l.left,o=!0),void 0!==l.bottom&&(i._margin.y=l.bottom,o=!0),void 0!==l.right&&(i._margin.z=l.right,o=!0),void 0!==l.top&&(i._margin.w=l.top,o=!0),o&&(i.margin=i._margin);let h=!1;void 0===l.width||s?s&&(h=!0):i.width=l.width,void 0===l.height||d?d&&(h=!0):i.height=l.height,h&&(i.anchor=i.anchor),void 0!==l.enabled&&(i.enabled=l.enabled),void 0!==l.useInput&&(i.useInput=l.useInput),void 0!==l.fitMode&&(i.fitMode=l.fitMode),i.batchGroupId=void 0===l.batchGroupId||null===l.batchGroupId?-1:l.batchGroupId,l.layers&&Array.isArray(l.layers)&&(i.layers=l.layers.slice(0)),void 0!==l.type&&(i.type=l.type),i.type===c?(void 0!==l.rect&&(i.rect=l.rect),void 0!==l.color&&(n=l.color,n instanceof e||(n=new e(l.color[0],l.color[1],l.color[2])),i.color=n),void 0!==l.opacity&&(i.opacity=l.opacity),void 0!==l.textureAsset&&(i.textureAsset=l.textureAsset),l.texture&&(i.texture=l.texture),void 0!==l.spriteAsset&&(i.spriteAsset=l.spriteAsset),l.sprite&&(i.sprite=l.sprite),void 0!==l.spriteFrame&&(i.spriteFrame=l.spriteFrame),void 0!==l.pixelsPerUnit&&null!==l.pixelsPerUnit&&(i.pixelsPerUnit=l.pixelsPerUnit),void 0!==l.materialAsset&&(i.materialAsset=l.materialAsset),l.material&&(i.material=l.material),void 0!==l.mask&&(i.mask=l.mask)):i.type===u&&(void 0!==l.autoWidth&&(i.autoWidth=l.autoWidth),void 0!==l.autoHeight&&(i.autoHeight=l.autoHeight),void 0!==l.rtlReorder&&(i.rtlReorder=l.rtlReorder),void 0!==l.unicodeConverter&&(i.unicodeConverter=l.unicodeConverter),null!==l.text&&void 0!==l.text?i.text=l.text:null!==l.key&&void 0!==l.key&&(i.key=l.key),void 0!==l.color&&(n=l.color,n instanceof e||(n=new e(n[0],n[1],n[2])),i.color=n),void 0!==l.opacity&&(i.opacity=l.opacity),void 0!==l.spacing&&(i.spacing=l.spacing),void 0!==l.fontSize&&(i.fontSize=l.fontSize,l.lineHeight||(i.lineHeight=l.fontSize)),void 0!==l.lineHeight&&(i.lineHeight=l.lineHeight),void 0!==l.maxLines&&(i.maxLines=l.maxLines),void 0!==l.wrapLines&&(i.wrapLines=l.wrapLines),void 0!==l.minFontSize&&(i.minFontSize=l.minFontSize),void 0!==l.maxFontSize&&(i.maxFontSize=l.maxFontSize),l.autoFitWidth&&(i.autoFitWidth=l.autoFitWidth),l.autoFitHeight&&(i.autoFitHeight=l.autoFitHeight),void 0!==l.fontAsset&&(i.fontAsset=l.fontAsset),void 0!==l.font&&(i.font=l.font),void 0!==l.alignment&&(i.alignment=l.alignment),void 0!==l.outlineColor&&(i.outlineColor=l.outlineColor),void 0!==l.outlineThickness&&(i.outlineThickness=l.outlineThickness),void 0!==l.shadowColor&&(i.shadowColor=l.shadowColor),void 0!==l.shadowOffset&&(i.shadowOffset=l.shadowOffset),void 0!==l.enableMarkup&&(i.enableMarkup=l.enableMarkup));const m=i._parseUpToScreen();m.screen&&i._updateScreen(m.screen),super.initializeComponentData(i,l,r),i._beingInitialized=!1,i.type===c&&i._image._meshDirty&&i._image._updateMesh(i._image.mesh)}onAddComponent(e,a){e.fire("element:add")}onRemoveComponent(e,a){a.onRemove()}cloneComponent(e,a){const t=e.element,i={enabled:t.enabled,width:t.width,height:t.height,anchor:t.anchor.clone(),pivot:t.pivot.clone(),margin:t.margin.clone(),alignment:t.alignment&&t.alignment.clone()||t.alignment,autoWidth:t.autoWidth,autoHeight:t.autoHeight,type:t.type,rect:t.rect&&t.rect.clone()||t.rect,rtlReorder:t.rtlReorder,unicodeConverter:t.unicodeConverter,materialAsset:t.materialAsset,material:t.material,color:t.color&&t.color.clone()||t.color,opacity:t.opacity,textureAsset:t.textureAsset,texture:t.texture,spriteAsset:t.spriteAsset,sprite:t.sprite,spriteFrame:t.spriteFrame,pixelsPerUnit:t.pixelsPerUnit,spacing:t.spacing,lineHeight:t.lineHeight,wrapLines:t.wrapLines,layers:t.layers,fontSize:t.fontSize,minFontSize:t.minFontSize,maxFontSize:t.maxFontSize,autoFitWidth:t.autoFitWidth,autoFitHeight:t.autoFitHeight,maxLines:t.maxLines,fontAsset:t.fontAsset,font:t.font,useInput:t.useInput,fitMode:t.fitMode,batchGroupId:t.batchGroupId,mask:t.mask,outlineColor:t.outlineColor&&t.outlineColor.clone()||t.outlineColor,outlineThickness:t.outlineThickness,shadowColor:t.shadowColor&&t.shadowColor.clone()||t.shadowColor,shadowOffset:t.shadowOffset&&t.shadowOffset.clone()||t.shadowOffset,enableMarkup:t.enableMarkup};return void 0!==t.key&&null!==t.key?i.key=t.key:i.text=t.text,this.addComponent(a,i)}getTextElementMaterial(e,a,t){const i=(e&&1)|(a&&2)|(t&&4);let l=this._defaultTextMaterials[i];if(l)return l;let s="TextMaterial";return l=new n,a?(l.msdfMap=this._defaultTexture,l.msdfTextAttribute=t,l.emissive.set(1,1,1)):(s=`Bitmap${s}`,l.emissive.set(.5,.5,.5),l.emissiveMap=this._defaultTexture,l.emissiveTint=!0,l.opacityMap=this._defaultTexture,l.opacityMapChannel="a"),e&&(s=`ScreenSpace${s}`,l.depthTest=!1),l.name=`default${s}`,l.useLighting=!1,l.useGammaTonemap=!1,l.useFog=!1,l.useSkybox=!1,l.diffuse.set(0,0,0),l.opacity=.5,l.blendType=r,l.depthWrite=!1,l.emissiveVertexColor=!0,l.update(),this._defaultTextMaterials[i]=l,l}_createBaseImageMaterial(){const e=new n;return e.diffuse.set(0,0,0),e.emissive.set(.5,.5,.5),e.emissiveMap=this._defaultTexture,e.emissiveTint=!0,e.opacityMap=this._defaultTexture,e.opacityMapChannel="a",e.opacityTint=!0,e.opacity=0,e.useLighting=!1,e.useGammaTonemap=!1,e.useFog=!1,e.useSkybox=!1,e.blendType=r,e.depthWrite=!1,e}getImageElementMaterial(e,a,t,i){return e?a?t?(this.defaultScreenSpaceImageMask9SlicedMaterial||(this.defaultScreenSpaceImageMask9SlicedMaterial=this._createBaseImageMaterial(),this.defaultScreenSpaceImageMask9SlicedMaterial.name="defaultScreenSpaceImageMask9SlicedMaterial",this.defaultScreenSpaceImageMask9SlicedMaterial.nineSlicedMode=s,this.defaultScreenSpaceImageMask9SlicedMaterial.depthTest=!1,this.defaultScreenSpaceImageMask9SlicedMaterial.alphaTest=1,this.defaultScreenSpaceImageMask9SlicedMaterial.redWrite=!1,this.defaultScreenSpaceImageMask9SlicedMaterial.greenWrite=!1,this.defaultScreenSpaceImageMask9SlicedMaterial.blueWrite=!1,this.defaultScreenSpaceImageMask9SlicedMaterial.alphaWrite=!1,this.defaultScreenSpaceImageMask9SlicedMaterial.update(),this.defaultImageMaterials.push(this.defaultScreenSpaceImageMask9SlicedMaterial)),this.defaultScreenSpaceImageMask9SlicedMaterial):i?(this.defaultScreenSpaceImageMask9TiledMaterial||(this.defaultScreenSpaceImageMask9TiledMaterial=this.defaultScreenSpaceImage9TiledMaterial.clone(),this.defaultScreenSpaceImageMask9TiledMaterial.name="defaultScreenSpaceImageMask9TiledMaterial",this.defaultScreenSpaceImageMask9TiledMaterial.nineSlicedMode=d,this.defaultScreenSpaceImageMask9TiledMaterial.depthTest=!1,this.defaultScreenSpaceImageMask9TiledMaterial.alphaTest=1,this.defaultScreenSpaceImageMask9TiledMaterial.redWrite=!1,this.defaultScreenSpaceImageMask9TiledMaterial.greenWrite=!1,this.defaultScreenSpaceImageMask9TiledMaterial.blueWrite=!1,this.defaultScreenSpaceImageMask9TiledMaterial.alphaWrite=!1,this.defaultScreenSpaceImageMask9TiledMaterial.update(),this.defaultImageMaterials.push(this.defaultScreenSpaceImageMask9TiledMaterial)),this.defaultScreenSpaceImageMask9TiledMaterial):(this.defaultScreenSpaceImageMaskMaterial||(this.defaultScreenSpaceImageMaskMaterial=this._createBaseImageMaterial(),this.defaultScreenSpaceImageMaskMaterial.name="defaultScreenSpaceImageMaskMaterial",this.defaultScreenSpaceImageMaskMaterial.depthTest=!1,this.defaultScreenSpaceImageMaskMaterial.alphaTest=1,this.defaultScreenSpaceImageMaskMaterial.redWrite=!1,this.defaultScreenSpaceImageMaskMaterial.greenWrite=!1,this.defaultScreenSpaceImageMaskMaterial.blueWrite=!1,this.defaultScreenSpaceImageMaskMaterial.alphaWrite=!1,this.defaultScreenSpaceImageMaskMaterial.update(),this.defaultImageMaterials.push(this.defaultScreenSpaceImageMaskMaterial)),this.defaultScreenSpaceImageMaskMaterial):t?(this.defaultScreenSpaceImage9SlicedMaterial||(this.defaultScreenSpaceImage9SlicedMaterial=this._createBaseImageMaterial(),this.defaultScreenSpaceImage9SlicedMaterial.name="defaultScreenSpaceImage9SlicedMaterial",this.defaultScreenSpaceImage9SlicedMaterial.nineSlicedMode=s,this.defaultScreenSpaceImage9SlicedMaterial.depthTest=!1,this.defaultScreenSpaceImage9SlicedMaterial.update(),this.defaultImageMaterials.push(this.defaultScreenSpaceImage9SlicedMaterial)),this.defaultScreenSpaceImage9SlicedMaterial):i?(this.defaultScreenSpaceImage9TiledMaterial||(this.defaultScreenSpaceImage9TiledMaterial=this._createBaseImageMaterial(),this.defaultScreenSpaceImage9TiledMaterial.name="defaultScreenSpaceImage9TiledMaterial",this.defaultScreenSpaceImage9TiledMaterial.nineSlicedMode=d,this.defaultScreenSpaceImage9TiledMaterial.depthTest=!1,this.defaultScreenSpaceImage9TiledMaterial.update(),this.defaultImageMaterials.push(this.defaultScreenSpaceImage9TiledMaterial)),this.defaultScreenSpaceImage9TiledMaterial):(this.defaultScreenSpaceImageMaterial||(this.defaultScreenSpaceImageMaterial=this._createBaseImageMaterial(),this.defaultScreenSpaceImageMaterial.name="defaultScreenSpaceImageMaterial",this.defaultScreenSpaceImageMaterial.depthTest=!1,this.defaultScreenSpaceImageMaterial.update(),this.defaultImageMaterials.push(this.defaultScreenSpaceImageMaterial)),this.defaultScreenSpaceImageMaterial):a?t?(this.defaultImage9SlicedMaskMaterial||(this.defaultImage9SlicedMaskMaterial=this._createBaseImageMaterial(),this.defaultImage9SlicedMaskMaterial.name="defaultImage9SlicedMaskMaterial",this.defaultImage9SlicedMaskMaterial.nineSlicedMode=s,this.defaultImage9SlicedMaskMaterial.alphaTest=1,this.defaultImage9SlicedMaskMaterial.redWrite=!1,this.defaultImage9SlicedMaskMaterial.greenWrite=!1,this.defaultImage9SlicedMaskMaterial.blueWrite=!1,this.defaultImage9SlicedMaskMaterial.alphaWrite=!1,this.defaultImage9SlicedMaskMaterial.update(),this.defaultImageMaterials.push(this.defaultImage9SlicedMaskMaterial)),this.defaultImage9SlicedMaskMaterial):i?(this.defaultImage9TiledMaskMaterial||(this.defaultImage9TiledMaskMaterial=this._createBaseImageMaterial(),this.defaultImage9TiledMaskMaterial.name="defaultImage9TiledMaskMaterial",this.defaultImage9TiledMaskMaterial.nineSlicedMode=d,this.defaultImage9TiledMaskMaterial.alphaTest=1,this.defaultImage9TiledMaskMaterial.redWrite=!1,this.defaultImage9TiledMaskMaterial.greenWrite=!1,this.defaultImage9TiledMaskMaterial.blueWrite=!1,this.defaultImage9TiledMaskMaterial.alphaWrite=!1,this.defaultImage9TiledMaskMaterial.update(),this.defaultImageMaterials.push(this.defaultImage9TiledMaskMaterial)),this.defaultImage9TiledMaskMaterial):(this.defaultImageMaskMaterial||(this.defaultImageMaskMaterial=this._createBaseImageMaterial(),this.defaultImageMaskMaterial.name="defaultImageMaskMaterial",this.defaultImageMaskMaterial.alphaTest=1,this.defaultImageMaskMaterial.redWrite=!1,this.defaultImageMaskMaterial.greenWrite=!1,this.defaultImageMaskMaterial.blueWrite=!1,this.defaultImageMaskMaterial.alphaWrite=!1,this.defaultImageMaskMaterial.update(),this.defaultImageMaterials.push(this.defaultImageMaskMaterial)),this.defaultImageMaskMaterial):t?(this.defaultImage9SlicedMaterial||(this.defaultImage9SlicedMaterial=this._createBaseImageMaterial(),this.defaultImage9SlicedMaterial.name="defaultImage9SlicedMaterial",this.defaultImage9SlicedMaterial.nineSlicedMode=s,this.defaultImage9SlicedMaterial.update(),this.defaultImageMaterials.push(this.defaultImage9SlicedMaterial)),this.defaultImage9SlicedMaterial):i?(this.defaultImage9TiledMaterial||(this.defaultImage9TiledMaterial=this._createBaseImageMaterial(),this.defaultImage9TiledMaterial.name="defaultImage9TiledMaterial",this.defaultImage9TiledMaterial.nineSlicedMode=d,this.defaultImage9TiledMaterial.update(),this.defaultImageMaterials.push(this.defaultImage9TiledMaterial)),this.defaultImage9TiledMaterial):(this.defaultImageMaterial||(this.defaultImageMaterial=this._createBaseImageMaterial(),this.defaultImageMaterial.name="defaultImageMaterial",this.defaultImageMaterial.update(),this.defaultImageMaterials.push(this.defaultImageMaterial)),this.defaultImageMaterial)}registerUnicodeConverter(e){this._unicodeConverter=e}registerRtlReorder(e){this._rtlReorder=e}getUnicodeConverter(){return this._unicodeConverter}getRtlReorder(){return this._rtlReorder}}export{p as ElementComponentSystem};