diff --git a/public/assets/canvas4.png b/public/assets/canvas4.png index 86c4967..2a1c263 100644 Binary files a/public/assets/canvas4.png and b/public/assets/canvas4.png differ diff --git a/public/assets/stand2.png b/public/assets/stand2.png new file mode 100644 index 0000000..d009ddf Binary files /dev/null and b/public/assets/stand2.png differ diff --git a/src/pages/guided-tracing/a.astro b/src/pages/guided-tracing/a.astro index 36f29bc..7c7acc6 100644 --- a/src/pages/guided-tracing/a.astro +++ b/src/pages/guided-tracing/a.astro @@ -44,8 +44,9 @@ import Layout from "../../layouts/Layout.astro"; cloudeSize = 200; cloudHeight = 340; canvasScale = 0.14 - canvasHeight = - 28; + canvasHeight = 35; letterHeight = 70; + letterScale = 1; backgroundScale = 0.8; sunScale = 0.1; sunScalePlus = 0.15; @@ -60,8 +61,9 @@ import Layout from "../../layouts/Layout.astro"; cloudeSize = 500; cloudHeight = 250; canvasScale = 0.195; - canvasHeight = - 60; + canvasHeight = 20; letterHeight = 50; + letterScale = 1; backgroundScale = 1; sunScale = 0.2; sunScalePlus = 0.25; @@ -73,31 +75,28 @@ import Layout from "../../layouts/Layout.astro"; parrotHeight = 245; animatedAHeight = 20; } - // let hideButton; - function preload() { this.load.video('animatedA', '/assets/animated-letter/a.mp4'); this.load.svg('letterA', '/assets/capital-letter/a.svg'); this.load.svg('layer1', '/assets/capital-letter/a_l1.svg'); this.load.svg('layer2', '/assets/capital-letter/a_l2.svg'); this.load.svg('layer3', '/assets/capital-letter/a_l3.svg'); - this.load.audio('slantLeft', '/assets/audio/slant-left.mp3'); - this.load.audio('slantRight', '/assets/audio/slant-right.mp3'); - this.load.audio('slide', '/assets/audio/slide.mp3'); + this.load.audio('audioOne', '/assets/audio/slant-left.mp3'); + this.load.audio('audioTwo', '/assets/audio/slant-right.mp3'); + this.load.audio('audioThree', '/assets/audio/slide.mp3'); this.load.image('topLogo', '/assets/top_logo.png'); this.load.svg('succesImage', '/assets/svg/tick.svg'); this.load.svg('hintImage', '/assets/svg/hint.svg'); this.load.svg('handPointer', '/assets/svg/hand.svg'); - // this.load.image('backgroundImage', '/assets/backgroundImage2.png'); this.load.image('backgroundImage', '/assets/bg6.png'); this.load.image('cloud', '/assets/cloud.png'); this.load.image('canvas', '/assets/canvas4.png'); this.load.image('parrot', '/assets/parrot.png'); this.load.image('sun', '/assets/sun.png'); this.load.image('bgMobile', '/assets/bgMobile.png'); + this.load.image('canvasStand', '/assets/stand2.png'); } -// bgMobile.png function create() { this.add.image(customWidth / 2 * 1.6 - 0.5, 50, 'topLogo'); this.add.text(customWidth / 10, 20, "Letter : A", { font: '700 40px quicksand', fill: '#05b3a4', }); @@ -143,12 +142,18 @@ import Layout from "../../layouts/Layout.astro"; repeat: -1 // Repeat indefinitely }); const backgroundImages = this.add.image(customWidth / 2, customHeight /2, 'backgroundImage').setDepth(-2).setScale(backgroundScale); - this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'letterA').setAlpha(0.2).setDepth(0.5); - const firstScreen = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'letterA').setDepth(2); - // const firstScreen = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'animatedA').setDepth(2); - this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'letterA').setAlpha(0.2).setDepth(0.5).setScale(letterScale); + const firstScreen = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'letterA').setDepth(2).setScale(letterScale); + // const firstScreen = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'animatedA').setDepth(2); canvasStand firstScreen.setVisible(false); - + // this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + const canvas = this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + // Set up a mask for the drawing area based on the canvas dimensions + const maskGraphics = this.make.graphics() + maskGraphics.fillRect(customWidth / 2 - (canvas.width * canvasScale) / 2, customHeight / 2 + canvasHeight - (canvas.height * canvasScale) / 2, canvas.width * canvasScale, canvas.height * canvasScale); + const mask = maskGraphics.createGeometryMask(); + + let hideButton = this.add.text(customWidth / 2 - 65, customHeight / 1.1, "Let`s Do", { font: '900 24px quicksand', @@ -170,9 +175,6 @@ import Layout from "../../layouts/Layout.astro"; hideButton.setVisible(false); // Hide the "Hide" button demoButton.setVisible(true); // Show the "Demo" button graphics.setVisible(true); - handPointerLeft.setVisible(false); - handPointerRight.setVisible(false); - handPointeSlide.setVisible(false); animatedLetter.setVisible(false); }); hideButton.setVisible(false); @@ -196,9 +198,6 @@ import Layout from "../../layouts/Layout.astro"; firstScreen.setVisible(true); demoButton.setVisible(false); // Hide the "Demo" button hideButton.setVisible(true); // Show the "Hide" button - handPointerLeft.setVisible(false); - handPointerRight.setVisible(false); - handPointeSlide.setVisible(false); animatedLetter.setVisible(true); }); @@ -223,30 +222,30 @@ import Layout from "../../layouts/Layout.astro"; let textX, textY; - firstLayer = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'layer1'); + firstLayer = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'layer1').setScale(letterScale); textX = isMobile ? customWidth / 4 : customWidth * 0.75; textY = isMobile ? customHeight / 5 : customHeight / 2; const firstTextLayer = this.add.text(textX, textY, '1. Slant Left',{ font: '700 40px quicksand', fill: '#05b3a4'}); - const slantLeftAudio = this.sound.add('slantLeft'); - slantLeftAudio.play(); + const audioOneAudio = this.sound.add('audioOne'); + audioOneAudio.play(); firstLayer.setDepth(1); firstLayer.setAlpha(0.5); firstLayer.setInteractive({ draggable: true }); - secondLayer = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'layer2'); + secondLayer = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'layer2').setScale(letterScale); textX = isMobile ? customWidth / 4 : customWidth * 0.75; const secondTextLayer = this.add.text(textX, textY, '2. Slant Right',{ font: '700 40px quicksand', fill: '#05b3a4'}); - const slantRightAudio = this.sound.add('slantRight'); + const audioTwoAudio = this.sound.add('audioTwo'); secondTextLayer.setVisible(false); secondLayer.setDepth(1); secondLayer.setAlpha(0.5); secondLayer.setInteractive({ draggable: true }); secondLayer.setVisible(false); - thirdLayer = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'layer3'); + thirdLayer = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'layer3').setScale(letterScale); textX = isMobile ? customWidth / 3 : customWidth * 0.75; const thirdTextLayer = this.add.text(textX, textY, '3. Slide', { font: '700 40px quicksand', fill: '#05b3a4'}); - const slideAudio = this.sound.add('slide'); + const audioThreeAudio = this.sound.add('audioThree'); thirdTextLayer.setVisible(false); thirdLayer.setDepth(1.1); // thirdLayer.setScale(1.15); @@ -271,9 +270,10 @@ import Layout from "../../layouts/Layout.astro"; const distance = Phaser.Math.Distance.Between(firstDragStartPoint.x, firstDragStartPoint.y, pointer.x, pointer.y); if (distance >= 100) { + firstTextLayer.setVisible(false); secondTextLayer.setVisible(true); - slantRightAudio.play(); + audioTwoAudio.play(); secondLayer.setVisible(true); firstLayer.setAlpha(1); secondLayer.setAlpha(0.5); @@ -297,7 +297,7 @@ import Layout from "../../layouts/Layout.astro"; if (distance >= 100) { secondTextLayer.setVisible(false); thirdTextLayer.setVisible(true); - slideAudio.play(); + audioThreeAudio.play(); thirdLayer.setVisible(true); secondLayer.setAlpha(1); thirdLayer.setAlpha(0.5); @@ -325,8 +325,8 @@ import Layout from "../../layouts/Layout.astro"; graphics = this.add.graphics(); + graphics.setMask(mask); graphics.lineStyle(15, 0xFFFFFF, 2).setDepth(2); // Set line style (width, color, alpha) - this.input.on('pointerdown', function (pointer) { isDrawing = true; graphics.moveTo(pointer.x, pointer.y); @@ -343,80 +343,6 @@ import Layout from "../../layouts/Layout.astro"; graphics.lineTo(pointer.x, pointer.y); graphics.strokePath(); }); - - const handPointerLeft = this.add.sprite(customWidth / 2, customHeight / 2, 'handPointer'); - const startHeightLeft = customHeight /2 - 100; // Starting y position - const endHeightLeft = customHeight / 2 + 170; // Ending y position - const startWidthLeft = customWidth / 2 + 22; - const endWidthLeft = customWidth / 2 - 70; - // handPointer.setOrigin(0.5, 0.5); - handPointerLeft.setScale(0.5).setDepth(2); // Adjust scale as needed - // Define the bounce animation - this.tweens.add({ - targets: handPointerLeft, - x: { - getStart: () => startWidthLeft, - getEnd: () => endWidthLeft, - }, // End x position - y: { - getStart: () => startHeightLeft, - getEnd: () => endHeightLeft, - }, - duration: 3000, // Duration of each bounce - ease: 'Sine.easeInOut', - yoyo: false, - repeat: -1 // -1 means it will repeat indefinitely - }); - const handPointerRight = this.add.sprite(customWidth / 2, customHeight / 2, 'handPointer'); - const startHeightRight = customHeight /2 - 100; // Starting y position - const endHeightRight = customHeight / 2 + 170; // Ending y position - const startWidthRight = customWidth / 2 + 20; - const endWidthRight = customWidth / 2 + 107; - // handPointer.setOrigin(0.5, 0.5); - handPointerRight.setScale(0.5).setDepth(2).setAngle(360); // Adjust scale as needed - // Define the bounce animation - this.tweens.add({ - targets: handPointerRight, - x: { - getStart: () => startWidthRight, - getEnd: () => endWidthRight, - }, // End x position - y: { - getStart: () => startHeightRight, - getEnd: () => endHeightRight, - }, - duration: 3000, // Duration of each bounce - ease: 'Sine.easeInOut', - yoyo: false, - repeat: -1 // -1 means it will repeat indefinitely - }); - const handPointeSlide = this.add.sprite(customWidth / 2, customHeight / 2, 'handPointer'); - const startHeightSlide = customHeight / 2 + 70; // Starting y position - const endHeightSlide = customHeight / 2 + 70; // Ending y position - - const startWidthSlide = customWidth / 2 - 60; - const endWidthSlide = customWidth / 2 + 55; - // handPointer.setOrigin(0.5, 0.5); - handPointeSlide.setScale(0.5).setDepth(2).setAngle(45); // Adjust scale as needed - // Define the bounce animation - this.tweens.add({ - targets: handPointeSlide, - x: { - getStart: () => startWidthSlide, - getEnd: () => endWidthSlide, - }, // End x position - y: { - getStart: () => startHeightSlide, - getEnd: () => endHeightSlide, - }, - duration: 3000, // Duration of each bounce - ease: 'Sine.easeInOut', - yoyo: false, - repeat: -1 // -1 means it will repeat indefinitely - }); - handPointerLeft.setVisible(false); - handPointerRight.setVisible(false); - handPointeSlide.setVisible(false); // Start Position 626 317 diff --git a/src/pages/guided-tracing/b.astro b/src/pages/guided-tracing/b.astro index b4eed9e..f4ef21b 100644 --- a/src/pages/guided-tracing/b.astro +++ b/src/pages/guided-tracing/b.astro @@ -32,67 +32,221 @@ import Layout from "../../layouts/Layout.astro"; update: update } }; + // backgroundImage.png const game = new Phaser.Game(config); const customWidth = window.innerWidth; const customHeight = window.innerHeight; let firstLayer, secondLayer, thirdLayer; let graphics; let isDrawing = false; + + if(isMobile){ + cloudeSize = 200; + cloudHeight = 340; + canvasScale = 0.14 + canvasHeight = 35; + letterHeight = 58; + letterScale = 0.85; + backgroundScale = 0.8; + sunScale = 0.1; + sunScalePlus = 0.15; + sunWidth = 70; + sunHeight = 70; + parrotScale = 0.35; + parrotScalePlus = 0.38; + parrotWidth = 135; + parrotHeight = 170; + animatedAHeight = 32; + } else{ + cloudeSize = 500; + cloudHeight = 250; + canvasScale = 0.195; + canvasHeight = 20; + letterHeight = 50; + letterScale = 1; + backgroundScale = 1; + sunScale = 0.2; + sunScalePlus = 0.25; + sunWidth = 200; + sunHeight = 100; + parrotScale = 0.4; + parrotScalePlus = 0.44; + parrotWidth = 200; + parrotHeight = 245; + animatedAHeight = 20; + } // let hideButton; function preload() { + this.load.video('animatedA', '/assets/animated-letter/a.mp4'); this.load.svg('letterB', '/assets/capital-letter/b.svg'); this.load.svg('layer1', '/assets/capital-letter/b_l1.svg'); this.load.svg('layer2', '/assets/capital-letter/b_l2.svg'); this.load.svg('layer3', '/assets/capital-letter/b_l3.svg'); - this.load.audio('slantLeft', '/assets/audio/slant-left.mp3'); - this.load.audio('slantRight', '/assets/audio/slant-right.mp3'); - this.load.audio('slide', '/assets/audio/slide.mp3'); + this.load.audio('audioOne', '/assets/audio/tall-down.mp3'); + this.load.audio('audioTwo', '/assets/audio/slide-around.mp3'); this.load.image('topLogo', '/assets/top_logo.png'); this.load.svg('succesImage', '/assets/svg/tick.svg'); + this.load.svg('hintImage', '/assets/svg/hint.svg'); this.load.svg('handPointer', '/assets/svg/hand.svg'); + this.load.image('backgroundImage', '/assets/bg6.png'); + this.load.image('cloud', '/assets/cloud.png'); + this.load.image('canvas', '/assets/canvas4.png'); + this.load.image('parrot', '/assets/parrot.png'); + this.load.image('sun', '/assets/sun.png'); + this.load.image('bgMobile', '/assets/bgMobile.png'); + this.load.image('canvasStand', '/assets/stand2.png'); } function create() { this.add.image(customWidth / 2 * 1.6 - 0.5, 50, 'topLogo'); - this.add.text(customWidth / 10, 20, "Letter : A", { font: '700 40px quicksand', fill: '#05b3a4', }); + this.add.text(customWidth / 10, 20, "Letter : B", { font: '700 40px quicksand', fill: '#05b3a4', }); + // this.add.image(customWidth / 2, 50, 'cloud').setDepth(1.9); + + const cloud = this.add.tileSprite(customWidth / 2, customHeight / 2 - cloudHeight, customWidth, cloudeSize, 'cloud').setAlpha(0.9); + cloud.setDepth(-1.8); + const scrollSpeed = 0.5; + this.time.addEvent({ + loop: true, + callback: () => { + cloud.tilePositionX += scrollSpeed; + }, + delay: 16, // Adjust the delay for the desired scrolling speed + }); - const firstScreen = this.add.image(customWidth / 2, customHeight / 2, 'letterB'); + const sun = this.add.sprite(customWidth - sunWidth, sunHeight, 'sun').setScale(sunScale).setDepth(-1.9); + const parrot = this.add.sprite(customWidth / 2 - parrotWidth, customHeight / 2 - parrotHeight, 'parrot').setScale(parrotScale).setDepth(1.9); + + + const scaleFactor = sunScalePlus; // Scale factor (2 means double the size) + const duration = 3000; // Duration of the animation in milliseconds + + // Create a scaling tween + this.tweens.add({ + targets: sun, + scaleX: scaleFactor, + scaleY: scaleFactor, + duration: duration, + ease: 'Linear', + yoyo: true, // Makes the animation play in reverse + repeat: -1 // Repeat indefinitely + }); + const parrotscaleFactor = parrotScalePlus; // Scale factor (2 means double the size) + const parrotduration = 2500; + this.tweens.add({ + targets: parrot, + scaleX: parrotscaleFactor + 0.004, + scaleY: parrotscaleFactor, + duration: parrotduration, + ease: 'Redial', + yoyo: true, // Makes the animation play in reverse + repeat: -1 // Repeat indefinitely + }); + const backgroundImages = this.add.image(customWidth / 2, customHeight /2, 'backgroundImage').setDepth(-2).setScale(backgroundScale); + this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'letterB').setAlpha(0.2).setDepth(0.5).setScale(letterScale); + const firstScreen = this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'letterB').setDepth(2).setScale(letterScale); + // const firstScreen = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'animatedA').setDepth(2); canvasStand firstScreen.setVisible(false); + // this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + const canvas = this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + // Set up a mask for the drawing area based on the canvas dimensions + const maskGraphics = this.make.graphics() + maskGraphics.fillRect(customWidth / 2 - (canvas.width * canvasScale) / 2, customHeight / 2 + canvasHeight - (canvas.height * canvasScale) / 2, canvas.width * canvasScale, canvas.height * canvasScale); + const mask = maskGraphics.createGeometryMask(); + + + let hideButton = this.add.text(customWidth / 2 - 65, customHeight / 1.1, "Let`s Do", { + font: '900 24px quicksand', + fill: '#05b3a4', + backgroundColor: '#7c4c23', + padding: { x: 20, y: 10 }, + borderRadius: '15px', // Border radius + shadow: { + offsetX: 2, // X offset for the shadow + offsetY: 2, // Y offset for the shadow + color: '#000', // Shadow color + blur: 5, // Shadow blur + fill: true // Apply shadow to fill (background color) + } + }); + hideButton.setInteractive().on('pointerdown', () => { + isDemoButtonClicked = false; + firstScreen.setVisible(false); + hideButton.setVisible(false); // Hide the "Hide" button + demoButton.setVisible(true); // Show the "Demo" button + graphics.setVisible(true); + animatedLetter.setVisible(false); + }); + hideButton.setVisible(false); + let demoButton = this.add.text(customWidth / 2 - 50, customHeight / 1.1, "Help!", { + font: '900 24px quicksand', + fill: '#05b3a4', + backgroundColor: '#7c4c23', + padding: { x: 20, y: 10 }, + borderRadius: '15px', // Border radius + shadow: { + offsetX: 2, // X offset for the shadow + offsetY: 2, // Y offset for the shadow + color: '#000', // Shadow color + blur: 5, // Shadow blur + fill: true // Apply shadow to fill (background color) + } + }); + + demoButton.setInteractive().on('pointerdown', () => { + graphics.setVisible(false); + firstScreen.setVisible(true); + demoButton.setVisible(false); // Hide the "Demo" button + hideButton.setVisible(true); // Show the "Hide" button + animatedLetter.setVisible(true); + }); const screenCenterX = this.cameras.main.worldView.x + this.cameras.main.width / 2; const baseFontSize = 20; const responsiveFontSize = (window.innerWidth / 480) * baseFontSize; - const descrptText = this.add.text(screenCenterX, 90, 'Let`s learn how to write letter : A', { font: `${responsiveFontSize}px quicksand`, fill: '#7c4c23', fontWeight : 'bold'}).setOrigin(0.5); + const descrptText = this.add.text(screenCenterX, 90, 'Let`s learn how to write letter : B', { font: `${responsiveFontSize}px quicksand`, fill: '#7c4c23', fontWeight : 'bold'}).setOrigin(0.5); + const animatedLetter = this.add.video(customWidth / 2 , customHeight / 2 + animatedAHeight, 'animatedA').setDepth(2).setScale(0.73); + + // Play the video + animatedLetter.play(); + animatedLetter.setVisible(false); + + // You can set additional properties for the video, such as loop and mute: + animatedLetter.setLoop(true); // Loop the video + animatedLetter.setMute(false); // Unmute the video + animatedLetter.on('complete', function () { + // Video playback is complete + // You can add your code here for what to do when the video finishes. + }); let textX, textY; - firstLayer = this.add.image(customWidth / 2, customHeight / 2, 'layer1'); - textX = isMobile ? customWidth / 3 : customWidth * 0.75; + firstLayer = this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'layer1').setScale(letterScale); + textX = isMobile ? customWidth / 4 : customWidth * 0.75; textY = isMobile ? customHeight / 5 : customHeight / 2; - const firstTextLayer = this.add.text(textX, textY, '1. Slant Left', { font: '700 40px quicksand', fill: '#05b3a4'}); - const slantLeftAudio = this.sound.add('slantLeft'); - slantLeftAudio.play(); + const firstTextLayer = this.add.text(textX, textY, '1. Tall Down',{ font: '700 40px quicksand', fill: '#05b3a4'}); + const audioOneAudio = this.sound.add('audioOne'); + audioOneAudio.play(); firstLayer.setDepth(1); firstLayer.setAlpha(0.5); firstLayer.setInteractive({ draggable: true }); - secondLayer = this.add.image(customWidth / 2, customHeight / 2, 'layer2'); - textX = isMobile ? customWidth / 3 : customWidth * 0.75; - const secondTextLayer = this.add.text(textX, textY, '2. Slant Right', { font: '700 40px quicksand', fill: '#05b3a4'}); - const slantRightAudio = this.sound.add('slantRight'); + secondLayer = this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'layer2').setScale(letterScale); + textX = isMobile ? customWidth / 4 : customWidth * 0.75; + const secondTextLayer = this.add.text(textX, textY, '2. Slide Around',{ font: '700 40px quicksand', fill: '#05b3a4'}); + const audioTwoAudio = this.sound.add('audioTwo'); secondTextLayer.setVisible(false); secondLayer.setDepth(1); secondLayer.setAlpha(0.5); secondLayer.setInteractive({ draggable: true }); secondLayer.setVisible(false); - thirdLayer = this.add.image(customWidth / 2, customHeight / 2, 'layer3'); + thirdLayer = this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'layer3').setScale(letterScale); textX = isMobile ? customWidth / 3 : customWidth * 0.75; - const thirdTextLayer = this.add.text(textX, textY, '3. Slide', { font: '700 40px quicksand', fill: '#05b3a4'}); - const slideAudio = this.sound.add('slide'); + const thirdTextLayer = this.add.text(textX, textY, '3. Slide Around', { font: '700 40px quicksand', fill: '#05b3a4'}); + const audioTHreeAudio = this.sound.add('audioTwo'); thirdTextLayer.setVisible(false); thirdLayer.setDepth(1.1); // thirdLayer.setScale(1.15); @@ -100,47 +254,80 @@ import Layout from "../../layouts/Layout.astro"; thirdLayer.setInteractive({ draggable: true }); thirdLayer.setVisible(false); - firstLayer.on('drag', (pointer) => { - if (pointer.isDown) { - firstTextLayer.setVisible(false); - secondTextLayer.setVisible(true); - slantRightAudio.play(); - secondLayer.setVisible(true); - firstLayer.setAlpha(1); - secondLayer.setAlpha(0.5); - thirdLayer.setAlpha(0.5); - } else { - firstLayer.setAlpha(0.5); - } - }); + // Add these variables to keep track of start points + let firstDragStartPoint = { x: 0, y: 0 }; + let secondDragStartPoint = { x: 0, y: 0 }; + let thirdDragStartPoint = { x: 0, y: 0 }; - secondLayer.on('drag', (pointer) => { - if (pointer.isDown) { - secondTextLayer.setVisible(false); - thirdTextLayer.setVisible(true); - slideAudio.play(); - thirdLayer.setVisible(true); - secondLayer.setAlpha(1); - thirdLayer.setAlpha(0.5); - } else { - secondLayer.setAlpha(0.5); - } - }); + // ... - thirdLayer.on('drag', (pointer) => { - if (pointer.isDown) { - thirdLayer.setAlpha(1); - thirdTextLayer.setVisible(false); - // const succesImage = this.add.image(customWidth / 2, customHeight / 2, 'succesImage').setDepth(2); - // succesImage.setAlpha(0.2); - // this.add.text(customWidth / 2, customHeight / 2, 'OK', { font: '700 40px quicksand', fill: '#05b3a4'}).setDepth(2); + // Add this code for firstLayer + firstLayer.on('dragstart', (pointer) => { + firstDragStartPoint.x = pointer.x; + firstDragStartPoint.y = pointer.y; + }); + + firstLayer.on('drag', (pointer) => { + const distance = Phaser.Math.Distance.Between(firstDragStartPoint.x, firstDragStartPoint.y, pointer.x, pointer.y); + + if (distance >= 100) { + + firstTextLayer.setVisible(false); + secondTextLayer.setVisible(true); + audioTwoAudio.play(); + secondLayer.setVisible(true); + firstLayer.setAlpha(1); + secondLayer.setAlpha(0.5); + thirdLayer.setAlpha(0.5); } else { - thirdLayer.setAlpha(0.5); + firstLayer.setAlpha(0.5); } - }); + }); + + // Repeat the above code for secondLayer and thirdLayer + + // Add this code for secondLayer + secondLayer.on('dragstart', (pointer) => { + secondDragStartPoint.x = pointer.x; + secondDragStartPoint.y = pointer.y; + }); + + secondLayer.on('drag', (pointer) => { + const distance = Phaser.Math.Distance.Between(secondDragStartPoint.x, secondDragStartPoint.y, pointer.x, pointer.y); + + if (distance >= 100) { + secondTextLayer.setVisible(false); + thirdTextLayer.setVisible(true); + audioTHreeAudio.play(); + thirdLayer.setVisible(true); + secondLayer.setAlpha(1); + thirdLayer.setAlpha(0.5); + } else { + secondLayer.setAlpha(0.5); + } + }); + + // Add this code for thirdLayer + thirdLayer.on('dragstart', (pointer) => { + thirdDragStartPoint.x = pointer.x; + thirdDragStartPoint.y = pointer.y; + }); + + thirdLayer.on('drag', (pointer) => { + const distance = Phaser.Math.Distance.Between(thirdDragStartPoint.x, thirdDragStartPoint.y, pointer.x, pointer.y); + + if (distance >= 100) { + thirdLayer.setAlpha(1); + thirdTextLayer.setVisible(false); + } else { + thirdLayer.setAlpha(0.5); + } + }); + + graphics = this.add.graphics(); - graphics.lineStyle(15, 0x05b3a4, 2).setDepth(2); // Set line style (width, color, alpha) - + graphics.setMask(mask); + graphics.lineStyle(15, 0xFFFFFF, 2).setDepth(2); // Set line style (width, color, alpha) this.input.on('pointerdown', function (pointer) { isDrawing = true; graphics.moveTo(pointer.x, pointer.y); @@ -157,58 +344,13 @@ import Layout from "../../layouts/Layout.astro"; graphics.lineTo(pointer.x, pointer.y); graphics.strokePath(); }); - const handPointerLeft = this.add.sprite(customWidth / 2, customHeight / 2, 'handPointer'); - const startHeightLeft = customHeight /2 - 140; - const endHeightLeft = customHeight / 2 + 140; - const startWidthLeft = customWidth / 2 + 10; - const endWidthLeft = customWidth / 2 + 10; - handPointerLeft.setScale(0.5).setDepth(2); // Adjust scale as needed - this.tweens.add({ - targets: handPointerLeft, - x: { - getStart: () => startWidthLeft, - getEnd: () => endWidthLeft, - }, // End x position - y: { - getStart: () => startHeightLeft, - getEnd: () => endHeightLeft, - }, - duration: 3000, // Duration of each bounce - ease: 'Sine.easeInOut', - yoyo: false, - repeat: -1 // -1 means it will repeat indefinitely - }); - - handPointerLeft.setVisible(false); - // Start Position 626 317 - let hideButton = this.add.text(customWidth / 2, customHeight / 1.1, "Let`s Do", { font: '24px quicksand', fill: '#05b3a4' }); - hideButton.setInteractive().on('pointerdown', () => { - isDemoButtonClicked = false; - firstScreen.setVisible(false); - hideButton.setVisible(false); // Hide the "Hide" button - demoButton.setVisible(true); // Show the "Demo" button - graphics.setVisible(true); - handPointerLeft.setVisible(false); - }); - hideButton.setVisible(false); - - let demoButton = this.add.text(customWidth / 2, customHeight / 1.1, "Help", { font: '24px quicksand', fill: '#05b3a4' }); - demoButton.setInteractive().on('pointerdown', () => { - graphics.setVisible(false); - firstScreen.setVisible(true); - demoButton.setVisible(false); // Hide the "Demo" button - hideButton.setVisible(true); // Show the "Hide" button - handPointerLeft.setVisible(true); - }); } - // function showLayersWithFadeIn() { - - // } - function update() { - // Update any game logic if needed - } +function update() { + +} + \ No newline at end of file diff --git a/src/pages/guided-tracing/c.astro b/src/pages/guided-tracing/c.astro index 42312b1..6a8547a 100644 --- a/src/pages/guided-tracing/c.astro +++ b/src/pages/guided-tracing/c.astro @@ -32,82 +32,234 @@ import Layout from "../../layouts/Layout.astro"; update: update } }; - + // backgroundImage.png const game = new Phaser.Game(config); const customWidth = window.innerWidth; const customHeight = window.innerHeight; let firstLayer, secondLayer, thirdLayer; let graphics; let isDrawing = false; - + + if(isMobile){ + cloudeSize = 200; + cloudHeight = 340; + canvasScale = 0.14 + canvasHeight = 35; + letterHeight = 90; + letterScale = 1; + backgroundScale = 0.8; + sunScale = 0.1; + sunScalePlus = 0.15; + sunWidth = 70; + sunHeight = 70; + parrotScale = 0.35; + parrotScalePlus = 0.38; + parrotWidth = 135; + parrotHeight = 170; + animatedAHeight = 32; + } else{ + cloudeSize = 500; + cloudHeight = 250; + canvasScale = 0.195; + canvasHeight = 20; + letterHeight = 50; + letterScale = 1; + backgroundScale = 1; + sunScale = 0.2; + sunScalePlus = 0.25; + sunWidth = 200; + sunHeight = 100; + parrotScale = 0.4; + parrotScalePlus = 0.44; + parrotWidth = 200; + parrotHeight = 245; + animatedAHeight = 20; + } + // let hideButton; function preload() { - this.load.svg('letterC', '/assets/capital-letter/c_l1.svg'); - this.load.svg('layer1', '/assets/capital-letter/c_l1.svg'); - - this.load.audio('hookAround', '/assets/audio/hook-around.mp3'); + this.load.video('animatedA', '/assets/animated-letter/a.mp4'); + this.load.svg('letterC', '/assets/capital-letter/c.svg'); + this.load.svg('layer1', '/assets/capital-letter/c.svg'); + this.load.audio('audioOne', '/assets/audio/hook-around.mp3'); this.load.image('topLogo', '/assets/top_logo.png'); this.load.svg('succesImage', '/assets/svg/tick.svg'); + this.load.svg('hintImage', '/assets/svg/hint.svg'); + this.load.svg('handPointer', '/assets/svg/hand.svg'); + this.load.image('backgroundImage', '/assets/bg6.png'); + this.load.image('cloud', '/assets/cloud.png'); + this.load.image('canvas', '/assets/canvas4.png'); + this.load.image('parrot', '/assets/parrot.png'); + this.load.image('sun', '/assets/sun.png'); + this.load.image('bgMobile', '/assets/bgMobile.png'); + this.load.image('canvasStand', '/assets/stand2.png'); } - function create() { this.add.image(customWidth / 2 * 1.6 - 0.5, 50, 'topLogo'); this.add.text(customWidth / 10, 20, "Letter : C", { font: '700 40px quicksand', fill: '#05b3a4', }); - const firstScreen = this.add.image(customWidth / 2, customHeight / 2, 'letterC'); - const screenCenterX = this.cameras.main.worldView.x + this.cameras.main.width / 2; - const baseFontSize = 20; - const responsiveFontSize = (window.innerWidth / 480) * baseFontSize; - const descrptText = this.add.text(screenCenterX, 90, 'Let`s learn how to write letter : C', { font: `${responsiveFontSize}px quicksand`, fill: '#7c4c23', fontWeight : 'bold'}).setOrigin(0.5); + // this.add.image(customWidth / 2, 50, 'cloud').setDepth(1.9); + + const cloud = this.add.tileSprite(customWidth / 2, customHeight / 2 - cloudHeight, customWidth, cloudeSize, 'cloud').setAlpha(0.9); + cloud.setDepth(-1.8); + const scrollSpeed = 0.5; + this.time.addEvent({ + loop: true, + callback: () => { + cloud.tilePositionX += scrollSpeed; + }, + delay: 16, // Adjust the delay for the desired scrolling speed + }); - this.time.delayedCall(2000, () => { - this.tweens.add({ - targets: firstScreen, - alpha: 0, - scaleX: 0.5, - scaleY: 0.5, - duration: 1000, - onComplete: () => { - firstScreen.setVisible(false); - firstScreen.setScale(1); - showLayersWithFadeIn.call(this); + const sun = this.add.sprite(customWidth - sunWidth, sunHeight, 'sun').setScale(sunScale).setDepth(-1.9); + const parrot = this.add.sprite(customWidth / 2 - parrotWidth, customHeight / 2 - parrotHeight, 'parrot').setScale(parrotScale).setDepth(1.9); + + + const scaleFactor = sunScalePlus; // Scale factor (2 means double the size) + const duration = 3000; // Duration of the animation in milliseconds + + // Create a scaling tween + this.tweens.add({ + targets: sun, + scaleX: scaleFactor, + scaleY: scaleFactor, + duration: duration, + ease: 'Linear', + yoyo: true, // Makes the animation play in reverse + repeat: -1 // Repeat indefinitely + }); + const parrotscaleFactor = parrotScalePlus; // Scale factor (2 means double the size) + const parrotduration = 2500; + this.tweens.add({ + targets: parrot, + scaleX: parrotscaleFactor + 0.004, + scaleY: parrotscaleFactor, + duration: parrotduration, + ease: 'Redial', + yoyo: true, // Makes the animation play in reverse + repeat: -1 // Repeat indefinitely + }); + const backgroundImages = this.add.image(customWidth / 2, customHeight /2, 'backgroundImage').setDepth(-2).setScale(backgroundScale); + this.add.image(customWidth / 2 + 90, customHeight / 2 + letterHeight, 'letterC').setAlpha(0.2).setDepth(0.5).setScale(letterScale); + const firstScreen = this.add.image(customWidth / 2 + 90, customHeight / 2 + letterHeight, 'letterC').setDepth(2).setScale(letterScale); + // const firstScreen = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'animatedA').setDepth(2); canvasStand + firstScreen.setVisible(false); + // this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + const canvas = this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + // Set up a mask for the drawing area based on the canvas dimensions + const maskGraphics = this.make.graphics() + maskGraphics.fillRect(customWidth / 2 - (canvas.width * canvasScale) / 2, customHeight / 2 + canvasHeight - (canvas.height * canvasScale) / 2, canvas.width * canvasScale, canvas.height * canvasScale); + const mask = maskGraphics.createGeometryMask(); + + + + let hideButton = this.add.text(customWidth / 2 - 65, customHeight / 1.1, "Let`s Do", { + font: '900 24px quicksand', + fill: '#05b3a4', + backgroundColor: '#7c4c23', + padding: { x: 20, y: 10 }, + borderRadius: '15px', // Border radius + shadow: { + offsetX: 2, // X offset for the shadow + offsetY: 2, // Y offset for the shadow + color: '#000', // Shadow color + blur: 5, // Shadow blur + fill: true // Apply shadow to fill (background color) } }); - }, [], this); - } - function showLayersWithFadeIn() { - this.tweens.add({ - targets: [firstLayer, secondLayer, thirdLayer], - alpha: 1, - duration: 1000, // Duration of the tween in milliseconds - delay: 500, // Delay before the fade-in starts - ease: 'Power2', // Easing function (e.g., 'Linear', 'Cubic', 'Elastic', etc.) + hideButton.setInteractive().on('pointerdown', () => { + isDemoButtonClicked = false; + firstScreen.setVisible(false); + hideButton.setVisible(false); // Hide the "Hide" button + demoButton.setVisible(true); // Show the "Demo" button + graphics.setVisible(true); + animatedLetter.setVisible(false); }); - - let textX, textY; + hideButton.setVisible(false); + let demoButton = this.add.text(customWidth / 2 - 50, customHeight / 1.1, "Help!", { + font: '900 24px quicksand', + fill: '#05b3a4', + backgroundColor: '#7c4c23', + padding: { x: 20, y: 10 }, + borderRadius: '15px', // Border radius + shadow: { + offsetX: 2, // X offset for the shadow + offsetY: 2, // Y offset for the shadow + color: '#000', // Shadow color + blur: 5, // Shadow blur + fill: true // Apply shadow to fill (background color) + } + }); - firstLayer = this.add.image(customWidth / 2, customHeight / 2, 'layer1'); - textX = isMobile ? customWidth / 3 : customWidth * 0.75; + demoButton.setInteractive().on('pointerdown', () => { + graphics.setVisible(false); + firstScreen.setVisible(true); + demoButton.setVisible(false); // Hide the "Demo" button + hideButton.setVisible(true); // Show the "Hide" button + animatedLetter.setVisible(true); + }); + + + const screenCenterX = this.cameras.main.worldView.x + this.cameras.main.width / 2; + const baseFontSize = 20; + const responsiveFontSize = (window.innerWidth / 480) * baseFontSize; + const descrptText = this.add.text(screenCenterX, 90, 'Let`s learn how to write letter : C', { font: `${responsiveFontSize}px quicksand`, fill: '#7c4c23', fontWeight : 'bold'}).setOrigin(0.5); + const animatedLetter = this.add.video(customWidth / 2 , customHeight / 2 + animatedAHeight, 'animatedA').setDepth(2).setScale(0.73); + + // Play the video + animatedLetter.play(); + animatedLetter.setVisible(false); + + // You can set additional properties for the video, such as loop and mute: + animatedLetter.setLoop(true); // Loop the video + animatedLetter.setMute(false); // Unmute the video + animatedLetter.on('complete', function () { + // Video playback is complete + // You can add your code here for what to do when the video finishes. + }); + + let textX, textY; + + firstLayer = this.add.image(customWidth / 2 + 90, customHeight / 2 + letterHeight, 'layer1').setScale(letterScale); + textX = isMobile ? customWidth / 4 : customWidth * 0.75; textY = isMobile ? customHeight / 5 : customHeight / 2; - const firstTextLayer = this.add.text(textX, textY, '1. Hook Around', { font: '700 40px quicksand', fill: '#05b3a4'}); - const slantLeftAudio = this.sound.add('hookAround'); - slantLeftAudio.play(); + const firstTextLayer = this.add.text(textX, textY, '1. Hook Around',{ font: '700 40px quicksand', fill: '#05b3a4'}); + const audioOneAudio = this.sound.add('audioOne'); + audioOneAudio.play(); firstLayer.setDepth(1); firstLayer.setAlpha(0.5); firstLayer.setInteractive({ draggable: true }); - firstLayer.on('drag', (pointer) => { - if (pointer.isDown) { - firstTextLayer.setVisible(false); - firstLayer.setAlpha(1); - } else { - firstLayer.setAlpha(0.5); - } - }); - graphics = this.add.graphics(); - graphics.lineStyle(15, 0x05b3a4, 2).setDepth(2); // Set line style (width, color, alpha) + // Add these variables to keep track of start points + let firstDragStartPoint = { x: 0, y: 0 }; + + // ... + + // Add this code for firstLayer + firstLayer.on('dragstart', (pointer) => { + firstDragStartPoint.x = pointer.x; + firstDragStartPoint.y = pointer.y; + }); + + firstLayer.on('drag', (pointer) => { + const distance = Phaser.Math.Distance.Between(firstDragStartPoint.x, firstDragStartPoint.y, pointer.x, pointer.y); + + if (distance >= 50) { + + firstTextLayer.setVisible(false); + firstLayer.setAlpha(1); + } else { + firstLayer.setAlpha(0.5); + } + }); + + + + graphics = this.add.graphics(); + graphics.setMask(mask); + graphics.lineStyle(15, 0xFFFFFF, 2).setDepth(2); // Set line style (width, color, alpha) this.input.on('pointerdown', function (pointer) { isDrawing = true; graphics.moveTo(pointer.x, pointer.y); @@ -123,9 +275,12 @@ import Layout from "../../layouts/Layout.astro"; graphics.lineTo(pointer.x, pointer.y); graphics.strokePath(); }); + + } - function update() { - // Update any game logic if needed - } +function update() { + +} + \ No newline at end of file diff --git a/src/pages/guided-tracing/d.astro b/src/pages/guided-tracing/d.astro index e7168d8..95e6290 100644 --- a/src/pages/guided-tracing/d.astro +++ b/src/pages/guided-tracing/d.astro @@ -32,76 +32,210 @@ import Layout from "../../layouts/Layout.astro"; update: update } }; - + // backgroundImage.png const game = new Phaser.Game(config); const customWidth = window.innerWidth; const customHeight = window.innerHeight; - let firstLayer, secondLayer, thirdLayer; + let firstLayer, secondLayer; let graphics; let isDrawing = false; - + + if(isMobile){ + cloudeSize = 200; + cloudHeight = 340; + canvasScale = 0.14 + canvasHeight = 35; + letterHeight = 58; + letterScale = 0.85; + backgroundScale = 0.8; + sunScale = 0.1; + sunScalePlus = 0.15; + sunWidth = 70; + sunHeight = 70; + parrotScale = 0.35; + parrotScalePlus = 0.38; + parrotWidth = 135; + parrotHeight = 170; + animatedAHeight = 32; + } else{ + cloudeSize = 500; + cloudHeight = 250; + canvasScale = 0.195; + canvasHeight = 20; + letterHeight = 50; + letterScale = 1; + backgroundScale = 1; + sunScale = 0.2; + sunScalePlus = 0.25; + sunWidth = 200; + sunHeight = 100; + parrotScale = 0.4; + parrotScalePlus = 0.44; + parrotWidth = 200; + parrotHeight = 245; + animatedAHeight = 20; + } + // let hideButton; function preload() { - this.load.svg('letterD', '/assets/capital-letter/d.svg'); + this.load.video('animatedA', '/assets/animated-letter/a.mp4'); + this.load.svg('letterB', '/assets/capital-letter/d.svg'); this.load.svg('layer1', '/assets/capital-letter/d_l1.svg'); this.load.svg('layer2', '/assets/capital-letter/d_l2.svg'); - - this.load.audio('tallDown', '/assets/audio/tall-down.mp3'); - this.load.audio('slideAround', '/assets/audio/slide-around.mp3'); + this.load.audio('audioOne', '/assets/audio/tall-down.mp3'); + this.load.audio('audioTwo', '/assets/audio/slide-around.mp3'); this.load.image('topLogo', '/assets/top_logo.png'); this.load.svg('succesImage', '/assets/svg/tick.svg'); + this.load.svg('hintImage', '/assets/svg/hint.svg'); + this.load.svg('handPointer', '/assets/svg/hand.svg'); + this.load.image('backgroundImage', '/assets/bg6.png'); + this.load.image('cloud', '/assets/cloud.png'); + this.load.image('canvas', '/assets/canvas4.png'); + this.load.image('parrot', '/assets/parrot.png'); + this.load.image('sun', '/assets/sun.png'); + this.load.image('bgMobile', '/assets/bgMobile.png'); + this.load.image('canvasStand', '/assets/stand2.png'); } - function create() { this.add.image(customWidth / 2 * 1.6 - 0.5, 50, 'topLogo'); this.add.text(customWidth / 10, 20, "Letter : D", { font: '700 40px quicksand', fill: '#05b3a4', }); - const firstScreen = this.add.image(customWidth / 2, customHeight / 2, 'letterD'); + // this.add.image(customWidth / 2, 50, 'cloud').setDepth(1.9); + + const cloud = this.add.tileSprite(customWidth / 2, customHeight / 2 - cloudHeight, customWidth, cloudeSize, 'cloud').setAlpha(0.9); + cloud.setDepth(-1.8); + const scrollSpeed = 0.5; + this.time.addEvent({ + loop: true, + callback: () => { + cloud.tilePositionX += scrollSpeed; + }, + delay: 16, // Adjust the delay for the desired scrolling speed + }); + + const sun = this.add.sprite(customWidth - sunWidth, sunHeight, 'sun').setScale(sunScale).setDepth(-1.9); + const parrot = this.add.sprite(customWidth / 2 - parrotWidth, customHeight / 2 - parrotHeight, 'parrot').setScale(parrotScale).setDepth(1.9); + + + const scaleFactor = sunScalePlus; // Scale factor (2 means double the size) + const duration = 3000; // Duration of the animation in milliseconds + + // Create a scaling tween + this.tweens.add({ + targets: sun, + scaleX: scaleFactor, + scaleY: scaleFactor, + duration: duration, + ease: 'Linear', + yoyo: true, // Makes the animation play in reverse + repeat: -1 // Repeat indefinitely + }); + const parrotscaleFactor = parrotScalePlus; // Scale factor (2 means double the size) + const parrotduration = 2500; + this.tweens.add({ + targets: parrot, + scaleX: parrotscaleFactor + 0.004, + scaleY: parrotscaleFactor, + duration: parrotduration, + ease: 'Redial', + yoyo: true, // Makes the animation play in reverse + repeat: -1 // Repeat indefinitely + }); + const backgroundImages = this.add.image(customWidth / 2, customHeight /2, 'backgroundImage').setDepth(-2).setScale(backgroundScale); + this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'letterB').setAlpha(0.2).setDepth(0.5).setScale(letterScale); + const firstScreen = this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'letterB').setDepth(2).setScale(letterScale); + // const firstScreen = this.add.image(customWidth / 2, customHeight / 2 + letterHeight, 'animatedA').setDepth(2); canvasStand + firstScreen.setVisible(false); + // this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + const canvas = this.add.image(customWidth / 2, customHeight / 2 + canvasHeight, 'canvas').setScale(canvasScale); + // Set up a mask for the drawing area based on the canvas dimensions + const maskGraphics = this.make.graphics() + maskGraphics.fillRect(customWidth / 2 - (canvas.width * canvasScale) / 2, customHeight / 2 + canvasHeight - (canvas.height * canvasScale) / 2, canvas.width * canvasScale, canvas.height * canvasScale); + const mask = maskGraphics.createGeometryMask(); + + + + let hideButton = this.add.text(customWidth / 2 - 65, customHeight / 1.1, "Let`s Do", { + font: '900 24px quicksand', + fill: '#05b3a4', + backgroundColor: '#7c4c23', + padding: { x: 20, y: 10 }, + borderRadius: '15px', // Border radius + shadow: { + offsetX: 2, // X offset for the shadow + offsetY: 2, // Y offset for the shadow + color: '#000', // Shadow color + blur: 5, // Shadow blur + fill: true // Apply shadow to fill (background color) + } + }); + hideButton.setInteractive().on('pointerdown', () => { + isDemoButtonClicked = false; + firstScreen.setVisible(false); + hideButton.setVisible(false); // Hide the "Hide" button + demoButton.setVisible(true); // Show the "Demo" button + graphics.setVisible(true); + animatedLetter.setVisible(false); + }); + hideButton.setVisible(false); + let demoButton = this.add.text(customWidth / 2 - 50, customHeight / 1.1, "Help!", { + font: '900 24px quicksand', + fill: '#05b3a4', + backgroundColor: '#7c4c23', + padding: { x: 20, y: 10 }, + borderRadius: '15px', // Border radius + shadow: { + offsetX: 2, // X offset for the shadow + offsetY: 2, // Y offset for the shadow + color: '#000', // Shadow color + blur: 5, // Shadow blur + fill: true // Apply shadow to fill (background color) + } + }); + + demoButton.setInteractive().on('pointerdown', () => { + graphics.setVisible(false); + firstScreen.setVisible(true); + demoButton.setVisible(false); // Hide the "Demo" button + hideButton.setVisible(true); // Show the "Hide" button + animatedLetter.setVisible(true); + }); + + const screenCenterX = this.cameras.main.worldView.x + this.cameras.main.width / 2; const baseFontSize = 20; const responsiveFontSize = (window.innerWidth / 480) * baseFontSize; const descrptText = this.add.text(screenCenterX, 90, 'Let`s learn how to write letter : D', { font: `${responsiveFontSize}px quicksand`, fill: '#7c4c23', fontWeight : 'bold'}).setOrigin(0.5); + const animatedLetter = this.add.video(customWidth / 2 , customHeight / 2 + animatedAHeight, 'animatedA').setDepth(2).setScale(0.73); - this.time.delayedCall(2000, () => { - this.tweens.add({ - targets: firstScreen, - alpha: 0, - scaleX: 0.5, - scaleY: 0.5, - duration: 1000, - onComplete: () => { - firstScreen.setVisible(false); - firstScreen.setScale(1); - showLayersWithFadeIn.call(this); - } - }); - }, [], this); - } - function showLayersWithFadeIn() { - this.tweens.add({ - targets: [firstLayer, secondLayer, thirdLayer], - alpha: 1, - duration: 1000, // Duration of the tween in milliseconds - delay: 500, // Delay before the fade-in starts - ease: 'Power2', // Easing function (e.g., 'Linear', 'Cubic', 'Elastic', etc.) + // Play the video + animatedLetter.play(); + animatedLetter.setVisible(false); + + // You can set additional properties for the video, such as loop and mute: + animatedLetter.setLoop(true); // Loop the video + animatedLetter.setMute(false); // Unmute the video + animatedLetter.on('complete', function () { + // Video playback is complete + // You can add your code here for what to do when the video finishes. }); - - let textX, textY; - firstLayer = this.add.image(customWidth / 2, customHeight / 2, 'layer1'); - textX = isMobile ? customWidth / 3 : customWidth * 0.75; + let textX, textY; + + firstLayer = this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'layer1').setScale(letterScale); + textX = isMobile ? customWidth / 4 : customWidth * 0.75; textY = isMobile ? customHeight / 5 : customHeight / 2; - const firstTextLayer = this.add.text(textX, textY, '1. Tall Down', { font: '700 40px quicksand', fill: '#05b3a4'}); - const slantLeftAudio = this.sound.add('tallDown'); - slantLeftAudio.play(); + const firstTextLayer = this.add.text(textX, textY, '1. Tall Down',{ font: '700 40px quicksand', fill: '#05b3a4'}); + const audioOneAudio = this.sound.add('audioOne'); + audioOneAudio.play(); firstLayer.setDepth(1); firstLayer.setAlpha(0.5); firstLayer.setInteractive({ draggable: true }); - secondLayer = this.add.image(customWidth / 2, customHeight / 2, 'layer2'); - textX = isMobile ? customWidth / 3 : customWidth * 0.75; - const secondTextLayer = this.add.text(textX, textY, '2. Slide Around', { font: '700 40px quicksand', fill: '#05b3a4'}); - const slantRightAudio = this.sound.add('slideAround'); + secondLayer = this.add.image(customWidth / 2 - 30, customHeight / 2 + letterHeight, 'layer2').setScale(letterScale); + textX = isMobile ? customWidth / 4 : customWidth * 0.75; + const secondTextLayer = this.add.text(textX, textY, '2. Slide Around',{ font: '700 40px quicksand', fill: '#05b3a4'}); + const audioTwoAudio = this.sound.add('audioTwo'); secondTextLayer.setVisible(false); secondLayer.setDepth(1); secondLayer.setAlpha(0.5); @@ -109,35 +243,61 @@ import Layout from "../../layouts/Layout.astro"; secondLayer.setVisible(false); - firstLayer.on('drag', (pointer) => { - if (pointer.isDown) { - firstTextLayer.setVisible(false); - secondTextLayer.setVisible(true); - slantRightAudio.play(); - secondLayer.setVisible(true); - firstLayer.setAlpha(1); - secondLayer.setAlpha(0.5); - } else { - firstLayer.setAlpha(0.5); - } - }); + // Add these variables to keep track of start points + let firstDragStartPoint = { x: 0, y: 0 }; + let secondDragStartPoint = { x: 0, y: 0 }; - secondLayer.on('drag', (pointer) => { - if (pointer.isDown) { - secondTextLayer.setVisible(false); - secondLayer.setAlpha(1); + // ... + + // Add this code for firstLayer + firstLayer.on('dragstart', (pointer) => { + firstDragStartPoint.x = pointer.x; + firstDragStartPoint.y = pointer.y; + }); + + firstLayer.on('drag', (pointer) => { + const distance = Phaser.Math.Distance.Between(firstDragStartPoint.x, firstDragStartPoint.y, pointer.x, pointer.y); + + if (distance >= 100) { + + firstTextLayer.setVisible(false); + secondTextLayer.setVisible(true); + audioTwoAudio.play(); + secondLayer.setVisible(true); + firstLayer.setAlpha(1); + secondLayer.setAlpha(0.5); } else { - secondLayer.setAlpha(0.5); + firstLayer.setAlpha(0.5); } - }); + }); +`` + // Repeat the above code for secondLayer and thirdLayer + + // Add this code for secondLayer + secondLayer.on('dragstart', (pointer) => { + secondDragStartPoint.x = pointer.x; + secondDragStartPoint.y = pointer.y; + }); + + secondLayer.on('drag', (pointer) => { + const distance = Phaser.Math.Distance.Between(secondDragStartPoint.x, secondDragStartPoint.y, pointer.x, pointer.y); + + if (distance >=100) { + secondTextLayer.setVisible(false); + secondLayer.setAlpha(1); + } else { + secondLayer.setAlpha(0.5); + } + }); graphics = this.add.graphics(); - graphics.lineStyle(15, 0x05b3a4, 2).setDepth(2); // Set line style (width, color, alpha) - + graphics.setMask(mask); + graphics.lineStyle(15, 0xFFFFFF, 2).setDepth(2); // Set line style (width, color, alpha) this.input.on('pointerdown', function (pointer) { isDrawing = true; graphics.moveTo(pointer.x, pointer.y); + console.log("Start Position", pointer.x, pointer.y) }); this.input.on('pointerup', function () { @@ -152,7 +312,8 @@ import Layout from "../../layouts/Layout.astro"; }); } - function update() { - // Update any game logic if needed - } +function update() { + +} + \ No newline at end of file diff --git a/src/pages/guided-tracing/e.astro b/src/pages/guided-tracing/e.astro new file mode 100644 index 0000000..c701b05 --- /dev/null +++ b/src/pages/guided-tracing/e.astro @@ -0,0 +1,355 @@ +--- +import Layout from "../../layouts/Layout.astro"; +--- + +
+
+
+ +
+
+ \ No newline at end of file