/* COPYRIGHT Esri - https://js.arcgis.com/5.1.2/LICENSE.txt */
import{__decorate as t,__param as i}from"tslib";import{location as e,uniform as s,input as o}from"../../GraphShaderModule.js";import{Float as l,Vec2 as r,dot as a,max as n,Vec4 as d,mix as m,length as p,clamp as u,step as c,min as h,ifElse as y,greaterThan as f}from"../../graph/glsl.js";import{PolyHittestVertexInput as v,PolyVertexInput as b,AAnimatedPolyShader as g,PolyFragmentInput as x}from"./AAnimatedPolyShader.js";import{getValue as S}from"./AAnimatedShader.js";import{noHit as w,trueHit as P}from"../shaders/constants.js";import{isRectHittest as j,distPointSegment as z,hittestScreenRect as A}from"../shaders/hittestUtils.js";import{AntialiasingControls as D,getLineAntialiasing as R,getLineThinFactor as C}from"../shaders/LineShader.js";class F extends b{}t([e(10,l)],F.prototype,"accumulatedDistance",void 0),t([e(11,r)],F.prototype,"normal",void 0),t([e(12,r)],F.prototype,"segmentDirection",void 0);class T extends x{}class W extends g{constructor(){super(...arguments),this.type="AnimatedLineShader"}vertex(t,i){const{animationPointerAndBaseSizeAndReferenceSize:e}=t,s=e.xy,{distanceToPx:o,ndc:p,z:u,color:c,isOutline:h,strokeWidth:y,isSDF:f,baseSize:v,scale:b,scaleSymbolsProportionally:g,evalParams:x}=this._vertexPoly(t),w=t.sizing.xy,P=w.x.multiply(v).divide(w.y),j=S(s,6,x).a,z=t.accumulatedDistance.subtract(j),{normal:A}=t,D=t.normal.y,R=z.divide(this.view.displayZoomFactor).add(a(t.segmentDirection,t.offset)).divide(P),C=D.add(1).divide(2),F=new r(R,C),T=t.tlbr.divide(this.mosaicInfo.size.xyxy),W=v.divide(2),q=new l(.5).multiply(this.antialiasingControls.antialiasing),O=n(W.add(q),new l(.45)).add(new l(.1).multiply(q));return{glPosition:new d(p,u,1),tlbr:T,uv:F,color:c.multiply(new l(1).subtract(h)),outlineColor:c.multiply(h),distanceToPx:o,strokeWidth:y.multiply(m(new l(1),b,g)),isOutline:h,isSDF:f,halfWidth:O,normal:A,...this.maybeRunHittest(t,i,O)}}fragment(t){const i=this._fragmentPoly(t),e=R(t,this.antialiasingControls.blur),{halfWidth:s,normal:o}=t,r=C(s),a=p(o).multiply(s),n=u(r.multiply(s.subtract(a)).divide(r.subtract(new l(1))),new l(0),new l(1));return this.getFragmentOutput(i.multiply(n).multiply(e),t)}hittest(t,i,e){const{pos0:s,pos1:o,pos2:r}=this.computeHittestTriangle(t,i,null),a=j(this.hittestRequest),{distance:n,smallSymbolDistance:d,smallSymbolSizeThreshold:m,tlbr:p}=this.hittestRequest,u=c(e,m.multiply(.5)).multiply(n.subtract(d)),v=this.hittestRequest.position,b=h(z(v,s,o),z(v,s,r)).subtract(e).add(u);return y(a,A(s,o,r,p),y(f(b,n),new l(w),new l(P)))}}t([s(D)],W.prototype,"antialiasingControls",void 0),t([i(0,o(F)),i(1,o(v))],W.prototype,"vertex",null),t([i(0,o(T))],W.prototype,"fragment",null);export{W as AnimatedLineShader};
