{"version":3,"file":"MobileVH.BQFfeXaT.mjs","names":["useRef","useState","useCallback","p"],"sources":["https:/framerusercontent.com/modules/0O1smvYmkwrVoX4IM6Kx/pixeTbEv8S0doNNQBniI/Breakout_CANVAS_MOB.js","https:/framerusercontent.com/modules/mvurauQ0E6KdhsZeoGzk/uALVyZN1UNEW3zM60Xed/MobileVH.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useCallback}from\"react\";import{addPropertyControls,ControlType}from\"framer\";export default function BreakoutGame(props){const containerRef=useRef(null);const touchStartXRef=useRef(null);const p5InstanceRef=useRef(null);const resizeTimeoutRef=useRef(null);const lastResizeRef=useRef({width:0,height:0});const[donationValue,setDonationValue]=useState(0);const gameStateRef=useRef({bricks:[],activeBricks:[],ball:null,paddle:null,destroyedBricks:[],ballSpeed:10,keys:{},explosions:[],initialized:false,gameStatus:\"start\",startImage:null,brickBuffer:null,brickBufferNeedsUpdate:true,animationTime:0,currentLevel:1,lives:3,timers:[],groups:[]});const[canvasSize,setCanvasSize]=useState({width:800,height:600});// constants\nconst COLS=5;const ROWS=7;const BRICK_SPACING=10;const PADDLE_WIDTH_RATIO=.2;const PADDLE_HEIGHT=15;const PADDING=20;const PARTICLE_GRAVITY=.04;const explosionSpeedFactor=3;const RESIZE_DEBOUNCE_MS=150;const ROTATION_SPEED=.002;// --- GROUP DATA (copied from your brickdata.rtf) ---\nconst groups=[{group:1,items:[{label:\"\\xc9pingles de s\\xfbret\\xe9\",value:30},{label:\"Marqueurs permanents\",value:50},{label:\"Trousse couture\",value:50},{label:\"\\xc9tiquettes autocollantes\",value:50},{label:\"Stylos\",value:60},{label:\"R\\xe9veils portatifs\",value:60},{label:\"Gla\\xe7ons\",value:80},{label:\"Horloges murales\",value:80},{label:\"Ruban double face\",value:90},{label:\"Papier A4\",value:100},{label:\"Cahiers logistique\",value:100},{label:\"Bo\\xeetes recyclage carton\",value:100},{label:\"Pinces outils\",value:100},{label:\"Ruban signal\\xe9tique rouge blanc\",value:100},{label:\"Sacs poubelle\",value:125},{label:\"Tournevis et cl\\xe9s Allen\",value:120},{label:\"D\\xe9sinfectant mains\",value:150},{label:\"Lingettes\",value:150},{label:\"Piles AA et AAA\",value:150},{label:\"Chargeurs USB\",value:150},{label:\"Cadenas\",value:150},{label:\"Bo\\xeetes de rangement plastique\",value:150},{label:\"Photocopies plannings\",value:170},{label:\"Multiprises \\xe9lectriques\",value:200},{label:\"Rallonges \\xe9lectriques\",value:200},{label:\"Trousse de secours\",value:200},{label:\"Extincteurs\",value:300},{label:\"Masques de protection\",value:300},{label:\"Batteries rechargeables radios\",value:300},{label:\"Cartes SD m\\xe9moire cam\\xe9ras\",value:300},{label:\"Connecteurs et adaptateurs divers\",value:300},{label:\"Petits ventilateurs portatifs\",value:300},{label:\"Petits chauffages portatifs\",value:300},{label:\"Caf\\xe9 et th\\xe9 staff\",value:400},{label:\"Ponchos pluie\",value:400}]},{group:2,items:[{label:\"Batteries suppl\\xe9mentaires cam\\xe9ras\",value:400},{label:\"Gilets r\\xe9fl\\xe9chissants\",value:510},{label:\"Location hotspot Wi-Fi mobile\",value:500},{label:\"C\\xe2bles HDMI fibre longue distance\",value:500},{label:\"Location de tables techniques\",value:600},{label:\"Eau bouteilles\",value:600},{label:\"Formation b\\xe9n\\xe9voles\",value:600},{label:\"Badges staff\",value:600},{label:\"H\\xe9bergement site web\",value:600},{label:\"Casques audio pour installations VR\",value:600},{label:\"Mat\\xe9riel consommable imprimante 3D\",value:600},{label:\"Badges presse personnalis\\xe9s\",value:600},{label:\"Ampoules ou lampes de rechange projecteurs\",value:600},{label:\"Recrutement b\\xe9n\\xe9voles\",value:800},{label:\"Frais bancaires\",value:800},{label:\"Contr\\xf4leurs VR joysticks gants\",value:800},{label:\"D\\xe9placement artistes locaux\",value:800},{label:\"Honoraires mod\\xe9rateur chat en ligne\",value:800},{label:\"Stationnement camions et techniciens\",value:800},{label:\"Disques durs pour archivage\",value:900},{label:\"Taxe \\xe9cofrais \\xe9limination d\\xe9chets \\xe9lectroniques\",value:900},{label:\"Entretien des toilettes\",value:900},{label:\"Carburant g\\xe9n\\xe9ratrices\",value:900},{label:\"Location de comptoirs pour accueil\",value:900},{label:\"T-shirts organisation\",value:1e3},{label:\"Bracelets d’acc\\xe8s\",value:1e3},{label:\"Permis bruit et sonorisation\",value:1e3},{label:\"Maintenance site web\",value:1e3},{label:\"Impression programmes papier\",value:1200},{label:\"Frais traduction FR EN\",value:1200},{label:\"Collations b\\xe9n\\xe9voles\",value:1200},{label:\"\\xc9crans de contr\\xf4le backstage\",value:1200},{label:\"Frais de manutention \\xe9quipement lourd\",value:1200},{label:\"Nettoyage du site avant ouverture\",value:1200},{label:\"Location de tentes pour accueil\",value:1200}]},{group:3,items:[{label:\"Location de chaises pliantes\",value:1200},{label:\"Abonnements Adobe Creative Cloud\",value:1200},{label:\"Licences projections publiques\",value:1200},{label:\"Impression flyers\",value:1200},{label:\"Spot radio communautaire\",value:1200},{label:\"Enregistrement et archivage streaming\",value:1200},{label:\"Goodies promotionnels (sacs, autocollants)\",value:1200},{label:\"Radios talkies-walkies\",value:1275},{label:\"Maintenance bornes interactives\",value:1500},{label:\"\\xc9quipement backup \\xe9lectrique UPS\",value:1500},{label:\"Assurance \\xe9quipements lou\\xe9s\",value:1700},{label:\"Uniformes b\\xe9n\\xe9voles\",value:1700},{label:\"Licences SOCAN\",value:1700},{label:\"Frais billetterie en ligne\",value:1750},{label:\"Repas staff\",value:1800},{label:\"C\\xe2blage \\xe9lectrique\",value:1800},{label:\"Microphones sans fil\",value:1800},{label:\"Frais de stockage mat\\xe9riel avant festival\",value:2e3},{label:\"Frais de stockage apr\\xe8s festival\",value:2e3},{label:\"Impression affiches grand format\",value:2e3},{label:\"Signal\\xe9tique directionnelle sur site\",value:2e3},{label:\"Frais de serveurs cloud pour streaming\",value:2e3},{label:\"Location de tentes techniques\",value:2e3},{label:\"Location imprimante 3D pour atelier\",value:2e3},{label:\"Permis municipaux pour occupation de l’espace public\",value:2e3},{label:\"Frais pompiers\",value:2e3},{label:\"Nettoyage du site pendant le festival\",value:2200},{label:\"Location de camions pour transport mat\\xe9riel\",value:2200},{label:\"Casques VR suppl\\xe9mentaires\",value:2200},{label:\"Frais interpr\\xe8tes conf\\xe9rences panels\",value:2500},{label:\"Postes de premiers soins\",value:2550},{label:\"Plateforme de diffusion en direct\",value:2500},{label:\"Ruban gaffer\",value:255},{label:\"Cl\\xf4tures souples ou grillag\\xe9es\",value:2800},{label:\"Photographe officiel\",value:3e3}]},{group:4,items:[{label:\"Frais repas partenaires VIP\",value:3e3},{label:\"Cr\\xe9ation logo et d\\xe9clinaisons graphiques\",value:3e3},{label:\"Cachets performeurs num\\xe9riques live coding VJ\",value:3e3},{label:\"Assurance annulation \\xe9v\\xe9nement\",value:3e3},{label:\"Frais juridiques\",value:3400},{label:\"Supports et structures pour \\xe9crans\",value:3500},{label:\"H\\xe9bergement artistes Airbnb\",value:3500},{label:\"Support streaming multi-cam\\xe9ras\",value:3500},{label:\"Spot radio commerciale\",value:4e3},{label:\"Site web design et d\\xe9veloppement\",value:4e3},{label:\"R\\xe9gisseurs g\\xe9n\\xe9raux\",value:4e3},{label:\"\\xc9lectricit\\xe9 suppl\\xe9mentaire branchements\",value:4e3},{label:\"Frais police\",value:4250},{label:\"Assurance responsabilit\\xe9 civile\",value:4250},{label:\"Cachets artistes num\\xe9riques par installation\",value:4250},{label:\"Logiciels licences TouchDesigner Resolume Unity Pro\",value:4250},{label:\"Toilettes portatives\",value:4200},{label:\"Location haut-parleurs multicanaux\",value:4500},{label:\"Location de chapiteaux pour installations VR\",value:4800},{label:\"Publicit\\xe9 m\\xe9tro affichage num\\xe9rique\",value:5e3},{label:\"Location d’un entrep\\xf4t alternatif ou salle annexe\",value:5e3},{label:\"Honoraires techniciens son\",value:5e3},{label:\"Honoraires techniciens lumi\\xe8re\",value:5e3},{label:\"D\\xe9placement artistes internationaux\",value:5e3},{label:\"Consoles audio num\\xe9riques\",value:5e3},{label:\"Ordinateurs haute performance GPU\",value:5e3},{label:\"Relations presse attach\\xe9 m\\xe9dia\",value:5e3},{label:\"Salle lounge VIP\",value:5e3},{label:\"Barri\\xe8res m\\xe9talliques de s\\xe9curit\\xe9\",value:5e3},{label:\"G\\xe9n\\xe9ratrices de secours\",value:5100},{label:\"Honoraires comptables\",value:5100},{label:\"H\\xe9bergement artistes h\\xf4tels\",value:5500},{label:\"Publicit\\xe9 r\\xe9seaux sociaux\",value:6e3},{label:\"Contr\\xf4le d’acc\\xe8s tourniquets scanners QR\",value:6e3},{label:\"Honoraires techniciens vid\\xe9o\",value:6e3}]},{group:5,items:[{label:\"Application mobile festival\",value:6e3},{label:\"Vid\\xe9aste officiel\",value:6e3},{label:\"Afterparty pour artistes\",value:6e3},{label:\"Spot TV locale\",value:6e3},{label:\"D\\xe9veloppement r\\xe9alit\\xe9 augment\\xe9e mobile\",value:6e3},{label:\"Stations VR AR\",value:6800},{label:\"Identit\\xe9 visuelle du festival\",value:6800},{label:\"Ing\\xe9nieurs syst\\xe8mes\",value:7e3},{label:\"Location serveurs pour rendu temps r\\xe9el\",value:8500},{label:\"Panneaux LED signal\\xe9tique\",value:8500},{label:\"Ing\\xe9nierie lumi\\xe8re interactive\",value:10200},{label:\"Ing\\xe9nierie sonore immersive\",value:10200},{label:\"\\xc9quipe de production ex\\xe9cutive\",value:12e3},{label:\"Location du site principal par jour\",value:12750},{label:\"S\\xe9curit\\xe9 priv\\xe9e agents\",value:12750},{label:\"Location projecteurs mapping\",value:17e3},{label:\"Location \\xe9crans LED\",value:21250}]}];// --- end group data ---\nconst initializeP5Sketch=useCallback(()=>{p5.disableFriendlyErrors=true;if(p5InstanceRef.current){p5InstanceRef.current.remove();}const container=containerRef.current;if(!container)return;const rect=container.getBoundingClientRect();const initialWidth=Math.max(200,Math.floor(rect.width));const initialHeight=Math.max(200,Math.floor(rect.height));lastResizeRef.current={width:initialWidth,height:initialHeight};const sketch=p=>{let lastFrame=0;let startImg=null;// Store the bounds of the \"press space to start\" text for touch detection\nlet startTextBounds={x:0,y:0,width:0,height:0};p.preload=()=>{if(props.startScreenImage){startImg=p.loadImage(props.startScreenImage);}};p.setup=()=>{const canvas=p.createCanvas(initialWidth,initialHeight,p.P2D);canvas.parent(containerRef.current);canvas.elt.tabIndex=0;canvas.elt.focus();p.textFont(props.fontFamily||\"Arial\");gameStateRef.current.brickBuffer=p.createGraphics(initialWidth,initialHeight);gameStateRef.current.brickBuffer.textFont(props.fontFamily||\"Arial\");gameStateRef.current.startImage=startImg;initializeGame(initialWidth,initialHeight,p);lastFrame=p.millis();setCanvasSize({width:initialWidth,height:initialHeight});};p.draw=()=>{const now=p.millis();const delta=Math.min(50,now-lastFrame);lastFrame=now;gameLoop(p,delta,p.width,p.height);};p.keyPressed=()=>{const gameState=gameStateRef.current;if(p.keyCode===32){if(gameState.gameStatus===\"start\"){gameState.currentLevel=1;gameState.lives=3;startLevelIntro(p);}else if(gameState.gameStatus===\"playing\"||gameState.gameStatus===\"paused\"){gameState.gameStatus=gameState.gameStatus===\"playing\"?\"paused\":\"playing\";}else if(gameState.gameStatus===\"levelIntro\"){}else if(gameState.gameStatus===\"levelComplete\"){}else if(gameState.gameStatus===\"gameOver\"){}}if(p.keyCode===p.LEFT_ARROW||p.keyCode===37){gameStateRef.current.keys.ArrowLeft=true;}if(p.keyCode===p.RIGHT_ARROW||p.keyCode===39){gameStateRef.current.keys.ArrowRight=true;}return false;};p.keyReleased=()=>{if(p.keyCode===p.LEFT_ARROW||p.keyCode===37){gameStateRef.current.keys.ArrowLeft=false;}if(p.keyCode===p.RIGHT_ARROW||p.keyCode===39){gameStateRef.current.keys.ArrowRight=false;}return false;};// Add touch/mouse support\n// Replace your current mousePressed function with this simplified version:\np.mousePressed=()=>{const gameState=gameStateRef.current;// ADD THIS: Ensure canvas has focus for keyboard events\nif(p.canvas){p.canvas.focus();}// Handle touch on start screen - ANY touch starts the game\nif(gameState.gameStatus===\"start\"){gameState.currentLevel=1;gameState.lives=3;startLevelIntro(p);return false;}// For paused state, allow touching to unpause\nif(gameState.gameStatus===\"paused\"){gameState.gameStatus=\"playing\";}return false;};// Add touch event handlers for better mobile support\np.touchStarted=()=>{// Prevent default touch behavior\nreturn p.mousePressed();};};p5InstanceRef.current=new window.p5(sketch);},[props.startScreenImage,props.fontFamily]);// Consolidated useEffect for data fetching and P5.js initialization\nuseEffect(()=>{async function fetchDonationsAndInitialize(){try{const res=await fetch(\"https://store.zapier.com/api/records?secret=b380e30e-d3d2-4b09-b110-24576f27d11b\");const data=await res.json();if(data.total_donations){setDonationValue(data.total_donations);}}catch(err){console.error(\"Failed to fetch donations:\",err);}// After attempting to fetch data (even if it fails), initialize the sketch\nif(!window.p5){const script=document.createElement(\"script\");script.src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js\";script.onload=()=>initializeP5Sketch();document.head.appendChild(script);}else{initializeP5Sketch();}}fetchDonationsAndInitialize();// Cleanup function\nreturn()=>{if(resizeTimeoutRef.current){clearTimeout(resizeTimeoutRef.current);}if(p5InstanceRef.current){p5InstanceRef.current.remove();p5InstanceRef.current=null;}const tlist=gameStateRef.current.timers||[];tlist.forEach(id=>clearTimeout(id));gameStateRef.current.timers=[];if(gameStateRef.current.brickBuffer){gameStateRef.current.brickBuffer.remove();gameStateRef.current.brickBuffer=null;}};},[initializeP5Sketch]);// A single effect to re-initialize the game when donation value changes\nconst clearAllTimers=()=>{const tlist=gameStateRef.current.timers||[];tlist.forEach(id=>clearTimeout(id));gameStateRef.current.timers=[];};const pushTimer=id=>{gameStateRef.current.timers.push(id);};const initializeGame=(width,height,p,ballValue=props.ballValue)=>{const gameState=gameStateRef.current;const paddedWidth=width-PADDING*2;const BRICK_WIDTH=(paddedWidth-(COLS-1)*BRICK_SPACING)/COLS;const BRICK_HEIGHT=30;const PADDLE_WIDTH=width*PADDLE_WIDTH_RATIO;const levelIndex=Math.max(1,gameState.currentLevel||1);const groupObj=gameState.groups&&gameState.groups[levelIndex-1]||gameState.groups[0]||groups[0];const items=groupObj?groupObj.items:groups[0].items;// Initialize keys if not already done\nif(!gameState.keys){gameState.keys={ArrowLeft:false,ArrowRight:false};}gameState.bricks=[];gameState.activeBricks=[];let dataIndex=0;for(let row=0;row<ROWS;row++){for(let col=0;col<COLS;col++){const x=col*(BRICK_WIDTH+BRICK_SPACING)+PADDING;const y=row*(BRICK_HEIGHT+BRICK_SPACING)+PADDING+10;const brickInfo=items[dataIndex%items.length];dataIndex++;const formattedValue=`$${brickInfo.value.toLocaleString()}`;const brick={x,y,width:BRICK_WIDTH,height:BRICK_HEIGHT,health:brickInfo.value,maxHealth:brickInfo.value,label:brickInfo.label,value:brickInfo.value,formattedValue,active:true};gameState.bricks.push(brick);gameState.activeBricks.push(brick);}}gameState.ball={x:width/2,y:height/2,speedX:gameStateRef.current.ballSpeed,speedY:-gameStateRef.current.ballSpeed,value:ballValue,formattedValue:`$${ballValue.toLocaleString()}`};gameState.paddle={x:width/2-PADDLE_WIDTH/2,y:height-PADDLE_HEIGHT-PADDING-10,width:PADDLE_WIDTH,height:PADDLE_HEIGHT,speed:10};gameState.destroyedBricks=[];gameState.explosions=[];gameState.initialized=true;gameState.brickBufferNeedsUpdate=true;gameState.animationTime=0;};const updateBrickBuffer=()=>{const gameState=gameStateRef.current;const{brickBuffer}=gameState;if(!brickBuffer||!gameState.brickBufferNeedsUpdate)return;brickBuffer.clear();for(const brick of gameState.bricks){if(brick.active){drawBrick(brickBuffer,brick);}}gameState.brickBufferNeedsUpdate=false;};const drawBrick=(renderer,brick)=>{renderer.fill(0);renderer.stroke(255);renderer.strokeWeight(1);renderer.rect(brick.x,brick.y,brick.width,brick.height);const healthPercent=brick.health/brick.maxHealth;if(healthPercent<1){const lineX=brick.x+brick.width-1-(brick.width-2)*(1-healthPercent);renderer.stroke(255);renderer.line(lineX,brick.y+1,lineX,brick.y+brick.height-1);}renderer.fill(255);renderer.noStroke();renderer.textAlign(renderer.CENTER,renderer.CENTER);renderer.textSize(props.brickTextFontSize||15);renderer.textFont(props.fontFamily);renderer.text(brick.formattedValue,brick.x+brick.width/2,brick.y+brick.height/2);};const createExplosionAt=(centerX,centerY,chars,p)=>{const gameState=gameStateRef.current;const valueStr=`${chars}`;const rings=[];const totalDuration=4e3;const baseRadius=2;const radiusIncrement=4;const minCharCount=4;for(let i=0;i<valueStr.length;i++){const ringIndex=i;const char=valueStr[valueStr.length-1-i];const charCount=Math.max(minCharCount,minCharCount+ringIndex*2);const ringRadius=baseRadius+ringIndex*radiusIncrement;const rotationDirection=ringIndex%2===0?1:-1;const particles=new Array(charCount);for(let j=0;j<charCount;j++){const angle=j/charCount*Math.PI*2;particles[j]={char,x:centerX,y:centerY,vx:Math.cos(angle)*ringRadius/(totalDuration/1e3*explosionSpeedFactor),vy:Math.sin(angle)*ringRadius/(totalDuration/1e3*explosionSpeedFactor),life:totalDuration,maxLife:totalDuration,initialAngle:angle,ringRadius:ringRadius,centerX:centerX,centerY:centerY,rotationDirection:rotationDirection,currentRotation:0};}rings.push({particles,rotationDirection});}gameState.explosions.push({rings});};const updateExplosions=delta=>{const gameState=gameStateRef.current;let i=0;while(i<gameState.explosions.length){const ex=gameState.explosions[i];let hasActive=false;for(const ring of ex.rings){let k=0;while(k<ring.particles.length){const p=ring.particles[k];p.life-=delta;if(p.life<=0){ring.particles.splice(k,1);continue;}p.currentRotation+=ROTATION_SPEED*delta*p.rotationDirection;p.vy+=PARTICLE_GRAVITY*(delta/16);p.x+=p.vx*(delta/16);p.y+=p.vy*(delta/16);p.centerX+=p.vx*(delta/16);p.centerY+=p.vy*(delta/16);const rotatedAngle=p.initialAngle+p.currentRotation;const rotatedX=p.centerX+Math.cos(rotatedAngle)*p.ringRadius;const rotatedY=p.centerY+Math.sin(rotatedAngle)*p.ringRadius;p.x=rotatedX;p.y=rotatedY;hasActive=true;k++;}}if(!hasActive){gameState.explosions.splice(i,1);}else{i++;}}};const drawExplosions=p=>{const gameState=gameStateRef.current;if(!gameState.explosions.length)return;p.textAlign(p.CENTER,p.CENTER);p.textSize(props.explosionTextFontSize);for(const ex of gameState.explosions){for(const ring of ex.rings){for(const particle of ring.particles){const alpha=Math.max(0,particle.life/particle.maxLife)*255;p.fill(255,255,255,alpha);p.text(particle.char,particle.x,particle.y);}}}};const drawBall=(p,ball)=>{p.fill(255);p.noStroke();p.textAlign(p.CENTER,p.CENTER);p.textSize(props.ballTextFontSize||12);p.textFont(props.fontFamily);p.text(ball.formattedValue,ball.x,ball.y);};const drawPaddle=(p,paddle)=>{p.fill(255);p.noStroke();p.rect(paddle.x,paddle.y,paddle.width,paddle.height);};const drawDestroyedBricksList=(p,width,height)=>{const{destroyedBricks}=gameStateRef.current;const fontSize=props.destroyedBricksListFontSize||10;const lineHeight=fontSize*1.1;p.textAlign(p.LEFT,p.BOTTOM);p.textSize(fontSize);p.fill(255);p.noStroke();for(let i=0;i<destroyedBricks.length;i++){const brick=destroyedBricks[i];const x=PADDING;const y=height-10-PADDING-i*lineHeight;p.text(`${brick.label} ${brick.formattedValue}`,x,y);}};const drawTextWithSpacing=(p,text,x,y,letterSpacing=0)=>{if(letterSpacing===0){p.text(text,x,y);return;}let totalWidth=0;for(let i=0;i<text.length;i++){totalWidth+=p.textWidth(text[i]);if(i<text.length-1)totalWidth+=letterSpacing;}let currentX=x-totalWidth/2;p.textAlign(p.LEFT,p.CENTER);for(let i=0;i<text.length;i++){const char=text[i];p.text(char,currentX,y);currentX+=p.textWidth(char)+letterSpacing;}p.textAlign(p.CENTER,p.CENTER);};const drawStartScreen=(p,width,height)=>{const gameState=gameStateRef.current;gameState.animationTime+=16;const{startImage}=gameStateRef.current;const animationCycle=3e3;const animationProgress=gameState.animationTime%animationCycle/animationCycle;const yoyoOffset=Math.sin(animationProgress*Math.PI*2)*5;p.background(0);p.fill(255);p.noStroke();p.textFont(props.fontFamily);p.textAlign(p.CENTER,p.CENTER);p.textSize(12);// Draw the touchable start text with a subtle highlight\nconst startTextY=80+yoyoOffset;// Add a subtle background for better touch target visibility on mobile\np.push();p.fill(255,255,255,0)// Very subtle white background\n;p.noStroke();const textWidth=p.textWidth(\"TOUCHEZ L'ECRAN POUR COMMENCER\");const padding=20;p.rect(width/2-textWidth/2-padding,startTextY-15,textWidth+padding*2,30,5// Rounded corners\n);p.pop();// Draw the start text\ndrawTextWithSpacing(p,\"TOUCHEZ L'ECRAN POUR COMMENCER\",width/2,startTextY,props.startScreenTopTextSpacing||0);p.fill(255);p.textFont(props.fontFamilyTY);p.textSize(16);drawTextWithSpacing(p,\"Vous avez d\\xe9bloqu\\xe9 Pong$ et vous\",width/2,height-120,props.startScreenBottomTextSpacing||0);drawTextWithSpacing(p,\"pouvez maintenant d\\xe9truire nos frais!\",width/2,height-102,props.startScreenBottomTextSpacing||0);if(startImage){const imgWidth=110;const imgHeight=170;p.image(startImage,width/2-imgWidth/2,height/2-imgHeight/2,imgWidth,imgHeight);}};const drawCenteredStatus=(p,width,height,lines,topSpacing=0)=>{p.fill(255);p.noStroke();p.textFont(props.fontFamily);p.textAlign(p.CENTER,p.CENTER);p.textSize(12);const baseY=height/2+topSpacing;for(let i=0;i<lines.length;i++){const y=baseY+i*28;drawTextWithSpacing(p,lines[i],width/2,y,props.startScreenTopTextSpacing||0);}};const updateBall=(width,height)=>{const{ball}=gameStateRef.current;const p=p5InstanceRef.current;if(!p)return{width:50,height:12};if(!ball.cachedWidth||ball.lastFormattedValue!==ball.formattedValue){p.textSize(props.ballTextFontSize||12);ball.cachedWidth=p.textWidth(ball.formattedValue);ball.lastFormattedValue=ball.formattedValue;}const ballWidth=ball.cachedWidth;const ballHeight=props.ballTextFontSize||12;ball.x+=ball.speedX;ball.y+=ball.speedY;const leftBound=ballWidth/2;const rightBound=width-ballWidth/2;const topBound=ballHeight/2;if(ball.x<=leftBound||ball.x>=rightBound){ball.speedX*=-1;if(ball.x<leftBound)ball.x=leftBound;if(ball.x>rightBound)ball.x=rightBound;}if(ball.y<=topBound)ball.speedY*=-1;if(ball.y>height){handleBallMiss(width,height);}return{width:ballWidth,height:ballHeight};};const updatePaddle=width=>{const gameState=gameStateRef.current;const{paddle}=gameState;const p=p5InstanceRef.current;const leftBound=0;const rightBound=width-paddle.width;// Keyboard controls\nif(gameState.keys.ArrowLeft&&paddle.x>leftBound){paddle.x=Math.max(leftBound,paddle.x-paddle.speed);}if(gameState.keys.ArrowRight&&paddle.x<rightBound){paddle.x=Math.min(rightBound,paddle.x+paddle.speed);}// Touch controls - move paddle towards touch/mouse position\nif(p&&p.mouseIsPressed&&gameState.gameStatus===\"playing\"){const targetX=p.mouseX-paddle.width/2;const clampedX=Math.max(leftBound,Math.min(rightBound,targetX));// Smooth movement towards touch position\nconst diff=clampedX-paddle.x;const moveSpeed=Math.min(paddle.speed,Math.abs(diff));paddle.x+=Math.sign(diff)*moveSpeed;}};const checkCollisions=ballDimensions=>{const gameState=gameStateRef.current;const{ball,paddle,activeBricks}=gameState;const ballLeft=ball.x-ballDimensions.width/2;const ballRight=ball.x+ballDimensions.width/2;const ballTop=ball.y-ballDimensions.height/2;const ballBottom=ball.y+ballDimensions.height/2;if(ballBottom>paddle.y&&ballRight>paddle.x&&ballLeft<paddle.x+paddle.width&&ball.speedY>0){ball.speedY*=-1;const hitPos=(ball.x-paddle.x)/paddle.width;ball.speedX=(hitPos-.5)*6;}for(let i=0;i<activeBricks.length;i++){const brick=activeBricks[i];if(ballRight>brick.x&&ballLeft<brick.x+brick.width&&ballBottom>brick.y&&ballTop<brick.y+brick.height){brick.health-=ball.value;if(brick.health<=0){brick.active=false;gameState.destroyedBricks.push({label:brick.label,value:brick.value,formattedValue:`$${brick.value.toLocaleString()}`});const p=p5InstanceRef.current;createExplosionAt(brick.x+brick.width/2,brick.y+brick.height/2,`${brick.maxHealth.toLocaleString()}$`,p);const last=activeBricks.length-1;if(i!==last)activeBricks[i]=activeBricks[last];activeBricks.pop();i--;gameState.brickBufferNeedsUpdate=true;}else{brick.formattedValue=`$${brick.health.toLocaleString()}`;gameState.brickBufferNeedsUpdate=true;}ball.speedY*=-1;break;}}};const resetBall=(width,height)=>{const gameState=gameStateRef.current;const{ball,paddle}=gameState;const speed=gameState.ballSpeed;// Position ball on paddle\nball.x=paddle.x+paddle.width/2;ball.y=paddle.y-10// Position slightly above paddle\n;// Set random direction (upward)\nconst randomX=(Math.random()-.5)*2// Random between -1 and 1\n;const randomY=-1// Always upward\n;const length=Math.sqrt(randomX*randomX+randomY*randomY);const normalizedX=randomX/length;const normalizedY=randomY/length;ball.speedX=normalizedX*speed;ball.speedY=normalizedY*speed;// Reset cached values\nball.cachedWidth=null;ball.lastFormattedValue=null;// ✅ prefer donation value if available\nball.value=donationValue||props.ballValue;ball.formattedValue=`$${ball.value.toLocaleString()}`;};// Fixed handleBallMiss function\nconst handleBallMiss=(width,height)=>{const gameState=gameStateRef.current;// Prevent multiple simultaneous calls\nif(gameState.inBallMissTransition)return;gameState.inBallMissTransition=true;const p=p5InstanceRef.current;const ball=gameState.ball;// Create explosion at ball position\ncreateExplosionAt(ball.x,height-40,ball.formattedValue,p);// Decrease lives\ngameState.lives=Math.max(0,(gameState.lives||3)-1);if(gameState.lives<=0){// Game over\ngameState.gameStatus=\"gameOver\";const id=setTimeout(()=>{gameState.inBallMissTransition=false// Clear transition flag\n;resetToStart();},5e3);pushTimer(id);}else{// Reset ball after a delay\ngameState.gameStatus=\"lifeLost\";const id=setTimeout(()=>{resetBall(width,height);gameState.gameStatus=\"playing\";gameState.inBallMissTransition=false// Clear transition flag\n;},2e3);pushTimer(id);}};const startLevelIntro=(p,nextLevel)=>{const gameState=gameStateRef.current;clearAllTimers();if(typeof nextLevel===\"number\")gameState.currentLevel=nextLevel;const w=p.width;const h=p.height;// Pass the current donationValue\ninitializeGame(w,h,p,donationValue);gameState.gameStatus=\"levelIntro\";const id=setTimeout(()=>{gameState.gameStatus=\"playing\";resetBall(w,h);},3e3);pushTimer(id);};const handleLevelComplete=p=>{const gameState=gameStateRef.current;if(gameState.handlingLevelComplete)return;gameState.handlingLevelComplete=true;gameState.gameStatus=\"levelComplete\";const width=p.width;const height=p.height;const isLast=gameState.currentLevel>=(gameState.groups.length||groups.length);if(isLast){const total=15;for(let i=0;i<total;i++){const id=setTimeout(()=>{const cx=Math.random()*width;const cy=Math.random()*height;createExplosionAt(cx,cy,\"$$$$$\",p);},i*200);pushTimer(id);}const id2=setTimeout(()=>{resetToStart();},5e3);pushTimer(id2);}else{const randCount=5+Math.floor(Math.random()*4);for(let i=0;i<randCount;i++){const id=setTimeout(()=>{const cx=Math.random()*width;const cy=Math.random()*height;createExplosionAt(cx,cy,\"$$$$$\",p);},i*200);pushTimer(id);}const id2=setTimeout(()=>{gameState.currentLevel+=1;gameState.handlingLevelComplete=false;startLevelIntro(p,gameState.currentLevel);},5e3);pushTimer(id2);}};// Enhanced resetToStart function to ensure clean state\nconst resetToStart=()=>{clearAllTimers();const gameState=gameStateRef.current;// Reset all game state\ngameState.gameStatus=\"start\";gameState.currentLevel=1;gameState.lives=3;gameState.explosions=[];gameState.destroyedBricks=[];gameState.bricks=[];gameState.activeBricks=[];gameState.initialized=false;gameState.inBallMissTransition=false// Clear any transition flags\n;gameState.handlingLevelComplete=false// Clear level complete flag\n;const p=p5InstanceRef.current;if(p){initializeGame(p.width,p.height,p,donationValue);}};const gameLoop=(p,delta,width,height)=>{if(!gameStateRef.current.initialized)return;p.push();p.blendMode(p.REPLACE);p.fill(0,0,0,255);p.rect(0,0,width,height);p.blendMode(p.NORMAL);p.pop();if(props.backgroundColor!==\"transparent\"){p.background(props.backgroundColor);}const gameState=gameStateRef.current;updateExplosions(delta);updateBrickBuffer();if(gameState.brickBuffer){p.image(gameState.brickBuffer,0,0);}drawExplosions(p);p.push();p.textFont(props.fontFamily);p.textSize(12);p.fill(255);p.noStroke();p.textAlign(p.LEFT,p.TOP);p.text(`LIVES: ${gameState.lives}`,20,10);p.pop();if(gameState.gameStatus===\"playing\"){const ballMetrics=updateBall(width,height);updatePaddle(width);checkCollisions(ballMetrics);drawBall(p,gameState.ball);drawPaddle(p,gameState.paddle);drawDestroyedBricksList(p,width,height);if(gameState.activeBricks.length===0&&!gameState.handlingLevelComplete){handleLevelComplete(p);}}else{if(gameState.gameStatus===\"start\"){drawStartScreen(p,width,height);}else if(gameState.gameStatus===\"levelIntro\"){drawCenteredStatus(p,width,height,[`LEVEL ${gameState.currentLevel}`]);}else if(gameState.gameStatus===\"paused\"){drawBall(p,gameState.ball);drawPaddle(p,gameState.paddle);drawDestroyedBricksList(p,width,height);drawCenteredStatus(p,width,height,[\"PAUSED\"]);}else if(gameState.gameStatus===\"lifeLost\"){drawBall(p,gameState.ball);drawPaddle(p,gameState.paddle);drawDestroyedBricksList(p,width,height);}else if(gameState.gameStatus===\"levelComplete\"){drawCenteredStatus(p,width,height,[\"LEVEL COMPLETE\"]);}else if(gameState.gameStatus===\"gameOver\"){p.textFont(props.fontFamilyTY);p.textSize(20);drawCenteredStatus(p,width,height,[\"GAME OVER\"]);}}};const debouncedResize=useCallback(()=>{if(resizeTimeoutRef.current){clearTimeout(resizeTimeoutRef.current);}resizeTimeoutRef.current=setTimeout(()=>{const container=containerRef.current;if(container&&p5InstanceRef.current){const rect=container.getBoundingClientRect();const newWidth=Math.max(200,Math.floor(rect.width));const newHeight=Math.max(200,Math.floor(rect.height));const widthDiff=Math.abs(newWidth-lastResizeRef.current.width);const heightDiff=Math.abs(newHeight-lastResizeRef.current.height);if(widthDiff>5||heightDiff>5){lastResizeRef.current={width:newWidth,height:newHeight};setCanvasSize({width:newWidth,height:newHeight});p5InstanceRef.current.resizeCanvas(newWidth,newHeight);if(gameStateRef.current.brickBuffer){gameStateRef.current.brickBuffer.remove();}gameStateRef.current.brickBuffer=p5InstanceRef.current.createGraphics(newWidth,newHeight);gameStateRef.current.brickBuffer.textFont(props.fontFamily||\"Arial\");gameStateRef.current.brickBufferNeedsUpdate=true;initializeGame(newWidth,newHeight,p5InstanceRef.current,donationValue);}}},RESIZE_DEBOUNCE_MS);},[props.fontFamily]);useEffect(()=>{gameStateRef.current.groups=groups;},[]);// Add touch/swipe controls for mobile\nuseEffect(()=>{const container=containerRef.current;if(!container)return;let touchStartX=null;const handleTouchStart=e=>{if(e.touches.length===1){touchStartX=e.touches[0].clientX;// Ensure canvas keeps focus\nconst canvas=container.querySelector(\"canvas\");if(canvas){canvas.focus();}}};const handleTouchMove=e=>{if(!touchStartX||!p5InstanceRef.current)return;e.preventDefault()// Prevent scrolling\n;const currentX=e.touches[0].clientX;const deltaX=currentX-touchStartX;const gameState=gameStateRef.current;const{paddle}=gameState;if(!paddle||gameState.gameStatus!==\"playing\")return;// Move paddle relative to finger movement\nconst sensitivity=.7// Adjust this value\n;paddle.x=Math.min(p5InstanceRef.current.width-paddle.width,Math.max(0,paddle.x+deltaX*sensitivity));touchStartX=currentX;};const handleTouchEnd=()=>{touchStartX=null;};// Use more specific event options\ncontainer.addEventListener(\"touchstart\",handleTouchStart,{passive:false});container.addEventListener(\"touchmove\",handleTouchMove,{passive:false});container.addEventListener(\"touchend\",handleTouchEnd,{passive:true});return()=>{container.removeEventListener(\"touchstart\",handleTouchStart);container.removeEventListener(\"touchmove\",handleTouchMove);container.removeEventListener(\"touchend\",handleTouchEnd);};},[]);useEffect(()=>{const handleResize=()=>debouncedResize();window.addEventListener(\"resize\",handleResize);const ro=new ResizeObserver(handleResize);if(containerRef.current){ro.observe(containerRef.current);}return()=>{window.removeEventListener(\"resize\",handleResize);ro.disconnect();if(resizeTimeoutRef.current){clearTimeout(resizeTimeoutRef.current);}};},[debouncedResize]);useEffect(()=>{debouncedResize();},[debouncedResize]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",background:\"transparent\",padding:\"40px\",overflow:\"hidden\"}});}addPropertyControls(BreakoutGame,{startScreenImage:{type:ControlType.Image,title:\"Start Image\"},startScreenFontSize:{type:ControlType.Number,title:\"Start Screen Font Size\",defaultValue:16,min:8,max:40,step:1,unit:\"px\"},backgroundColor:{type:ControlType.Color,title:\"Background Color\",defaultValue:\"transparent\"},showBorder:{type:ControlType.Boolean,title:\"Show Border\",defaultValue:false},borderRadius:{type:ControlType.Number,title:\"Border Radius\",defaultValue:0,min:0,max:50,step:1},fontFamily:{type:ControlType.String,title:\"Font Family\",defaultValue:\"Arial\"},fontFamilyTY:{type:ControlType.String,title:\"Font Family\",defaultValue:\"Arial\"},destroyedBricksListFontSize:{type:ControlType.Number,title:\"Destroyed List Font Size\",defaultValue:10,min:6,max:30,step:1,unit:\"px\"},destroyedBricksListLineHeight:{type:ControlType.Number,title:\"Destroyed List Line Height\",defaultValue:15,min:10,max:40,step:1,unit:\"px\"},brickTextFontSize:{type:ControlType.Number,title:\"Brick Text Font Size\",defaultValue:15,min:8,max:40,step:1,unit:\"px\"},explosionTextFontSize:{type:ControlType.Number,title:\"Explosion Text Font Size\",defaultValue:15,min:8,max:40,step:1,unit:\"px\"},particleTextFontSize:{type:ControlType.Number,title:\"Particle Text Font Size\",defaultValue:12,min:6,max:30,step:1,unit:\"px\"},ballTextFontSize:{type:ControlType.Number,title:\"Ball Text Font Size\",defaultValue:12,min:6,max:30,step:1,unit:\"px\"},ballValue:{type:ControlType.Number,title:\"Ball Value\",defaultValue:1095},startScreenTopTextSpacing:{type:ControlType.Number,title:\"Top Text Letter Spacing\",defaultValue:0,min:-5,max:20,step:.5,unit:\"px\"},startScreenBottomTextSpacing:{type:ControlType.Number,title:\"Bottom Text Letter Spacing\",defaultValue:0,min:-5,max:20,step:.5,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BreakoutGame\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Breakout_CANVAS_MOB.map","import{jsx as _jsx}from\"react/jsx-runtime\";// --- Exported Overrides for Framer UI ---\n/**\n * @framerDescription Applies `height: 100dvh` (Dynamic Viewport Height) to the element. Adapts to dynamic browser UI changes.\n * @param Component The component to wrap.\n * @returns A new component with the override applied.\n */export function withDynamicViewportHeight(Component){return props=>{// Combine the original styles with the new height\nconst combinedStyle={...props.style,height:\"100dvh\"};// Render the original component with modified style\nreturn /*#__PURE__*/_jsx(Component,{...props,style:combinedStyle});};}/**\n * @framerDescription Applies `height: 100lvh` (Large Viewport Height) to the element. Uses the largest possible viewport size.\n * @param Component The component to wrap.\n * @returns A new component with the override applied.\n */export function withLargeViewportHeight(Component){return props=>{// Combine the original styles with the new height\nconst combinedStyle={...props.style,height:\"100lvh\"};// Render the original component with modified style\nreturn /*#__PURE__*/_jsx(Component,{...props,style:combinedStyle});};}/**\n * @framerDescription Applies `height: 100svh` (Small Viewport Height) to the element. Uses the smallest possible viewport size, accounting for browser UI.\n * @param Component The component to wrap.\n * @returns A new component with the override applied.\n */export function withSmallViewportHeight(Component){return props=>{// Combine the original styles with the new height\nconst combinedStyle={...props.style,height:\"100svh\"};// Render the original component with modified style\nreturn /*#__PURE__*/_jsx(Component,{...props,style:combinedStyle});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withLargeViewportHeight\":{\"type\":\"reactHoc\",\"name\":\"withLargeViewportHeight\",\"annotations\":{\"framerDescription\":\"Applies `height: 100lvh` (Large Viewport Height) to the element. Uses the largest possible viewport size.\",\"framerContractVersion\":\"1\"}},\"withDynamicViewportHeight\":{\"type\":\"reactHoc\",\"name\":\"withDynamicViewportHeight\",\"annotations\":{\"framerDescription\":\"Applies `height: 100dvh` (Dynamic Viewport Height) to the element. Adapts to dynamic browser UI changes.\",\"framerContractVersion\":\"1\"}},\"withSmallViewportHeight\":{\"type\":\"reactHoc\",\"name\":\"withSmallViewportHeight\",\"annotations\":{\"framerDescription\":\"Applies `height: 100svh` (Small Viewport Height) to the element. Uses the smallest possible viewport size, accounting for browser UI.\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MobileVH.map"],"mappings":"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"}