GE Lua Documentation

Press F to search!

setData

Definition


-- @/lua/ge/extensions/ui/apps/genericMissionData.lua:37

-- Function to update mission data
local function setData(args)
  if not args.category then args.category = 'default' end
  if not args.order then args.order = -(1 + tableSize(missionData.elements)) end

  local matchedCategories = {}

  -- Try to match the category as a lua pattern
  for category, _ in pairs(missionData.elements) do
    if string.match(category, args.category) then
      table.insert(matchedCategories, category)
    end
  end

  -- If no category was found, use the category name directly
  if #matchedCategories == 0 then
    table.insert(matchedCategories, args.category)
  end

  -- Update all matched categories
  for _, category in ipairs(matchedCategories) do
    if args.clear then
      missionData.elements[category] = nil
    elseif args.msg ~= "" then
      missionData.elements[category] = {
        title = args.title,
        txt = args.txt,
        order = args.order,
        style = args.style,
        category = args.category,
        minutes = args.minutes,
        seconds = args.seconds,
        milliseconds = args.milliseconds
      }
    end
  end

  -- Update display order
  local newOrder = {}
  for category, element in pairs(missionData.elements) do
    table.insert(newOrder, {
      category = category,
      element = element
    })
  end
  table.sort(newOrder, function(a, b)
    return a.element.order < b.element.order
  end)

  -- Check if order changed
  local orderChanged = #newOrder ~= #missionData.displayOrder
  if not orderChanged then
    for i, item in ipairs(newOrder) do
      if missionData.displayOrder[i] ~= item.category then
        orderChanged = true
        break
      end
    end
  end

  missionData.displayOrder = newOrder

  -- Send updates to UI
  if orderChanged then
    -- If order changed, send all elements
    for i, item in ipairs(missionData.displayOrder) do
      guihooks.trigger('SetGenericMissionData', {
        element = item.element,
        index = i
      })
    end
  else
    -- If order didn't change, only send updated elements
    for _, category in ipairs(matchedCategories) do
      local element = missionData.elements[category]
      if element then
        -- Find the index of this element
        for i, item in ipairs(missionData.displayOrder) do
          if item.category == category then
            guihooks.trigger('SetGenericMissionData', {
              element = element,
              index = i
            })
            break
          end
        end
      end
    end
  end
end

Callers

@/lua/ge/extensions/editor/util/plotHelperUtil.lua
  if params.initData then
    self:setData(params.initData)
  end
-- {{x0, y0, ...}, {x1, y1, ...}, ...}
function C:setData(data)
  local multiData = {}
@/lua/ge/extensions/editor/vehicleEditor/staticEditor/veJBeamTableVis.lua
    if dataGraphingKey and graphableData then
      plotHelperUtil:setData(graphableData[dataGraphingKey].data)
    end

            plotHelperUtil:setData(data)
          end
@/inspector/Views/DOMTreeOutline.js
        event.dataTransfer.effectAllowed = "copyMove";
        event.dataTransfer.setData(DOMTreeOutline.DOMNodeIdDragType, treeElement.representedObject.id);

        event.dataTransfer.setData("text/plain", treeElement.listItemElement.textContent);
        this._nodeBeingDragged = treeElement.representedObject;
@/lua/ge/extensions/flowgraph/nodes/ui/cornerTimer.lua
      data.style = "text"
      ui_apps_genericMissionData.setData(data)
    else
    else
      ui_apps_genericMissionData.setData({category = "cornerTimer_virtual", clear = true})
    end
@/lua/ge/extensions/tech/capturePlayer.lua
  pcd:addField('z', 4, 'float')
  pcd:setData(binary, #binary)
  local points = #response.data / ffi.sizeof('struct radar_return_t')
  pcd:setData(pointcloud, points * ffi.sizeof('struct __luaVec3_t'))
@/lua/ge/extensions/flowgraph/nodes/ui/raceLaps.lua
    guihooks.trigger('RaceLapChange', {current = self.pinIn.cur.value, count = self.pinIn.max.value})
    ui_apps_genericMissionData.setData({
      title = "missions.missions.general.lap",
    guihooks.trigger('RaceLapClear')
    ui_apps_genericMissionData.setData({
      category = "raceLaps",
@/lua/ge/extensions/gameplay/crashTest/scenarioManager.lua
  data.style = "text"
  ui_apps_genericMissionData.setData(data)
end
@/inspector/Views/GeneralStyleDetailsSidebarPanel.js
        classNameTitle.addEventListener("dragstart", (event) => {
            event.dataTransfer.setData(WI.GeneralStyleDetailsSidebarPanel.ToggledClassesDragType, className);
            event.dataTransfer.effectAllowed = "copy";
@/inspector/Views/LogContentView.js

        event.clipboardData.setData("text/plain", this._formatMessagesAsData(true));
        event.stopPropagation();
@/ui/ui-vue/dist/index.js
`+b).split(R[0]).slice(1).map(R[3]?escape:inlineEscape).join(R[3]||`
  • `)+R[2]:f===`#`?``+inlineEscape(b.slice(f+1))+``:f===`<`?b:`

    `+inlineEscape(b)+`

    `}),h$1}function escape(t){return new Option(t).innerHTML}function inlineEscape(s){return escape(s).replace(/\\_/g,`⋿`).replace(/!\[([^\]]*)]\(([^(]+)\)/g,`$1`).replace(/\[([^\]]+)]\(([^(]+?)\)/g,`$1`.link(`$2`)).replace(/`([^`]+)`/g,`$1`).replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,`$2`).replace(/(\*| _)(?=\S)([^\r]*?\S)\1/g,`$2`).replace(/⋿/g,`_`)}var content_exports=__export({bbcode:()=>bbcode_exports,markdown:()=>markdown_exports});const screenLocked=computed(()=>screenLockedState.value),loadingScreen=reactive({active:!1,visible:!1,fading:!1,shown:!1});var screenLockedState=ref(!1),loadingScreenStateWatcher=null,events;function screenLock(lock=!1){lock=!!lock,screenLockedState.value=lock;let body=document.body;body&&body.classList.toggle(`screen-locked`,lock)}async function startLoading$1(func){screenLock(!0),events||=useBridge().events,events.emit(`LoadingScreen`,{active:!0}),await nextTick(),setTimeout(()=>func(),500)}function linkLoadingScreenState(state){loadingScreenStateWatcher?.(),loadingScreenStateWatcher=watch([()=>state.active,()=>state.visible,()=>state.fading,()=>state.shown],([active,visible,fading,shown])=>{loadingScreen.active=active,loadingScreen.visible=visible,loadingScreen.fading=fading,loadingScreen.shown=shown,screenLock(active)})}function waitForLoadingScreenFadeIn$1(timeout=4e3){if(loadingScreen.visible&&!loadingScreen.fading)return;let fadeInPromise=new Promise(resolve$1=>{let unwatch=watch([()=>loadingScreen.visible,()=>loadingScreen.fading],([visible,fading])=>{visible&&!fading&&(unwatch(),resolve$1())},{immediate:!0})});return Promise.race([fadeInPromise,sleep(timeout)])}var bngNavigator=class{opts={root:null,container:null,bootscreen:null,north:null,clock:null,backgroundRgb:[50,50,50],roadColors:[`#FFFFFFFF`,`#A6A678FF`,`#A67854FF`],routeColor:`#3388EEFF`,markerColor:`#2C5CFF`,routes:!1,markers:!1,vehicles:!1,vehicleMarker:null,cameraColor:`#FD6A00`,vehicleColor:`#A3D39C`,rotate:!0,scale:1,pitch:0,offsetX:128,offsetY:64,resolution:4096,speedZoom:!1,speedOffset:0,speedPitch:!0,speedZoomIncrements:1,speedZoomMultiplier:2,speedZoomMax:200,speedZoomEffect:.15,hideBootscreen:!1};elms={root:document};mapScale=1;startup=!0;startupFallback=!0;layers={};layersLoadOrder=[bngNavLayerMap,bngNavLayerRoute,bngNavLayerMarkers,bngNavLayerVehicles,bngNavLayerElements,bngNavLayerBootscreen];setOptions(options){if(!(typeof options!=`object`||Array.isArray(options))){for(let key in this.opts)key in options&&(this.opts[key]=options[key]);for(let name in this.layers){let layer=this.layers[name];typeof layer.setOptions==`function`&&layer.setOptions(this.opts)}}}constructor(options){this.setOptions(options);for(let key of[`root`,`container`,`clock`,`north`,`bootscreen`]){let elm;typeof this.opts[key]==`string`?elm=this.elms.root.querySelector(this.opts[key]):this.opts[key]&&(elm=this.opts[key]),elm&&(elm instanceof HTMLElement||elm instanceof SVGElement)&&(this.elms[key]=elm)}if(!this.elms.root)throw Error(`Cannot find map root element`);if(!this.elms.container)throw Error(`Cannot find map container element`);this.elms.svg=new bngNavSVG(this.elms.container.children[0]);for(let cls of this.layersLoadOrder){let elms$4=cls.name===`map`?this.elms:{...this.elms,cvs:this.layers.map.cvs,routes:[this.layers.map.rwrapper,this.layers.map.rcanvas,this.layers.map.rcanvasCtx]};if(cls.canInit(elms$4,this.opts)){let dim=cls.name===`map`?this.mapScale:this.layers.map.dimensions,layer=new cls(elms$4,this.opts,dim);layer&&layer.name&&(this.layers[layer.name]=layer)}}this.layersLoadOrder=null;let expose=(layer,method,name=null)=>{this[name||method]=layer?layer[method].bind(layer):()=>{}};expose(this.layers.map,`setRotation`),expose(this.layers.map,`setLocation`),expose(this.layers.map,`setZoom`),expose(this.layers.map,`setScale`),expose(this.layers.map,`setSpeed`),expose(this.layers.map,`setOpacity`),expose(this.layers.route,`update`,`setRoute`),expose(this.layers.markers,`update`,`setMarkers`),expose(this.layers.bootscreen,`setImage`,`setBootscreenImage`)}update(data){data&&this.setup(data),this.layers.map.update(),this.layers.elements&&this.layers.elements.update(this.layers.map.state),this.layers.map.render()}setup(data){typeof data.terrainTiles==`object`&&!Array.isArray(data.terrainTiles)&&(data.terrainTiles=[]),this.layers.map.setMapSize(data)&&this.startupFallback?(this.startupFallback=!1,this.startup=!0):this.startup||(this.startupFallback=!0),this.startup&&(this.startup=!1,this.layers.map.applyMapSize(),this.layers.map.renderMap(data))}setData(data){if(!data||Object.keys(data).length===0){console.log(`Received empty map data`);return}this.layers.vehicles&&this.layers.vehicles.update(data),this.update(data),this.opts.hideBootscreen&&this.layers.bootscreen&&this.layers.bootscreen.hide()}updateData(data){typeof data==`object`&&(`x`in data&&`y`in data&&this.layers.map.setLocation(data.x,data.y,!1),`rotation`in data&&this.layers.map.setRotation(data.rotation,!1),`speed`in data&&this.layers.map.setSpeed(data.speed,!1),`ignitionLevel`in data&&this.layers.bootscreen&&this.layers.bootscreen.toggle(data.ignitionLevel<2),this.update())}},bngNavUtils=class{static truncDec(num,dec=2){let d=10**dec;return~~(num*d)/d}static setStyle(node,style){for(let name in style)node.style[name]=style[name]}},bngNavSVG=class{ns={svg:`http://www.w3.org/2000/svg`,xlink:`http://www.w3.org/1999/xlink`};root;constructor(root){if(!root||!root.tagName||root.tagName.toLowerCase()!==`svg`)throw Error(`Cannot access svg in a container`);this.root=root}setViewBox(viewBox){this.root.setAttributeNS(null,`viewBox`,viewBox)}createNode(tag,...args){let[attrs,parent]=args;parent||(attrs&&attrs instanceof SVGElement?(parent=attrs,attrs=null):parent=this.root);let node=document.createElementNS(this.ns.svg,tag);return attrs&&this.setAttrs(node,attrs),parent.appendChild(node),node}removeNode(node){node&&node.parentNode&&node.parentNode.removeChild(node)}setAttrs(node,attrs){for(let name in attrs){let ns=name.startsWith(`xlink:`)?this.ns.xlink:null;node.setAttributeNS(ns,name,attrs[name])}}clearNode(node){let elm;for(;elm=node.children[0];)node.removeChild(elm)}setStyle=bngNavUtils.setStyle;createCanvas(resolution){let fo=this.createNode(`foreignObject`);this.setStyle(fo,{position:`absolute`,x:`0`,y:`0`,width:`100%`,height:`100%`});let cvs=document.createElement(`canvas`);return cvs.width=resolution,cvs.height=resolution,fo.appendChild(cvs),[fo,cvs,cvs.getContext(`2d`)]}},bngNavLayerMap=class{static name=`map`;dimensions={ver:0,offset:512,scale:1,centerX:1024,centerY:1024,width:2048,height:2048,resScale:1};state={x:0,y:0,speed:0,scale:1,zoom:1,speedZoom:0,rotation:0,focusX:0,focusY:0,offsetX:0,offsetY:0};container;svg;wrapper;canvas;canvasCtx;rwrapper;rcanvas;rcanvasCtx;cvs;renders=[];rendered={terrainCvs:null,terrainCtx:null,roadsCvs:null,roadsCtx:null};terrainOpacity=1;gridGap=50;gridColour=`#cccccccc`;roadColors;resolution=2048;offsetX;offsetY;rotate;scale;pitch;speedPitch;speedOffset;speedZoom;speedZoomIncrements;speedZoomMultiplier;speedZoomMax;speedZoomEffect;static canInit(elms$4,opts){return!0}constructor({container,svg},opts,mapScale){this.name=this.constructor.name,this.container=container,this.svg=svg,[this.wrapper,this.canvas,this.canvasCtx]=svg.createCanvas(opts.resolution),[this.rwrapper,this.rcanvas,this.rcanvasCtx]=svg.createCanvas(opts.resolution);let that=this;this.rendered.terrainCvs=window.OffscreenCanvas?new window.OffscreenCanvas(1,1):document.createElement(`canvas`),this.rendered.terrainCtx=this.rendered.terrainCvs.getContext(`2d`),this.addRenderSource({passive:!0,source:this.rendered.terrainCvs,get alpha(){return that.terrainOpacity}}),this.rendered.roadsCvs=window.OffscreenCanvas?new window.OffscreenCanvas(1,1):document.createElement(`canvas`),this.rendered.roadsCtx=this.rendered.roadsCvs.getContext(`2d`),this.addRenderSource({passive:!0,source:this.rendered.roadsCvs}),this.dimensions.scale=mapScale,this.setOptions(opts),this.setOpacity(1)}setOptions(opts){this.bgRgb=opts.backgroundRgb.join(`, `),this.roadColors=opts.roadColors,this.resolution=opts.resolution,this.offsetX=opts.offsetX,this.offsetY=opts.offsetY,this.rotate=opts.rotate,this.scale=opts.scale,this.state.scale=this.scale*this.state.zoom,this.pitch=opts.pitch,this.speedPitch=opts.speedPitch,this.speedOffset=opts.speedOffset,this.speedZoom=opts.speedZoom,this.speedZoomIncrements=opts.speedZoomIncrements,this.speedZoomMultiplier=opts.speedZoomMultiplier,this.speedZoomMax=opts.speedZoomMax,this.speedZoomEffect=opts.speedZoomEffect}setLocation(x,y,doupdate=!0){this.state.x=-x,this.state.y=y,this.state.focusX=~~(this.state.x/this.dimensions.scale*this.dimensions.resScale),this.state.focusY=~~(this.state.y/this.dimensions.scale*this.dimensions.resScale),this.state.offsetX=this.dimensions.centerX-this.state.focusX,this.state.offsetY=this.dimensions.centerY-this.state.focusY,this.container.style.transformOrigin=`${this.state.offsetX}px ${this.state.offsetY}px`}setRotation(rotation,doupdate=!0){this.state.rotation=bngNavUtils.truncDec(rotation,3)%360,doupdate&&this.update()}setZoom(zoom,doupdate=!0){let fixed=(zoom-150)*2;this.setSpeed(fixed)}setScale(zoom,doupdate=!0){this.state.zoom=zoom,this.state.scale=this.scale*zoom}setSpeed(speed){this.state.speed=bngNavUtils.truncDec(speed,3),this.state.speed===0?this.state.speedZoom=0:this.state.speedZoom=bngNavUtils.truncDec(Math.min(1+this.state.speed*3.6*1.5,this.speedZoomMax)/this.speedZoomIncrements*this.speedZoomIncrements/this.speedZoomMax,3)}setOpacity(opacity){this.canvas.style.backgroundColor=`rgba(${this.bgRgb}, ${opacity})`,this.terrainOpacity=opacity}setMapSize(data){let res;return data.terrainTiles&&data.terrainTiles[0]&&data.terrainTiles[0].size?(this.setMapDimensions(data),res=!0):this.dimensions.ver===0&&(this.setMapDimensions(data),res=!1),res}setMapDimensions(data){let poss=[],tiles=data.terrainTiles||[];for(let tile of tiles)poss.push([tile.offset[0],-tile.offset[1]],[tile.offset[0]+tile.size[0],-tile.offset[1]+tile.size[1]]);for(let key in data.nodes)poss.push([data.nodes[key].pos[0],-data.nodes[key].pos[1]]);let minX=1/0,maxX=-1/0,minY=1/0,maxY=-1/0;for(let pos of poss)pos[0]/=this.dimensions.scale,pos[1]/=this.dimensions.scale,pos[0]maxX&&(maxX=pos[0]),pos[1]maxY&&(maxY=pos[1]);let dim={centerX:-minX,centerY:-minY,width:-minX+maxX,height:-minY+maxY};if((dim.centerX<0||dim.centerY<0)&&((isFinite(dim.centerX)||isFinite(dim.centerY))&&console.error(`Navigator: Invalid center point detected.`),dim.centerX=this.resolution/2,dim.centerY=this.resolution/2,dim.width=this.resolution,dim.height=this.resolution),this.dimensions.offset>0){let off=this.dimensions.offset;dim.centerX+=off,dim.width+=off*2,dim.centerY+=off,dim.height+=off*2}for(let key in dim.width>this.resolution||dim.height>this.resolution?(dim.resScale=this.resolution/(dim.width>dim.height?dim.width:dim.height),dim.width*=dim.resScale,dim.height*=dim.resScale,dim.centerX*=dim.resScale,dim.centerY*=dim.resScale,dim.offset=dim.offset>0?dim.offset/dim.resScale:0):dim.resScale=1,dim)key!==`resScale`&&(dim[key]=Math.round(dim[key]));let changed=!1;for(let key in dim)this.dimensions[key]!==dim[key]&&(this.dimensions[key]=dim[key],changed=!0);changed&&this.dimensions.ver++}applyMapSize(){this.container.style.width=this.dimensions.width+`px`,this.container.style.height=this.dimensions.height+`px`,this.svg.setViewBox(`0 0 ${this.dimensions.width} ${this.dimensions.height}`);let width$1=this.dimensions.width,height$1=this.dimensions.height;this.canvas.style.width=this.wrapper.style.width=width$1+`px`,this.canvas.style.height=this.wrapper.style.height=height$1+`px`,this.canvas.width=width$1,this.canvas.height=height$1,this.rendered.terrainCtx.clearRect(0,0,this.rendered.terrainCvs.width,this.rendered.terrainCvs.height),this.rendered.terrainCvs.width=width$1,this.rendered.terrainCvs.height=height$1,this.rendered.roadsCtx.clearRect(0,0,this.rendered.roadsCvs.width,this.rendered.roadsCvs.height),this.rendered.roadsCvs.width=width$1,this.rendered.roadsCvs.height=height$1}addRenderSource(source){if(typeof source!=`object`&&!(`source`in source))return console.error(`Navigator: Render source is invalid`);this.renders.push(source)}render(passive=!1){if(!passive)return;let ctx=this.canvasCtx,full=[0,0,this.dimensions.width,this.dimensions.height];ctx.clearRect(...full);for(let src of this.renders){if(!!src.passive!==passive||src.source.width===0||src.source.height===0)continue;let region=src.region;if(src.render){let res=src.render();typeof res==`object`&&`empty`in res&&(region={full:res,fullArray:[res.x1,res.y1,res.x2-res.x1,res.y2-res.y1]})}let pos=src.pos;pos||=(pos=region&&!region.full.empty?region.fullArray:full,[...pos,...pos]),src.alpha&&(ctx.globalAlpha=src.alpha),ctx.drawImage(src.source,...pos),ctx.globalAlpha=1}}renderMap(data){for(let key in this.drawTerrain(data,this.rendered.terrainCtx),data.nodes){let el=data.nodes[key];if(el.links)for(let key2 in el.links)el.links[key2].drivability=Math.round(el.links[key2].drivability*10)/10}this.drawRoads(data.nodes,0,.1,this.roadColors[2],this.rendered.roadsCtx),this.drawRoads(data.nodes,.1,.9,this.roadColors[1],this.rendered.roadsCtx),this.drawRoads(data.nodes,.9,1,this.roadColors[0],this.rendered.roadsCtx),this.render(!0)}drawTerrain(data,ctx){for(let x=this.gridGap;x{ctx.clearRect(...dest),ctx.drawImage(img,0,0,img.width,img.height,...dest),loading--,loading===0&&this.render(!0)}),img.addEventListener(`error`,()=>{console.error(`Navigator: Unable to load tile "${tile.file}"`),loading--,loading===0&&this.render(!0)}),img.src=tile.file}}createLine(ctx,p1,p2,color){Math.abs(p1.radius-p2.radius)>.2?this.varLine(ctx,p1.x,p1.y,p2.x,p2.y,p1.radius,p2.radius,color):(ctx.beginPath(),ctx.lineWidth=Math.max(p1.radius,p2.radius),ctx.lineCap=`round`,ctx.strokeStyle=color,ctx.moveTo(p1.x,p1.y),ctx.lineTo(p2.x,p2.y),ctx.stroke())}varLine(ctx,x1,y1,x2,y2,w1,w2,color){let dx=x2-x1,dy=y2-y1,length=dx*dx+dy*dy;if(length==0)return;length=Math.sqrt(length),w1*=.5,w2*=.5,dx/=length,dy/=length;let shiftx=-dy*w1,shifty=dx*w1;ctx.beginPath(),ctx.fillStyle=color,ctx.moveTo(x1+shiftx,y1+shifty),ctx.lineTo(x1-shiftx,y1-shifty),shiftx=-dy*w2,shifty=dx*w2,ctx.lineTo(x2-shiftx,y2-shifty),ctx.lineTo(x2+shiftx,y2+shifty),ctx.closePath(),ctx.arc(x1,y1,w1,0,2*Math.PI),ctx.arc(x2,y2,w2,0,2*Math.PI),ctx.fill()}drawRoads(nodes,drivabilityMin,drivabilityMax,colour,ctx){for(let key in nodes){let el=nodes[key];if(el.links)for(let key2 in el.links){let drivability=el.links[key2].drivability;if(drivabilitydrivabilityMax)continue;let el2=nodes[key2];this.createLine(ctx,{x:el.pos[0]/this.dimensions.scale*this.dimensions.resScale+this.dimensions.centerX,y:-el.pos[1]/this.dimensions.scale*this.dimensions.resScale+this.dimensions.centerY,radius:Math.min(Math.max(el.radius,0),5)*3*this.dimensions.resScale},{x:el2.pos[0]/this.dimensions.scale*this.dimensions.resScale+this.dimensions.centerX,y:-el2.pos[1]/this.dimensions.scale*this.dimensions.resScale+this.dimensions.centerY,radius:Math.min(Math.max(el2.radius,0),5)*3*this.dimensions.resScale},colour)}}}update(){let pos={x:-this.state.offsetX+this.offsetX,y:-this.state.offsetY+this.offsetY},rot={x:0,z:0};this.speedOffset>0&&(pos.y+=this.state.speedZoom*this.speedOffset),this.rotate&&(rot.x=this.pitch,this.speedPitch>0&&(rot.x+=this.speedPitch*this.state.speedZoom),rot.z=this.state.rotation);let scale=this.state.scale/this.dimensions.resScale;this.speedZoom&&(scale-=this.state.speedZoom*.1/this.dimensions.resScale),this.container.style.transform=`translate3d(${pos.x}px, ${pos.y}px, 0px) rotateX(${rot.x}deg) rotateZ(${rot.z}deg) scale(${scale})`}},bngNavLayerRoute=class{static name=`route`;dimensions;scale=1/3;lineWidth=10;color;wrapper;canvas;canvasCtx;current=null;static canInit(elms$4,opts){return!!opts.routes}constructor({routes,svg},opts,dimensions){this.name=this.constructor.name,[this.wrapper,this.canvas,this.canvasCtx]=routes||svg.createCanvas(opts.resolution),this.dimensions=dimensions,this.setOptions(opts)}setOptions(opts){this.color=opts.routeColor}update(data){if(this.dimver!==this.dimensions.ver){this.dimver=this.dimensions.ver;let width$1=this.dimensions.width,height$1=this.dimensions.height;this.canvas.style.width=this.wrapper.style.width=width$1+`px`,this.canvas.style.height=this.wrapper.style.height=height$1+`px`,this.canvas.width=this.canvasCtx.width=width$1*this.scale,this.canvas.height=this.canvasCtx.height=height$1*this.scale}if(!data||!data.markers){this.clear();return}this.current?this.optimiseAndDrawRoute(data,this.current):(this.clear(),data&&this.drawFreshRoute(data)),this.current=data.markers}clear(){this.current=null,this.canvasCtx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvasCtx.stroke()}drawFreshRoute(data){this.drawRoute({color:data.color,lineWidth:this.lineWidth,lineCap:`butt`,markers:data.markers,startIndex:0,drawFromIndex:2,drawToIndex:data.markers.length})}optimiseAndDrawRoute(data,prevMarkers){let markers$1=data.markers,ci=markers$1.length-2,pi=prevMarkers.length-2;for(;pi>=0&&ci>=0&&!(markers$1[ci]!==prevMarkers[pi]||markers$1[ci+1]!==prevMarkers[pi+1]);)ci-=2,pi-=2;(ci>=0||pi>=0)&&(this.canvasCtx.globalCompositeOperation=`destination-out`,this.drawRoute({color:data.color,lineWidth:this.lineWidth+2,markers:prevMarkers,drawToIndex:Math.min(pi+4,prevMarkers.length)}),this.canvasCtx.globalCompositeOperation=`source-over`,this.drawRoute({color:data.color,lineWidth:this.lineWidth,markers:data.markers,drawToIndex:Math.min(ci+6,data.markers.length)}))}drawRoute({color,lineWidth,lineCap=`round`,markers:markers$1,startIndex=0,drawFromIndex=0,drawToIndex}){let mapFac=this.scale/this.dimensions.scale,cx=this.dimensions.centerX*mapFac,cy=this.dimensions.centerY*mapFac;this.canvasCtx.beginPath(),this.canvasCtx.strokeStyle=color||this.color,this.canvasCtx.lineWidth=lineWidth*this.scale*this.dimensions.resScale,this.canvasCtx.lineCap=lineCap,this.canvasCtx.moveTo(markers$1[startIndex]*this.dimensions.resScale*mapFac+cx,-markers$1[startIndex+1]*this.dimensions.resScale*mapFac+cy);for(let i=drawFromIndex;iargs.map(arg=>typeof arg==`string`?arg:`[object]`)},createElementNS:{base:Document,getArgs:(...args)=>args.map(arg=>typeof arg==`string`?arg:`[object]`)},cloneNode:{base:Node,getArgs:deep=>[deep]},importNode:{base:Document,getArgs:(node,deep)=>[`[node]`,deep]},insertAdjacentHTML:{base:Element,getArgs:(position,text)=>[position,`[HTML:${text.length}chars]`]},innerHTML:{isSetter:!0,bases:[Element,HTMLElement],getArgs:value=>[`[HTML:${typeof value==`string`?value.length:0}chars]`]},outerHTML:{isSetter:!0,bases:[Element,HTMLElement],getArgs:value=>[`[HTML:${typeof value==`string`?value.length:0}chars]`]},appendChild:{base:Node,stats:`append`,getArgs:child=>[`[${child?.tagName||child?.nodeName||`node`}]`]},insertBefore:{base:Node,stats:`append`,getArgs:(newNode,referenceNode)=>[`[${newNode?.tagName||newNode?.nodeName||`node`}]`,`[${referenceNode?.tagName||referenceNode?.nodeName||`ref`}]`]},replaceChild:{base:Node,stats:`append`,getArgs:(newChild,oldChild)=>[`[${newChild?.tagName||newChild?.nodeName||`new`}]`,`[${oldChild?.tagName||oldChild?.nodeName||`old`}]`]},append:{base:Element,stats:`append`,getArgs:(...nodes)=>nodes.map(node=>`[${node?.tagName||node?.nodeName||typeof node==`string`?`text`:`node`}]`)},prepend:{base:Element,stats:`append`,getArgs:(...nodes)=>nodes.map(node=>`[${node?.tagName||node?.nodeName||typeof node==`string`?`text`:`node`}]`)},before:{base:Element,stats:`append`,getArgs:(...nodes)=>nodes.map(node=>`[${node?.tagName||node?.nodeName||typeof node==`string`?`text`:`node`}]`)},after:{base:Element,stats:`append`,getArgs:(...nodes)=>nodes.map(node=>`[${node?.tagName||node?.nodeName||typeof node==`string`?`text`:`node`}]`)}};function setupInterceptor(type){let interceptor=interceptors[type];if(interceptor.isSetter){let descriptor;if(interceptor.bases){for(let base of interceptor.bases)if(descriptor=Object.getOwnPropertyDescriptor(base.prototype,type),descriptor){interceptor.base=base;break}}descriptor&&(interceptor.original=descriptor)}else interceptor.original=interceptor.base.prototype[type];if(!interceptor.original){logger_default.warn(`No original for ${type}`);return}interceptor.call=(self$1,...args)=>{let stackTrace=captureStackTrace();if(stackTrace&&(includeAnonymousCalls||!stackTrace.hasAnonymous||stackTrace.filePaths.length>0)){let callData={type,timestamp:Date.now(),args:interceptor.getArgs(...args),stackTrace};if(interceptor.stats===`append`&&self$1)try{let mainContainer=self$1.closest?self$1.closest(`#mainContainer_apps`):null;if(mainContainer){let directChildDiv=self$1;for(;directChildDiv&&directChildDiv.parentNode&&directChildDiv.parentNode!==mainContainer;)directChildDiv=directChildDiv.parentNode;directChildDiv&&directChildDiv.parentNode===mainContainer&&directChildDiv.tagName===`DIV`&&(callData.uiAppInsertion={targetElement:directChildDiv})}}catch{}callQueue.push(callData)}if(interceptor.isSetter)interceptor.original.set.call(self$1,args[0]);else return interceptor.original.apply(self$1,args)},interceptor.isSetter?Object.defineProperty(interceptor.base.prototype,type,{get:interceptor.original.get,set:function(value){interceptor.call(this,value)},configurable:!0,enumerable:!0}):interceptor.base.prototype[type]=function(...args){return interceptor.call(this,...args)},interceptor.restore=()=>{interceptor.isSetter?Object.defineProperty(interceptor.base.prototype,type,{get:interceptor.original.get,set:interceptor.original.set,configurable:!0,enumerable:!0}):interceptor.base.prototype[type]=interceptor.original}}function captureStackTrace(){let stack$2=Error().stack;if(!stack$2)return null;let relevantLines=stack$2.split(` `).slice(STACK_TRACE_SKIP_LINES),filePaths=[],hasAnonymous=!1;for(let line of relevantLines){let match=line.match(STACK_TRACE_REGEX_FULL),functionName,filePath,lineNum,column;if(match)functionName=match[1],filePath=match[2],lineNum=match[3],column=match[4];else if(match=line.match(STACK_TRACE_REGEX),match)functionName=`anonymous`,filePath=match[1],lineNum=match[2],column=match[3];else continue;let isAnonymous=functionName?.includes(`anonymous`)||functionName?.includes(``)||!functionName||functionName.trim()===``;isAnonymous&&(hasAnonymous=!0,!includeAnonymousCalls)||filePaths.push({functionName,filePath,line:lineNum,column,isAnonymous})}return{filePaths,fullStack:stack$2,hasAnonymous}}async function processCallQueue(){if(statsProcessor.lastProcessTime=Date.now(),!(statsProcessor.isProcessing||callQueue.length===0)){statsProcessor.isProcessing=!0;try{let batch$1=callQueue.splice(0,Math.max(statsProcessor.batchSize,callQueue.length/5));statsProcessor.totalProcessed+=batch$1.length;for(let i=0;i{try{processCallQueue()}catch(error){logger_default.error(`Fatal error in DOM watchdog processing:`,error),destroy()}},statsProcessor.processInterval)}function getStats(){return{files:Object.fromEntries(statsProcessor.files),types:Object.fromEntries(statsProcessor.types),append:Object.fromEntries(statsProcessor.append)}}function clearStats(){statsProcessor.files.clear(),statsProcessor.types.clear(),statsProcessor.append.clear(),statsProcessor.uiApps.clear(),callQueue.length=0,statsProcessor.totalProcessed=0,statsProcessor.lastProcessTime=0,overlayActive&&updateOverlayDivs()}function restartTimer(){isInitialized&&startStatsProcessor()}function setIncludeAnonymousCalls(include){includeAnonymousCalls=include}var exposedFunctions=()=>({watchdogRecentCalls:getRecentCalls,watchdogCallChainStats:getCallChainStats,watchdogClearStats:clearStats,watchdogSetIncludeAnonymousCalls:setIncludeAnonymousCalls,watchdogDestroy:destroy,watchdogRestartTimer:restartTimer,watchdogUIAppsStats:getUIAppsStats,watchdogRefreshOverlay:refreshOverlay,watchdogStats:()=>{let stats=getStats(),format$2=obj=>Object.entries(obj).sort((a$1,b)=>b[1]-a$1[1]).map(([key,value])=>`${key}: ${value}`.replace(`\\`,`\\\\`)).join(`
  • @/inspector/Views/SpreadsheetCSSStyleDeclarationEditor.js
    
            event.clipboardData.setData("text/plain", formattedProperties.join("\n"));
            event.stop();
    @/lua/common/tech/pcdLib.lua
    
    function Pcd:setData(data, bytes)
      self.payload:set(data, bytes)
    @/inspector/Views/SearchTabContentView.js
    
            event.clipboardData.setData("text/plain", selectedTreeElement.synthesizedTextValue);
            event.stopPropagation();
    @/inspector/Base/Main.js
        var selectionString = selection.toString().removeWordBreakCharacters();
        event.clipboardData.setData("text/plain", selectionString);
        event.preventDefault();
    @/lua/ge/extensions/flowgraph/nodes/ui/raceCheckpoints.lua
        guihooks.trigger('WayPointChange', {current = self.pinIn.cur.value, count = self.pinIn.max.value})
        ui_apps_genericMissionData.setData({
          title = "missions.missions.general.checkpoint",
        guihooks.trigger('WayPointReset')
        ui_apps_genericMissionData.setData({
          category = "raceCheckpoints",
    @/inspector/Views/CookieStorageContentView.js
    
            event.clipboardData.setData("text/plain", this._formatCookiesAsText(cookies));
            event.stopPropagation();
    @/lua/ge/extensions/flowgraph/nodes/ui/genericMissionDataText.lua
        else
          ui_apps_genericMissionData.setData({category = self.pinIn.category.value or self.pinIn.title.value, clear = true})
        end
        end
        ui_apps_genericMissionData.setData(data)
      end
    @/lua/ge/extensions/flowgraph/basenode.lua
    
    function C:setData(data)
      self.data = data
    @/lua/ge/extensions/flowgraph/manager.lua
            -- copy over data from copied node to pasted node
            --node:setData(deepcopy(nodeData.data))
          end
    @/inspector/External/CodeMirror/codemirror.js
    
      e.dataTransfer.setData("Text", cm.getSelection())
      e.dataTransfer.effectAllowed = "copyMove"
          // iOS exposes the clipboard API, but seems to discard content inserted into it
          e.clipboardData.setData("Text", content)
          if (e.clipboardData.getData("Text") == content) {
    @/lua/ge/extensions/gameplay/drift/display.lua
    
        ui_apps_genericMissionData.setData(data)
      end
    @/ui/lib/ext/angular/angular-animate.js
            // animations that run right after compilation
            setData($interpolate(val)(scope));
            attrs.$observe('ngAnimateChildren', setData);
    
          function setData(value) {
            value = value === 'on' || value === 'true';
    @/inspector/Views/DataGrid.js
            var copyText = this._copyTextForDataGridNode(this.selectedNode);
            event.clipboardData.setData("text/plain", copyText);
            event.stopPropagation();
    @/ui/ui-vue/src/services/navigator-class.js
    
      setData(data) {
        if (!data || Object.keys(data).length === 0) {