{"version":3,"sources":["params.js","util.js","camera.js","index.js"],"names":["VIDEO_SIZE","width","height","STATE","camera","targetFPS","sizeOption","backend","flags","modelConfig","isMobile","isAndroid","test","navigator","userAgent","isiOS","Camera","this","video","document","getElementById","canvas","ctx","getContext","drawImage","videoWidth","videoHeight","clearRect","srcObject","getTracks","forEach","track","stop","pause","boxVal","x","y","color","Math","floor","random","toString","strokeStyle","beginPath","fillStyle","rect","stroke","poses","pose","drawResult","keypoints","drawKeypoints","drawSkeleton","keypointInd","posedetection","getKeypointIndexBySide","params","model","lineWidth","middle","i","drawKeypoint","left","right","keypoint","score","scoreThreshold","circle","Path2D","arc","PI","fill","getAdjacentPairs","j","kp1","kp2","score1","score2","moveTo","lineTo","imgEle","ptXY","angDegress","angleInRadians","translate","rotate","size","cameraParam","mediaDevices","getUserMedia","Error","$size","videoConfig","facingMode","frameRate","ideal","stream","Promise","resolve","onloadedmetadata","play","sFactor","window","screen","scale","tfjsWasm","detector","data","startTime","dExpiry","d_lastPlay","d_lastReward","source","gainNode","exObj","stats","require","timeLapsed","ls_log","ad_countDown","Audio","ad_shuttle","ad_tick","ad_background","b_notSpeaking","s_mobile","n_selection","b_skipframe","userInfo","s_winning","ln_videoWidth","ln_promptTime","n_scoreCount","b_moveTree","arry_prevPts","s_comment","s_prevComment","n_lastCommentTime","b_actualPlay","s_teamName","b_initLoad","b_predict","b_inEx","audioCtx","AudioContext","song","arry_safety","objPartIndexMap","synth","speechSynthesis","utterThis","SpeechSynthesisUtterance","assessOverHead","apl","logIt","getSignedANGXY","assessWideElbows","getANGXY","assessArmsStrDown","Lhs10pY","Rhs10pY","assessArmsSpread","nLRsX","climberObj","anChestHeight","anChestWidth","anChestOffsetY","anCanvasWidth","anCanvasHeight","nLevel","nChestHeight","nChestWidth","nChestOffsetY","nCanvasWidth","nPhase","nTarget","nUpDist","creImage","nCanvasHeight","aTimeLapsed","setComment","PlaySound","reset","swingObj","nAnimateTimeStartTime","nCurrentTime","pLFlyDist","xD","yD","pRFlyDist","nCoinLength","creRotatedImage","liftObj","nGoldWidth","nGoldHeight","nGoldIngotWidth","nGoldIngotHeight","pLi","pRi","nEndimationTime","nSpinTime","nEndimationSteps","n_consolationNum","bAnimationCompleted","length","aWinLevel","formatDate","Date","now","generateRandomIntegerInRange","PostUpdateRec","getANGby3Points","assessCurls","upLimbExObj","aCanvasWidth","aCanvasHeight","oClimbObj","oSwingObj","oLiftObj","nGameStartTime","oSelector","selectionObj","nStage","nGameDuration","round","innerText","show","endGameProcess","style","display","scrollIntoView","top","behavior","showSelection","aar_prevPts","bStageCompleted","checkContinue","assess","assessSelection","n_bannerY","aDuration","skaterObj","nScore","nBLlha","nBLlka","nBLrha","nBLrka","ln_lastSpawn","arryShow","oTree","push","DropObj","moveTree","arryTmp","dropIfValid","w","h","TreeObj","instructNow","clockObj","time","dimWidth","dimHeight","dimWidthStar","dimHeightStar","dimWidthSanta","dimHeightSanta","heightSanta","widthSanta","widthStar","heightStar","rX","lX","rY","lY","glitterStars","alarmTime","diameterPendulum","pendulumX","pendulumY","side","oSantaSleigh","santaSleighObj","getNewPosition","b_progress","progressTime","sFileName","checkStdev","aclockHeight","nDimSantaWidth","nDimSantaHeight","nSantaHeight","nSantaWidth","nDisplacementX","nSide","nHeightDisplacement","nY","nAnimateTime","nMoveUnit","fairyObj","nDimFairy1Width","nDimFairy1Height","nFairyWidth","nFairy1Height","nFairy0Height","nWingState","nWingFlapTime","ax","ay","aIndex","candyObj","nDimCandyWidth","nDimCandyHeight","nCandyWidth","nCandyHeight","sColorDirection","nRedCount","sComment","sPrevComment","nLastCommentTime","nMaxHeight","nMaxWidth","nAnimationTransitionTime","nAnimationLapTime","nAnimationSteps","nGrowthRate","nMaxHeightX","nMoveRate","nAnimationStartTime","nPresentHeight","nPresentWidth","nPresentX","nPresentY","oPl","nFairyIndex","nFairyX","nFairyY","oFairy","nRefShoulderWidth","nHandClosedThreshold","nHandOpenedThreshold","bAssess","nEndCloseTarget","nEndCloseCount","nAddColorTime","nShrinkRate","nMinHeightX","nShrinkMoveRate","s_imageName","toggleCandy","getShrinkRate","aShoulderY","nFingerWidth","nMidSH","nShoulderWidth","nHipWidth","nKneeWidth","addColor","aArryOptionTexts","aArryOptionIcons","aArryOptionValues","nSelectionState","bPrevChoice","nXCount","arryOptionText","arryOptionIcon","arryOptionValue","nOptionIndex","nOptionIconHeight","aEHeight","aChange","manageOptionIndex","PosNum","spacing","offSet","fallY","level","vX","vY","orientation","PosX","lastAnimate","drop","draw","imgV","createElement","src","drawPic","an_position","position","imgC","animateTime","TapObj","anDuration","nTargetDuration","nStablePoseTarget","nHitDuration","nExStartTime","nStableTarget","arryTargetsList","bExPoseReady","nStartPose","arrySpinOut","arryDisplayedTargets","nImgWidth","nImgHeight","nTargetLocationIndex","charAt","nHitStartTime","asPos","nX","apos","getXPos","arryTempSpin","spinObj","state","destin","nRotateAngle","nPosX","nPosY","creRotatedDropImage","bContinue","aarryPoseSeq","aarryIndiceToCheck","anStdev","nIndex","getArrayStdev","checkPartsStability","getArrayAvg","setDisplayTargets","arryTmpTargets","targetPos","nThisTargetX","aY","showEndBanner","PuzzleObj","nStableY","arrySPLocations","bInHand","arrySnapped","sMP","arryPreFix","arryMP","sMPSpot","nHoldingIndex","nHoldingX","nHoldingY","bShowPiece","nStartTime","nPuzzleDone","nAllDurations","nMPIndex","splice","sPieceID","sLocation","mpX","mpY","mpWidth","mpHeight","imgName","oGridSpot","getGridBox","minX","minY","startsWith","endsWith","sPieceName","showStaticPiece","setDisplayTarget","sum","displayInHand","completedSegment","asMP","nMinY","nMaxY","nMinX","nMaxX","maxX","maxY","oGridBox","checkYPose","checkGrabPiece","checkSnapPiece","checkInitialCondition","nThisDuration","aTeamName","aTiming","axios","bodyFormData","FormData","append","s_url","method","url","headers","then","response","catch","sendTime","getContent","documentElement","scrollTop","DanceObj","nStopTolerance","nFadeTiming","nCutTime","nInitBuffer","nGaming","nGameStart","nAnimationPhase","nAnimationBase","nDiminish","nCorner","nColor","nDifference","nSafeLevel","nEmergency","checkPlayingCondition","pauseSong","bEmergency","gain","value","abs","startSong","toDataURL","shift","yPos","xPos","resume","suspend","aarry","an_poseIndex","as_property","tmp_arry","t","mean","stdev","aCommentStr","sayComment","an_index","an_sstev","tmp_arryX","tmp_arryY","setUpDeviceParam","ln_vWidth","ln_vHeight","n_scaleFactor","b_isMobile","matchMedia","matches","block","inline","n_videoWidth","n_videoHeight","angDegrees","drawRotateDropPic","err","message","drawRotatePic","as_obj","a_sFileName","ab_loop","loop","volume","instStr","an_waitTime","text","rate","onend","speak","instructBase","instruct","getPL","p","an_scaleX","an_scaleY","ap_l","pp","np","atan","hp","lp","getDistance","p1","p2","sqrt","pow","s","eb","Dseb","Debw","Dsw","acos","min","max","als_log","initGeneric","s_inAudible","setUpCapturing","createDetector","a","MediapipeBlazepose","quantBytes","getPose","estimatePoses","maxPoses","flipHorizontal","tf","setupCamera","alert","setInterval","controlDisplay","renderResult","drawCtx","p_l","slice","cErr","ex","sendData","aFileName","currentdate","newFileName","getDate","getMonth","getHours","getMinutes","getSeconds","arryRecs","content","split","rankedTeam","r","rawItem","n","parseInt","sort","b","s_tableContent","innerHTML","aMobile","aReward","adExpiry","auserInfo","returnMsg","cookie","toUTCString","myCouponCount","PostNewRec","aName","location","reload","status","ReportIssue","nVer","appVersion","aDate","month","String","padStart","getFullYear","selectClimber","anStage","startGame","DanceGame","PuzzleGame","createMediaElementSource","connect","destination","createGain","url_string","href","URL","searchParams","get","addEventListener","body","background","backgroundSize","setFullYear","includes","arryKeyValue","c","arrySplit","trim","substr","btnUpCount","btnUpPhase","btnTarget","app"],"mappings":"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","file":"static/js/main.143f71d5.chunk.js","sourcesContent":["/**\r\n * @license\r\n * Copyright 2021 Google LLC. All Rights Reserved.\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * =============================================================================\r\n */\r\n\r\n\r\nexport const DEFAULT_LINE_WIDTH = 2;\r\nexport const DEFAULT_RADIUS = 4;\r\n\r\nexport const VIDEO_SIZE = {\r\n '640 X 480': {width: 640, height: 480},\r\n '640 X 360': {width: 640, height: 360},\r\n '360 X 270': {width: 360, height: 270}\r\n};\r\nexport const STATE = {\r\n camera: {targetFPS: 60, sizeOption: '640 X 480'},\r\n backend: 'webgl',\r\n flags: {},\r\n modelConfig: {}\r\n};\r\nexport const BLAZEPOSE_CONFIG = {\r\n maxPoses: 1,\r\n scoreThreshold: 0.65\r\n};\r\nexport const POSENET_CONFIG = {\r\n maxPoses: 1,\r\n scoreThreshold: 0.5\r\n};\r\nexport const MOVENET_CONFIG = {\r\n maxPoses: 1,\r\n type: 'lightning',\r\n scoreThreshold: 0.3\r\n};\r\n/**\r\n * This map descripes tunable flags and theior corresponding types.\r\n *\r\n * The flags (keys) in the map satisfy the following two conditions:\r\n * - Is tunable. For example, `IS_BROWSER` and `IS_CHROME` is not tunable,\r\n * because they are fixed when running the scripts.\r\n * - Does not depend on other flags when registering in `ENV.registerFlag()`.\r\n * This rule aims to make the list streamlined, and, since there are\r\n * dependencies between flags, only modifying an independent flag without\r\n * modifying its dependents may cause inconsistency.\r\n * (`WEBGL_RENDER_FLOAT32_CAPABLE` is an exception, because only exposing\r\n * `WEBGL_FORCE_F16_TEXTURES` may confuse users.)\r\n */\r\nexport const TUNABLE_FLAG_VALUE_RANGE_MAP = {\r\n WEBGL_VERSION: [1, 2],\r\n WASM_HAS_SIMD_SUPPORT: [true, false],\r\n WASM_HAS_MULTITHREAD_SUPPORT: [true, false],\r\n WEBGL_CPU_FORWARD: [true, false],\r\n WEBGL_PACK: [true, false],\r\n WEBGL_FORCE_F16_TEXTURES: [true, false],\r\n WEBGL_RENDER_FLOAT32_CAPABLE: [true, false],\r\n WEBGL_FLUSH_THRESHOLD: [-1, 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\r\n CHECK_COMPUTATION_FOR_ERRORS: [true, false],\r\n};\r\n\r\nexport const BACKEND_FLAGS_MAP = {\r\n wasm: ['WASM_HAS_SIMD_SUPPORT', 'WASM_HAS_MULTITHREAD_SUPPORT'],\r\n webgl: [\r\n 'WEBGL_VERSION', 'WEBGL_CPU_FORWARD', 'WEBGL_PACK',\r\n 'WEBGL_FORCE_F16_TEXTURES', 'WEBGL_RENDER_FLOAT32_CAPABLE',\r\n 'WEBGL_FLUSH_THRESHOLD'\r\n ]\r\n};\r\n\r\nexport const TUNABLE_FLAG_NAME_MAP = {\r\n PROD: 'production mode',\r\n WEBGL_VERSION: 'webgl version',\r\n WASM_HAS_SIMD_SUPPORT: 'wasm SIMD',\r\n WASM_HAS_MULTITHREAD_SUPPORT: 'wasm multithread',\r\n WEBGL_CPU_FORWARD: 'cpu forward',\r\n WEBGL_PACK: 'webgl pack',\r\n WEBGL_FORCE_F16_TEXTURES: 'enforce float16',\r\n WEBGL_RENDER_FLOAT32_CAPABLE: 'enable float32',\r\n WEBGL_FLUSH_THRESHOLD: 'GL flush wait time(ms)'\r\n};\r\n","/**\r\n * @license\r\n * Copyright 2021 Google LLC. All Rights Reserved.\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * =============================================================================\r\n */\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport {TUNABLE_FLAG_VALUE_RANGE_MAP} from './params';\r\n\r\nexport const drawRect = (detections, ctx) =>{\r\n // Loop through each prediction\r\n detections.forEach(prediction => {\r\n\r\n // Extract boxes and classes\r\n const [x, y, width, height] = prediction['bbox']; \r\n const text = prediction['class']; \r\n\r\n if (text.includes(\"racket\")){\r\n \r\n // Set styling\r\n const color = Math.floor(Math.random()*16777215).toString(16);\r\n ctx.strokeStyle = '#' + color\r\n ctx.font = '18px Arial';\r\n\r\n // Draw rectangles and text\r\n ctx.beginPath(); \r\n ctx.fillStyle = '#' + color\r\n\r\n ctx.rect(x, y, width, height); \r\n ctx.stroke();\r\n\r\n\r\n\r\n }\r\n\r\n });\r\n}\r\n\r\nexport function isMobile() {\r\n const isAndroid = /Android/i.test(navigator.userAgent);\r\n const isiOS = /iPhone|iPad|iPod/i.test(navigator.userAgent);\r\n return isAndroid || isiOS;\r\n}\r\n\r\n/**\r\n * Reset the target backend.\r\n *\r\n * @param backendName The name of the backend to be reset.\r\n */\r\nasync function resetBackend(backendName) {\r\n const ENGINE = tf.engine();\r\n if (!(backendName in ENGINE.registryFactory)) {\r\n throw new Error(`${backendName} backend is not registed.`);\r\n }\r\n\r\n if (backendName in ENGINE.registry) {\r\n const backendFactory = tf.findBackendFactory(backendName);\r\n tf.removeBackend(backendName);\r\n tf.registerBackend(backendName, backendFactory);\r\n }\r\n\r\n await tf.setBackend(backendName);\r\n}\r\n\r\n/**\r\n * Set environment flags.\r\n *\r\n * This is a wrapper function of `tf.env().setFlags()` to constrain users to\r\n * only set tunable flags (the keys of `TUNABLE_FLAG_TYPE_MAP`).\r\n *\r\n * ```js\r\n * const flagConfig = {\r\n * WEBGL_PACK: false,\r\n * };\r\n * await setEnvFlags(flagConfig);\r\n *\r\n * console.log(tf.env().getBool('WEBGL_PACK')); // false\r\n * console.log(tf.env().getBool('WEBGL_PACK_BINARY_OPERATIONS')); // false\r\n * ```\r\n *\r\n * @param flagConfig An object to store flag-value pairs.\r\n */\r\nexport async function setBackendAndEnvFlags(flagConfig, backend) {\r\n if (flagConfig == null) {\r\n return;\r\n } else if (typeof flagConfig !== 'object') {\r\n throw new Error(\r\n `An object is expected, while a(n) ${typeof flagConfig} is found.`);\r\n }\r\n\r\n // Check the validation of flags and values.\r\n for (const flag in flagConfig) {\r\n // TODO: check whether flag can be set as flagConfig[flag].\r\n if (!(flag in TUNABLE_FLAG_VALUE_RANGE_MAP)) {\r\n throw new Error(`${flag} is not a tunable or valid environment flag.`);\r\n }\r\n if (TUNABLE_FLAG_VALUE_RANGE_MAP[flag].indexOf(flagConfig[flag]) === -1) {\r\n throw new Error(\r\n `${flag} value is expected to be in the range [${\r\n TUNABLE_FLAG_VALUE_RANGE_MAP[flag]}], while ${flagConfig[flag]}` +\r\n ' is found.');\r\n }\r\n }\r\n\r\n tf.env().setFlags(flagConfig);\r\n\r\n await resetBackend(backend);\r\n}\r\n","/**\r\n * @license\r\n * Copyright 2021 Google LLC. All Rights Reserved.\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * =============================================================================\r\n */\r\nimport * as posedetection from '@tensorflow-models/pose-detection';\r\n\r\nimport * as params from './params';\r\nimport {isMobile} from './util';\r\n\r\nexport class Camera {\r\n \r\n constructor() {\r\n this.video = document.getElementById('video');\r\n this.canvas = document.getElementById('output');\r\n this.ctx = this.canvas.getContext('2d');\r\n }\r\n\r\n /**\r\n * Initiate a Camera instance and wait for the camera stream to be ready.\r\n * @param cameraParam From app `STATE.camera`.\r\n */\r\n static async setupCamera(cameraParam) {\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\r\n throw new Error(\r\n 'This site requires a functional camera.');\r\n }\r\n \r\n const {targetFPS, sizeOption} = cameraParam;\r\n const $size = params.VIDEO_SIZE[sizeOption];\r\n const videoConfig = {\r\n 'audio': false,\r\n 'video': {\r\n facingMode: 'user',\r\n // Only setting the video to a specified size for large screen, on\r\n // mobile devices accept the default size.\r\n width: isMobile() ? params.VIDEO_SIZE['640 X 480'].width : $size.width,\r\n height: isMobile() ? params.VIDEO_SIZE['640 X 480'].height :\r\n $size.height,\r\n frameRate: {\r\n ideal: targetFPS,\r\n }\r\n }\r\n };\r\n \r\n const stream = await navigator.mediaDevices.getUserMedia(videoConfig);\r\n \r\n const camera = new Camera();\r\n camera.video.srcObject = stream;\r\n \r\n \r\n await new Promise((resolve) => {\r\n camera.video.onloadedmetadata = (video) => {\r\n resolve(video);\r\n //resolve();\r\n };\r\n });\r\n \r\n camera.video.play();\r\n \r\n const videoWidth = camera.video.videoWidth;\r\n const videoHeight = camera.video.videoHeight;\r\n // Must set below two lines, otherwise video element doesn't show.\r\n var sFactor=1, vsFactor=1;\r\n\r\n if (window.screen.height > window.screen.width ){ // portrait\r\n\r\n\r\n camera.video.width = videoWidth;\r\n camera.video.height = videoHeight;\r\n \r\n camera.canvas.width = videoWidth;\r\n camera.canvas.height = videoHeight;\r\n\r\n if(window.screen.width < videoWidth){\r\n sFactor = window.screen.width/videoWidth;\r\n }\r\n\r\n }else {\r\n\r\n if (window.screen.height>=720 && window.screen.width>=960 ){\r\n\r\n camera.video.width = videoWidth;\r\n camera.video.height = videoHeight;\r\n \r\n camera.canvas.width = videoWidth;\r\n camera.canvas.height = videoHeight;\r\n\r\n }else if (window.screen.height >= videoHeight && window.screen.width >= videoWidth){\r\n camera.video.width = videoWidth;\r\n camera.video.height = videoHeight;\r\n \r\n camera.canvas.width = videoWidth;\r\n camera.canvas.height = videoHeight;\r\n\r\n\r\n }else{\r\n\r\n camera.video.width = videoWidth;\r\n camera.video.height = videoHeight;\r\n \r\n camera.canvas.width = videoWidth;\r\n camera.canvas.height = videoHeight;\r\n\r\n if(window.screen.width < videoWidth){\r\n sFactor = window.screen.width/videoWidth;\r\n }\r\n }\r\n \r\n\r\n }\r\n\r\n \r\n // const canvasContainer = document.querySelector('.canvas-wrapper');\r\n // canvasContainer.style = `width: ${camera.video.width}px; height: ${camera.video.height}px`;\r\n \r\n\r\n //canvasContainer.style = `width: 100%; height: 100%`; output\r\n \r\n // Because the image from camera is mirrored, need to flip horizontally.\r\n camera.ctx.translate(camera.video.videoWidth*sFactor, 0);\r\n //camera.ctx.translate(camera.video.width, 0);\r\n camera.ctx.scale(-1*sFactor , sFactor);\r\n \r\n return camera;\r\n }\r\n\r\n \r\n drawCtx() {\r\n this.ctx.drawImage(\r\n this.video, 0, 0, this.video.videoWidth, this.video.videoHeight);\r\n }\r\n\r\n clearCtx() {\r\n this.ctx.clearRect(0, 0, this.video.videoWidth, this.video.videoHeight);\r\n }\r\n\r\n\r\n stopVideo() {\r\n const stream = this.video.srcObject;\r\n const tracks = stream.getTracks();\r\n \r\n tracks.forEach(function(track) {\r\n track.stop();\r\n });\r\n \r\n\r\n //tracks[0].stop();\r\n this.video.srcObject = null;\r\n }\r\n videoStop(){\r\n\r\n this.video.pause();\r\n this.video.srcObject = \"\";\r\n\r\n }\r\n\r\n drawRect(boxVal){\r\n\r\n const [x, y, width, height] = boxVal['bbox']; \r\n const color = Math.floor(Math.random()*16777215).toString(16);\r\n this.ctx.strokeStyle = '#' + color\r\n \r\n\r\n // Draw rectangles and text\r\n this.ctx.beginPath(); \r\n this.ctx.fillStyle = '#' + color\r\n\r\n this.ctx.rect(x, y, width, height); \r\n this.ctx.stroke();\r\n }\r\n\r\n /**\r\n * Draw the keypoints and skeleton on the video.\r\n * @param poses A list of poses to render.\r\n */\r\n drawResults(poses) {\r\n for (const pose of poses) {\r\n this.drawResult(pose);\r\n }\r\n }\r\n\r\n /**\r\n * Draw the keypoints and skeleton on the video.\r\n * @param pose A pose with keypoints to render.\r\n */\r\n drawResult(pose) {\r\n if (pose.keypoints != null) {\r\n this.drawKeypoints(pose.keypoints);\r\n this.drawSkeleton(pose.keypoints);\r\n }\r\n }\r\n\r\n\r\n\r\n /**\r\n * Draw the keypoints on the video.\r\n * @param keypoints A list of keypoints.\r\n */\r\n drawKeypoints(keypoints) {\r\n const keypointInd =\r\n posedetection.util.getKeypointIndexBySide(params.STATE.model);\r\n this.ctx.fillStyle = 'White';\r\n this.ctx.strokeStyle = 'White';\r\n this.ctx.lineWidth = params.DEFAULT_LINE_WIDTH;\r\n\r\n for (const i of keypointInd.middle) {\r\n this.drawKeypoint(keypoints[i]);\r\n }\r\n\r\n this.ctx.fillStyle = 'Green';\r\n for (const i of keypointInd.left) {\r\n this.drawKeypoint(keypoints[i]);\r\n }\r\n\r\n this.ctx.fillStyle = 'Orange';\r\n for (const i of keypointInd.right) {\r\n this.drawKeypoint(keypoints[i]);\r\n }\r\n }\r\n\r\n drawKeypoint(keypoint) {\r\n // If score is null, just show the keypoint.\r\n const score = keypoint.score != null ? keypoint.score : 1;\r\n const scoreThreshold = params.STATE.modelConfig.scoreThreshold || 0;\r\n\r\n if (score >= scoreThreshold) {\r\n const circle = new Path2D();\r\n circle.arc(keypoint.x, keypoint.y, params.DEFAULT_RADIUS, 0, 2 * Math.PI);\r\n this.ctx.fill(circle);\r\n this.ctx.stroke(circle);\r\n }\r\n }\r\n\r\n /**\r\n * Draw the skeleton of a body on the video.\r\n * @param keypoints A list of keypoints.\r\n */\r\n drawSkeleton(keypoints) {\r\n this.ctx.fillStyle = 'White';\r\n this.ctx.strokeStyle = 'White';\r\n this.ctx.lineWidth = params.DEFAULT_LINE_WIDTH;\r\n\r\n posedetection.util.getAdjacentPairs(params.STATE.model).forEach(([\r\n i, j\r\n ]) => {\r\n const kp1 = keypoints[i];\r\n const kp2 = keypoints[j];\r\n\r\n // If score is null, just show the keypoint.\r\n const score1 = kp1.score != null ? kp1.score : 1;\r\n const score2 = kp2.score != null ? kp2.score : 1;\r\n const scoreThreshold = params.STATE.modelConfig.scoreThreshold || 0;\r\n\r\n if (score1 >= scoreThreshold && score2 >= scoreThreshold) {\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(kp1.x, kp1.y);\r\n this.ctx.lineTo(kp2.x, kp2.y);\r\n this.ctx.stroke();\r\n }\r\n });\r\n }\r\n\r\n drawPic(imgEle, ptXY,width,height){\r\n\r\n \r\n this.ctx.drawImage(imgEle,ptXY.x,ptXY.y,width,height);\r\n }\r\n\r\n drawRotatePic(imgEle, ptXY,width,height, angDegress){\r\n\r\n var x = this.canvas.width/2;\r\n var y = this.canvas.height/2;\r\n\r\n var TO_RADIANS = Math.PI/180; \r\n var angleInRadians = angDegress*TO_RADIANS;\r\n\r\n this.ctx.translate(x, y);\r\n this.ctx.rotate(angleInRadians);\r\n this.ctx.drawImage(imgEle, -width / 2, (-height / 2)-ptXY.y , width, height);\r\n //this.ctx.drawImage(imgEle, -width / 2, -ptXY.y , width, height);\r\n \r\n\r\n this.ctx.rotate(-angleInRadians);\r\n this.ctx.translate(-x, -y);\r\n\r\n }\r\n\r\n drawRotateDropPic(imgEle, ptXY,width,height, angDegress){\r\n\r\n /*\r\n\r\n var x = this.canvas.width/2;\r\n var y = this.canvas.height/2;\r\n\r\n */\r\n\r\n let x = ptXY.x\r\n let y = ptXY.y;\r\n\r\n var TO_RADIANS = Math.PI/180; \r\n var angleInRadians = angDegress*TO_RADIANS;\r\n\r\n if (angDegress===225)\r\n y+= 0.5*height;\r\n else if (angDegress===270)\r\n y+= height;\r\n else if (angDegress===315)\r\n y+= 1.5*height;\r\n\r\n this.ctx.translate(x, y);\r\n this.ctx.rotate(angleInRadians);\r\n this.ctx.drawImage(imgEle, -width/2, -height/2, width, height);\r\n // this.ctx.drawImage(imgEle, -width/2, -height/2, width, height);\r\n //this.ctx.drawImage(imgEle, (-width/2), (-height / 2)-ptXY.y , width, height);\r\n //this.ctx.drawImage(imgEle, -width / 2, -ptXY.y , width, height);\r\n \r\n\r\n this.ctx.rotate(-angleInRadians);\r\n this.ctx.translate(-x, -y);\r\n\r\n }\r\n\r\n drawTarget(x,y,size) {\r\n\r\n this.ctx.fillStyle = 'Red';\r\n this.ctx.strokeStyle = 'White';\r\n this.ctx.lineWidth = params.DEFAULT_LINE_WIDTH;\r\n\r\n const circle = new Path2D();\r\n circle.arc(x, y, size, 0, 2 * Math.PI);\r\n this.ctx.fill(circle);\r\n this.ctx.stroke(circle);\r\n\r\n }\r\n\r\n \r\n\r\n}\r\n","// Folks game: with clean background. change animation for dust and coupon so dun go outside canvas\n// 6 Jul 22: remove checking for browsers\n// 21 Jul 22: Added build functionality\n// 2 Oct 22: stop start music\n\n\n\n/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n import '@tensorflow/tfjs-backend-webgl';\n\n import * as tfjsWasm from '@tensorflow/tfjs-backend-wasm';\n \n\n //import * as posenet from '@tensorflow-models/posenet';\n\n import * as posedetection from '@tensorflow-models/pose-detection';\n\n //import * as cocossd from \"@tensorflow-models/coco-ssd\";\n \n\nimport * as tf from '@tensorflow/tfjs';\n \n import {Camera} from './camera';\n \n import {STATE} from './params';\n\n import {setBackendAndEnvFlags} from './util';\nimport { Log, logicalAnd, truncatedNormal } from '@tensorflow/tfjs-core';\nimport { time } from '@tensorflow/tfjs';\nimport { getTextureShapeFromLogicalShape } from '@tensorflow/tfjs-backend-webgl/dist/webgl_util';\nimport { stat } from 'browserify-fs';\n \n tfjsWasm.setWasmPaths(\n `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${\n tfjsWasm.version_wasm}/dist/`);\n \nvar stats = require(\"stats-lite\");\n\nlet detector, camera, net,dObj;\n\nlet rafId;\nvar arryLen; \nvar data, startTime, timeLapsed=0, b_timer,ls_log=\"\";\n\nvar s_myID=\"\",ad_countDown = new Audio(), ad_chickBitten = new Audio(), ad_shuttle = new Audio(), ad_tick = new Audio()\n, ad_lastChick = new Audio(),ad_background= new Audio(),ad_charging = new Audio(),ad_snake=new Audio(),ad_ulti=new Audio()\n,sSnakeCount,sLevel, n_outPtTime=0,b_SI=true,n_startRestPoseTime=-1, n_1PerLoadTime=18;\n\n//mode: 0 tutorial, 1 challenge, 2 coachLed;\nvar n_mode=1,o_animate,o_hrm, n_state=-3,ln_SStdev=1.5, n_stablizingTime=1.5, n_waveTime=0,n_lastWBLRequest=-6\n,n_pollingFreq=5,n_initSpawnTime=2, n_initGTime=20,n_initEatTime=18, n_bannerDecoTime=5,s_pc=\"\", utterVoice\n,b_waveReadyPrompt=false,n_breakTime=10, ln_utterSpeed = 1, b_notSpeaking=true,n_maxLevel=5, s_waitingStatus=\"\", s_waitingRemarks=\"\"\n,s_nick=\"\",s_mobile=\"\",s_email=\"\",b_notSending=true,s_recID=\"\",n_diff=0.3,n_server=1,n_selection=0,b_showLine=false\n, b_skipframe = false, dExpiry, userInfo=\"\", s_winning=\"F\", n_consolationNum=-1,n_poseLookBack=6;\n\n\nvar b_showBall=false,ln_lastSpawn=0,arryAnimateObj=[],arryExistingIndex=[],ln_videoWidth=0,b_exPose=false,ln_promptTime=-11,n_scoreCount=0\n,n_wSFactor=1,n_vSFactor=1,b_moveTree=false,o_tree,ln_clicks=0,b_moveLeft=true, ln_configRA=12, arry_prevPts=[]\n,s_comment=\"\", s_prevComment=\"\", n_lastCommentTime=-1,bx, by, bwidth, bheight, n_level=0, n_phase=-1, n_upLimbScore=0,b_actualPlay=true\n,d_lastPlay,d_lastReward,n_myCoupon,n_tierAchieved,s_name=\"\", s_teamName=\"\",b_initLoad=true,b_predict=true\n, b_displayTime=true,n_sceneID, n_predictID,n_commentID\n,n_BLlha=0,n_BLlka=0,n_BLrha=0,n_BLrka=0, b_inEx=true,n_bannerY=0, s_ckAngles=\"\";\n\nvar audioCtx = new AudioContext(),song = new Audio(), source, gainNode,arry_safety=[];\n\n\nvar objPartIndexMap={n:0, le:2, re:5,\n li:19,ri:20,\n lm:9,rm:10,\n lw:15,rw:16,\n lfi:31,rfi:32,\n leb:13,reb:14,\n ls:11,rs:12,\n lh:23,rh:24\n\n };\n\nvar exObj;\n\nvar synth = window.speechSynthesis;\nvar utterThis = new SpeechSynthesisUtterance();\n\n\n\n///Display and Sound Functions\n\nfunction assessOverHead(apl){\n\n logIt(\"in assessOverHead\");\n\n logIt(\"apl[15].y-35 && getSignedANGXY(apl[11],apl[13])<15\n && getSignedANGXY(apl[12],apl[14])>-15 && getSignedANGXY(apl[12],apl[14])<35){\n\n return true;\n\n }else{\n return false;\n }\n\n}\n\nfunction assessWideElbows(apl){\n\n logIt(\"in assessWideElbow\");\n logIt(\"apl[15].y apl[11].x: \"+(apl[13].x> apl[11].x)+\" apl[12].x> apl[14].x:\" +(apl[12].x> apl[14].x) );\n logIt(\"getANGXY(apl[11],apl[15])>60: \"+(getANGXY(apl[11],apl[15])>40)+\" getANGXY(apl[12],apl[14])>60:\" +(getANGXY(apl[12],apl[16])>40) );\n logIt(\"getANGXY(apl[13],apl[15])<20: \"+(getANGXY(apl[13],apl[15])<40)+\" getANGXY(apl[14],apl[16])<20:\" +(getANGXY(apl[14],apl[16])<40) );\n if (\n apl[15].y apl[11].x && apl[12].x> apl[14].x //lebX > lsX, rsX>rebX \n && getANGXY(apl[11],apl[15])>40 && getANGXY(apl[12],apl[16])>40 //abs(ANG sw)>60\n && getANGXY(apl[13],apl[15])<40 && getANGXY(apl[14],apl[16])<40 //abs(ANG ebw)<20\n ){\n\n return true;\n\n }else{\n return false;\n }\n\n} \n\nfunction assessArmsStrDown(apl){\n\n logIt(\"in assessArmsStrDown\");\n logIt(\"apl[19].x>apl[23].x: \"+(apl[19].x>apl[23].x) +\" apl[20].x< apl[24].x:\" +(apl[20].x< apl[24].x) );\n logIt(\"apl[19].y> apl[23].y: \"+(apl[19].y> apl[23].y)+\" apl[20].y> apl[24].y:\" +(apl[20].y> apl[24].y) );\n logIt(\"apl[13].y< apl[23].y: \"+(apl[13].y< apl[23].y)+\" apl[14].y< apl[24].y:\" +(apl[14].y< apl[24].y) );\n logIt(\"getSignedANGXY(apl[11],apl[13]): \"+(getSignedANGXY(apl[11],apl[13]))+\" getSignedANGXY(apl[12],apl[14]):\" +(getSignedANGXY(apl[12],apl[14])) );\n logIt(\"getSignedANGXY(apl[11],apl[15]): \"+(getSignedANGXY(apl[11],apl[15]))+\" getSignedANGXY(apl[12],apl[16]):\" +(getSignedANGXY(apl[12],apl[16])) );\n\n var Lhs10pY = (apl[23].y - apl[11].y)*0.2;\n var Rhs10pY = (apl[24].y - apl[12].y)*0.2;\n\n if (\n apl[19].x>apl[23].x && apl[20].x< apl[24].x //LiX > LhX, RiX < RhX\n && apl[19].y> apl[23].y-Lhs10pY && apl[20].y> apl[24].y-Rhs10pY //LiY > LhY, RiY > RhY\n && apl[13].y< apl[23].y && apl[14].y< apl[24].y //LebY < LhY, RebY< RhY\n\n && getSignedANGXY(apl[11],apl[13])>-5 && getSignedANGXY(apl[11],apl[13])<20 //0-20 && getSignedANGXY(apl[12],apl[14])<5 //-155 && getSignedANGXY(apl[11],apl[15])<25 //10-25 && getSignedANGXY(apl[12],apl[16])<-5 //-20apl[11].y: \"+(apl[13].y>apl[11].y) +\" apl[14].y> apl[12].y:\" +(apl[14].y> apl[12].y) );\n logIt(\"apl[13].y>apl[15].y: \"+(apl[13].y>apl[15].y)+\" apl[14].y> apl[16].y:\" +(apl[14].y> apl[16].y) );\n logIt(\"apl[13].y< apl[23].y: \"+(apl[13].y< apl[23].y)+\" apl[14].y< apl[24].y:\" +(apl[14].y< apl[24].y) );\n logIt(\"getSignedANGXY(apl[11],apl[13]): \"+(getSignedANGXY(apl[11],apl[13]))+\" getSignedANGXY(apl[12],apl[14]):\" +(getSignedANGXY(apl[12],apl[14])) );\n logIt(\"getANGby3Points(apl[11],apl[13],apl[15]): \"+(getANGby3Points(apl[11],apl[13],apl[15]))+\" getANGby3Points(apl[12],apl[14],apl[16]):\" +(getANGby3Points(apl[12],apl[14],apl[16])) );\n\n\n if (\n apl[13].y>apl[11].y && apl[14].y> apl[12].y //ebY > sY\n && apl[13].y>apl[15].y && apl[14].y> apl[16].y //ebY > wY\n && apl[13].y< apl[23].y && apl[14].y< apl[24].y //LebY < LhY0, RebY< RhY\n\n && getSignedANGXY(apl[11],apl[13])>-10 && getSignedANGXY(apl[11],apl[13])<25 //-5-25 && getSignedANGXY(apl[12],apl[14])<10 //-15-20 && getANGby3Points(apl[11],apl[13],apl[15])<20 //-20 -20 && getANGby3Points(apl[12],apl[14],apl[16])<20 //-20 0.6 && nRsebX/nLRsX>0.6 \n // && nLwebX/nLRsX>0.45 && nRebwX/nLRsX>0.45 //lebX > lsX, rsX>rebX \n apl[15].x - apl[11].x > nLRsX\n && apl[12].x - apl[16].x > nLRsX\n && getANGXY(apl[11],apl[13])>65 && getANGXY(apl[12],apl[14])>65 //Abs(ANG Lseb)\tAbs(ANG Rseb)>65\n && getANGXY(apl[11],apl[15])>65 && getANGXY(apl[12],apl[16])>65 //Abs(ANG Lsw)\tAbs(ANG Rsw) >65\n ){\n\n return true;\n\n }else{\n return false;\n }\n\n\n}\n\n\n\nclass climberObj{\n constructor(anChestHeight,anChestWidth, anChestOffsetY, anCanvasWidth,anCanvasHeight){\n\n this.nLevel=0;\n this.nChestHeight = anChestHeight;\n this.nChestWidth = anChestWidth\n \n this.nChestOffsetY = anChestOffsetY;\n //this.nClimbPhase=-1;\n\n this.nCanvasWidth = anCanvasWidth;\n this.nPhase = -1;\n this.nTarget = 5;\n this.nUpDist = anCanvasHeight/this.nTarget;\n\n }\n\n reset(){\n this.nLevel=0;\n this.nPhase = -1;\n\n }\n\n show(){\n \n if (this.nPhase>-1){\n\n var nY =0;\n if (this.nLevel>4){\n nY = this.nCanvasHeight - this.nChestHeight;\n }else{\n nY = (this.nLevel*this.nUpDist)-this.nChestHeight + this.nChestOffsetY;\n }\n creImage(\"T_chestClosed.png\", 0 ,nY,this.nChestWidth,this.nChestHeight);\n\n\n }else if (this.nPhase === -1){\n\n creImage(\"climbStart.PNG\", 0.1* camera.canvas.width,0.1* camera.canvas.height, 0.8*camera.canvas.width, 0.8*camera.canvas.height )\n \n }\n\n //document.getElementById('scoreCount').innerText =\"p:\"+ this.nPhase+ \", l:\"+ this.nLevel;\n\n }\n\n\n\n assess(apl,aTimeLapsed){\n\n if(this.nPhase>0){\n\n if (this.nPhase===1){ // overhead\n \n if (assessOverHead(apl)){ \n setComment(aTimeLapsed, \"Down\");\n PlaySound(ad_shuttle,\"grab.mp3\",false);\n this.nPhase = 2;\n\n }else{\n //setComment(aTimeLapsed, \"Reach up high!\");\n }\n \n }else if (this.nPhase===2){ // go right\n \n if (assessWideElbows(apl)){\n \n PlaySound(ad_shuttle,\"pullDown.mp3\",false);\n \n this.nLevel++;\n if (this.nLevel < this.nTarget){\n setComment(aTimeLapsed, \"Up!\");\n }\n this.nPhase = 1;\n \n }else{\n //setComment(aTimeLapsed, \"Pull!\");\n }\n \n }\n\n if ( this.nLevel===this.nTarget){\n this.reset();\n n_level=0;\n n_phase=-1;\n\n //document.getElementById('scoreCount').innerText =\"p:\"+ n_phase+ \", l:\"+ n_level;\n\n return true;\n }\n \n\n }else if (this.nPhase===-1){\n\n if (assessWideElbows(apl)){\n \n setComment(aTimeLapsed,\"Pull down the treasure!\");\n \n this.nPhase = 1;\n\n }else{\n\n setComment(aTimeLapsed,\"Ready for another treasure chest?\");\n }\n\n }\n\n \n\n return false;\n\n }\n\n}\n\nclass swingObj{\n constructor(anChestHeight,anChestWidth, anChestOffsetY, anCanvasWidth,anCanvasHeight){\n\n this.nLevel=0;\n this.nChestHeight = anChestHeight;\n this.nChestWidth = anChestWidth;\n this.nCanvasWidth = anCanvasWidth;\n this.nCanvasHeight = anCanvasHeight;\n //this.nUpDist = anUpDist;\n this.nChestOffsetY = anChestOffsetY;\n \n this.nPhase = -1;\n this.nTarget = 5;\n\n this.nAnimateTimeStartTime = -1;\n this.nCurrentTime = -1;\n\n this.pLFlyDist = {xD:0,yD:0};\n this.pRFlyDist = {xD:0,yD:0};\n this.nCoinLength = 0.4*this.nChestHeight;\n\n }\n\n reset(){\n this.nLevel=0;\n this.nPhase = -1;\n\n }\n\n show(){\n\n if (this.nPhase===2){\n\n\n creImage(\"T_chestClosed.png\", 0 ,0.5*this.nCanvasHeight - 0.5*this.nChestHeight,this.nChestWidth,this.nChestHeight);\n creImage(\"T_dustCloudC.png\", 0 ,0,this.nChestWidth,0.5*this.nCanvasHeight);\n\n\n }else if (this.nPhase === 4){\n \n creImage(\"T_chestClosed.png\", 0 ,0.5*this.nCanvasHeight - 0.5*this.nChestHeight,this.nChestWidth,this.nChestHeight);\n\n creRotatedImage(\"T_dustCloudC.png\", 0 ,0.3*this.nCanvasHeight ,this.nChestWidth,0.5*this.nCanvasHeight, 180);\n //creImage(\"T_dustCloudC.png\", 0 ,0.5*this.nCanvasHeight,this.nChestWidth,0.5*this.nCanvasHeight);\n\n }else if (this.nPhase === 1 ||this.nPhase===3){\n\n creImage(\"T_chestClosed.png\", 0 ,0.5*this.nCanvasHeight - 0.5*this.nChestHeight,this.nChestWidth,this.nChestHeight);\n \n\n }else if (this.nPhase === -1){\n\n creImage(\"swingStart.PNG\", 0.1*camera.canvas.width ,0.1*camera.canvas.height,0.8*camera.canvas.width,0.8*camera.canvas.height);\n\n } \n\n }\n\n \n\n assess(apl,aTimeLapsed){\n\n if(this.nPhase>0){\n\n if (this.nPhase===1){ // wide arms\n \n if (assessArmsSpread(apl)){ \n //setComment(aTimeLapsed, \"Pull!\");\n PlaySound(ad_shuttle,\"wipe.mp3\",false);\n this.nPhase = 2;\n \n\n }else{\n setComment(aTimeLapsed, \"Spread arms wide!\");\n }\n \n \n }else if (this.nPhase===2){ // Overhead\n \n if (assessOverHead(apl)){\n \n setComment(aTimeLapsed, \"Swing!\");\n this.nPhase = 3;\n \n }else{\n //setComment(aTimeLapsed, \"Pull!\");\n } \n \n }else if (this.nPhase===3){ // downward wide arms\n\n if (assessArmsSpread(apl)){ \n\n PlaySound(ad_shuttle,\"wipe.mp3\",false);\n this.nPhase = 4;\n \n\n }else{\n //setComment(aTimeLapsed, \"Reach up high!\");\n }\n \n\n }else if (this.nPhase===4){ // arms str down\n\n\n if (assessArmsStrDown(apl)){\n \n this.nLevel++;\n if ( this.nLevel < this.nTarget)\n setComment(aTimeLapsed,\"Swing!\");\n\n this.nPhase = 1; \n \n n_upLimbScore = n_upLimbScore +8;\n //document.getElementById('scoreCount').innerText = n_upLimbScore;\n \n }else{\n \n //setComment(aTimeLapsed,\"Into swing position.\");\n }\n\n }\n\n \n\n if ( this.nLevel===this.nTarget){\n \n this.reset();\n\n n_level=0;\n n_phase=-1;\n\n return true;\n }\n \n\n }else if (this.nPhase===-1){\n\n if (assessArmsStrDown(apl)){\n \n setComment(aTimeLapsed,\"Clean the treasure chest!\");\n this.nPhase = 1;\n \n }else{\n\n setComment(aTimeLapsed,\"Clean position.\");\n }\n\n }\n\n return false;\n\n }\n\n}\n\nclass liftObj{\n constructor(anChestHeight,anChestWidth, anChestOffsetY, anCanvasWidth,anCanvasHeight){\n\n this.nLevel=0;\n this.nChestHeight = anChestHeight;\n this.nChestWidth = anChestWidth;\n this.nCanvasWidth = anCanvasWidth;\n this.nCanvasHeight = anCanvasHeight;\n //this.nUpDist = anUpDist;\n this.nChestOffsetY = anChestOffsetY;\n\n this.nGoldWidth = 0.35*anCanvasWidth;\n this.nGoldHeight = 0.6*anCanvasHeight;\n\n this.nGoldIngotWidth = 10;\n this.nGoldIngotHeight = 10;\n\n this.pLi = {x:0,y:0};\n this.pRi = {x:0,y:0};\n \n this.nPhase = -1;\n this.nTarget = 5;\n\n this.nEndimationTime = -1;\n this.nSpinTime = 0;\n this.nEndimationSteps = 0;\n this.n_consolationNum = -1;\n this.bAnimationCompleted=false;\n\n }\n\n reset(){\n this.nLevel=0;\n this.nPhase = -1;\n this.nEndimationTime=-1;\n this.bAnimationCompleted=false;\n this.n_consolationNum = -1;\n this.nEndimationSteps=0;\n\n }\n\n show(){\n\n if ( this.nLevel 0){\n\n if (prizeRandomizer(150)){\n\n s_winning = \"T\";\n //PostUpdateRec(s_mobile,\"T\",dExpiry,userInfo);\n \n }\n \n PostUpdateRec(s_mobile,s_winning,dExpiry,userInfo);\n\n\n }\n\n\n }\n\n if (this.nEndimationTime > timeLapsed){\n creImage(\"T_chestOpenBig.png\", 0 ,this.nCanvasHeight - this.nChestHeight,this.nChestWidth,this.nChestHeight);\n\n\n if (this.nEndimationSteps ===0)\n setComment(timeLapsed,\"Congrats!\");\n\n if (this.nEndimationSteps < 18){\n\n creRotatedImage(\"T_couponVoucherGrey.png\", 0 ,0.25*this.nCanvasHeight ,(40 + this.nEndimationSteps*2)/100 *this.nCanvasWidth,(40 + this.nEndimationSteps*2)/100*this.nCanvasHeight, this.nEndimationSteps*45);\n\n if (timeLapsed > this.nSpinTime){\n\n this.nEndimationSteps++;\n this.nSpinTime = timeLapsed + 0.1;\n\n }\n\n\n }else if (this.nEndimationSteps===18){\n\n this.nEndimationSteps++;\n logIt(\" in step 18 step value:\" + this.nEndimationSteps);\n if (s_winning === \"T\"){\n\n setComment(timeLapsed,\"You won voucher!\" );\n\n creImage(\"T_couponVoucher.png\", 0.125*this.nCanvasWidth ,0.125*this.nCanvasHeight ,0.75*this.nCanvasWidth,0.75*this.nCanvasHeight);\n \n //s_winning = \"F\";\n\n }else{\n\n if (this.n_consolationNum===-1){\n this.n_consolationNum= generateRandomIntegerInRange(0,4);\n\n\n }\n //var nConsolation = generateRandomIntegerInRange(0,4);\n\n var arryConsolation =[\"Good Health\",\"Happiness\",\"Strength\",\"Fitness\",\"Vigor\"];\n\n logIt(\"setting other comment in step 18\");\n\n setComment(timeLapsed,\"You won \"+arryConsolation[this.n_consolationNum]+\"!\" );\n\n creImage(\"T_couponVoucherC\"+this.n_consolationNum+ \".png\", 0.125*this.nCanvasWidth ,0.125*this.nCanvasHeight ,0.75*this.nCanvasWidth,0.75*this.nCanvasHeight);\n \n\n }\n\n\n }else{\n\n logIt(\"in step > 18: \" + this.nEndimationSteps);\n\n if (s_winning === \"T\"){\n\n //setComment(timeLapsed,\"You won voucher!\");\n\n creImage(\"T_couponVoucher.png\", 0.125*this.nCanvasWidth ,0.125*this.nCanvasHeight ,0.75*this.nCanvasWidth,0.75*this.nCanvasHeight);\n \n //s_winning = \"F\";\n\n }else{\n\n\n creImage(\"T_couponVoucherC\"+this.n_consolationNum+ \".png\", 0.125*this.nCanvasWidth ,0.125*this.nCanvasHeight ,0.75*this.nCanvasWidth,0.75*this.nCanvasHeight);\n \n\n }\n\n\n } \n\n\n }else{\n\n this.bAnimationCompleted = true;\n //s_winning = \"F\";\n //this.reset();\n }\n \n }\n \n }\n\n \n\n assess(apl,aTimeLapsed){\n\n this.pLi = apl[19];\n this.pRi = apl[20];\n\n if(this.nPhase>0){\n\n if (this.nPhase===1){ // curl\n \n \n\n if (assessCurls(apl)){ \n //setComment(aTimeLapsed, \"Pull!\");\n PlaySound(ad_shuttle,\"openChest.mp3\",false);\n \n this.nPhase = 2;\n this.nLevel++;\n if (this.nLevel < this.nTarget){\n setComment(aTimeLapsed, \"Almost!\" + (this.nTarget-this.nLevel) + \" more!\" );\n }\n //PlaySound(ad_shuttle,\"cashRegister.mp3\",false);\n n_upLimbScore = n_upLimbScore + 20;\n //document.getElementById('scoreCount').innerText = n_upLimbScore;\n\n }else{\n setComment(aTimeLapsed, \"Open!\");\n }\n \n \n }else if (this.nPhase===2){ \n \n if (assessArmsStrDown(apl)){\n \n setComment(aTimeLapsed, \"Open!\");\n this.nGoldIngotHeight = (apl[23].y-apl[11].y)*0.7;\n this.nGoldIngotWidth = 1.8*this.nGoldIngotHeight;\n PlaySound(ad_shuttle,\"closeChest.mp3\",false);\n this.nPhase = 1;\n \n \n }else{\n //setComment(aTimeLapsed, \"Pull!\");\n } \n \n }\n\n \n\n if ( this.bAnimationCompleted){\n //setComment(aTimeLapsed,\"Lift completed\");\n s_winning = \"F\";\n this.reset();\n return true;\n }\n \n\n\n\n }else if (this.nPhase===-1){\n\n if (assessArmsStrDown(apl)){\n \n setComment(aTimeLapsed,\"Open the chest!\");\n\n this.nGoldIngotHeight = (apl[23].y-apl[11].y)*0.7;\n this.nGoldIngotWidth = 1.8*this.nGoldIngotHeight;\n \n this.nPhase = 1;\n \n }else{\n\n setComment(aTimeLapsed,\"Ready to open?\");\n }\n\n //document.getElementById('scoreCount').innerText = this.nPhase;\n\n }\n\n return false;\n\n }\n\n}\n\nclass upLimbExObj{\n constructor(aCanvasWidth,aCanvasHeight){\n\n this.nLevel=0;\n \n this.anChestHeight = aCanvasHeight/1.5;\n this.anChestWidth = aCanvasWidth;\n\n this.anCanvasWidth = aCanvasWidth;\n //this.anUpDist = aCanvasHeight/10;\n this.anChestOffsetY = aCanvasHeight/15;\n\n this.oClimbObj = new climberObj(this.anChestHeight, this.anChestWidth,this.anChestOffsetY,aCanvasWidth,aCanvasHeight);\n this.oSwingObj = new swingObj(this.anChestHeight, this.anChestWidth,this.anChestOffsetY,aCanvasWidth,aCanvasHeight);\n this.oLiftObj = new liftObj(this.anChestHeight, this.anChestWidth,this.anChestOffsetY,aCanvasWidth,aCanvasHeight); \n\n this.nGameStartTime=0;\n\n this.oSelector = new selectionObj(aCanvasWidth,[\"play 3 minute\",\"play 5 minutes\",\"play continuous\"]\n ,[\"F_3min.png\",\"F_5min.png\",\"F_unlimited.png\"],[180,300,99999]);\n\n /*\n\n this.nStage = 1;\n this.nGameDuration=99999;\n\n this.nStage = -3;\n this.nGameDuration=-1;\n */\n\n this.nStage = -3;\n this.nGameDuration=-1;\n\n }\n\n show(aTimeLapsed){\n\n if (this.nStage>-1){\n\n if(Math.round( aTimeLapsed - this.nGameStartTime)=this.nGameDuration && document.getElementById('gameTime').innerText!==this.nGameDuration){\n\n this.endGameProcess(this.nGameDuration);\n \n }\n \n \n\n }else if (this.nStage===-3){\n\n if (document.getElementById('loading').style.display!==\"none\"){\n document.getElementById('loading').style.display = \"none\";\n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n }\n this.oSelector.showSelection();\n\n }else if (this.nStage===-1){\n\n creImage(\"climbStart.PNG\", 0.1* camera.canvas.width,0.1* camera.canvas.height, 0.8*camera.canvas.width, 0.8*camera.canvas.height );\n\n\n }\n\n //creImage(\"T_pine.png\", this.anCanvasWidth- this.anChestWidth ,this.nLevel*this.anUpDist + this.anChestOffsetY, this.anChestWidth,this.anChestHeight );\n\n\n }\n\n assess(apl, aTimeLapsed,aar_prevPts){\n\n if (this.nStage>-1 ){\n \n var bContinue = this.oSelector.checkContinue(apl);\n var bStageCompleted = false;\n\n if (bContinue){\n\n if (this.nStage===1|| this.nStage===3){ // Climb\n\n bStageCompleted = this.oClimbObj.assess(apl,aTimeLapsed);\n\n \n }else if (this.nStage===2|| this.nStage===4){ // Swing\n \n bStageCompleted = this.oSwingObj.assess(apl,aTimeLapsed);\n \n }else if(this.nStage===0){ //Lift\n\n bStageCompleted = this.oLiftObj.assess(apl,aTimeLapsed);\n\n }\n\n if (bStageCompleted){\n\n //setComment(aTimeLapsed,\"Stage \" +this.nStage + \" completed\" );\n //this.nStage = (++this.nStage)%5;\n\n this.nStage = (++this.nStage)%3; // demo only\n\n if (this.nStage===1){\n\n //PlaySound(ad_background,\"jingShe.mp3\",true);\n\n }else if (this.nStage===2){\n //PlaySound(ad_background,\"gongXiGongXi.mp3\",true);\n }else if (this.nStage===0){\n //PlaySound(ad_background,\"zcjb.mp3\",true);\n }\n\n }\n \n }else{\n\n this.endGameProcess(Math.round( aTimeLapsed - this.nGameStartTime));\n\n }\n }else if (this.nStage===-1){\n\n if (assessWideElbows(apl)){\n this.nStage = 1;\n this.nGameStartTime = aTimeLapsed;\n }else{\n\n setComment(aTimeLapsed,\"Let's bring the treasure chest down. Into position.\");\n }\n\n\n }else if (this.nStage===-3){\n\n this.nGameDuration = this.oSelector.assessSelection(apl);\n\n if (this.nGameDuration>0){\n \n this.nStage = -1;\n setComment(aTimeLapsed,\"Let's bring down the treasure chest.\");\n\n }\n\n }\n\n this.n_bannerY= (apl[11].y>apl[12].y)?apl[11].y:apl[12].y;\n\n }\n\n endGameProcess(aDuration){\n\n\n b_inEx=false;\n this.nStage=-4;\n document.getElementById('gameTime').innerText = aDuration;\n document.getElementById('share').style.display = \"none\";\n PlaySound(ad_countDown,\"BellCelebrateHorn.mp3\",false);\n logIt(\"in endGameProcess, setting good job\");\n setComment(timeLapsed,\"Well Done!Good Job!\");\n\n }\n\n}\n\nclass skaterObj{\n constructor(aCanvasWidth,aCanvasHeight){\n\n this.nScore=0;\n this.n_bannerY=-1;\n\n this.nBLlha=0;\n this.nBLlka=0;\n this.nBLrha=0;\n this.nBLrka=0;\n\n //this.bMoveTree=false;\n this.ln_lastSpawn = 0;\n this.arryShow = [];\n\n this.oTree=null;\n \n this.nGameStartTime=0;\n\n this.oSelector = new selectionObj(aCanvasWidth,[\"play 1 minute\",\"play 3 minutes\",\"play 5 minutes\",\"play continuous\"]\n ,[\"F_1min.png\",\"F_3min.png\",\"F_5min.png\",\"F_unlimited.png\"],[60,180,300,99999]);\n\n this.nStage = -3;\n this.nGameDuration=-1;\n\n //this.nStage = 1;\n //this.nGameDuration=99999;\n\n }\n//skaterShow\n show(aTimeLapsed){\n\n if (this.nStage>0){\n\n if(Math.round( aTimeLapsed - this.nGameStartTime) 1){\n \n this.ln_lastSpawn = aTimeLapsed;\n\n for (var i=0; i < 10; i++){\n \n if (generateRandomIntegerInRange(0,9)<2)\n this.arryShow.push(new DropObj(i));\n \n } \n \n }\n\n if (b_moveTree){\n logIt(\"moving tree\");\n \n this.oTree.moveTree();\n //this.bMoveTree=false;\n\n }\n //camera.drawPic(\"xt.png\",{x:0,y:200},300,400);\n var arryTmp =[];\n if (this.arryShow.length>0){\n\n for (var j=0; j < this.arryShow.length; j++){\n\n if (this.arryShow[j].dropIfValid()){\n\n arryTmp.push(this.arryShow[j]);\n\n }\n\n }\n\n this.arryShow = arryTmp;\n }\n\n }else if (Math.round( aTimeLapsed - this.nGameStartTime)>=this.nGameDuration && document.getElementById('gameTime').innerText!==this.nGameDuration){\n\n this.endGameProcess(this.nGameDuration);\n \n }\n \n }else if(this.nStage===0){\n\n if (document.getElementById('loading').style.display!==\"none\"){\n document.getElementById('loading').style.display = \"none\";\n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n }\n \n var w = 220, h=360;\n\n //this.nGameStartTime = aTimeLapsed;\n setComment(aTimeLapsed,\"Feet wider than shoulder. Bend knees and lean forward. Bend your arms\");\n //setComment(\"Feet wider than shoulder. Bend knees and lean forward. Bend your arms\");\n creImage(\"skaterStart2.PNG\",camera.canvas.width/2 - w/2,camera.canvas.height/3 - h/3, w,h);\n\n }else if (this.nStage===-3){\n\n if (document.getElementById('loading').style.display!==\"none\"){\n document.getElementById('loading').style.display = \"none\";\n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n }\n this.oSelector.showSelection();\n\n }\n\n }\n\n assess(apl, aTimeLapsed,aar_prevPts){\n\n if (this.nStage>0 ){\n \n var bContinue = this.oSelector.checkContinue(apl);\n\n if (bContinue){\n\n if (this.nStage===1){ // skate left\n\n \n if (getSignedANGXY(apl[26],apl[28])- this.nBLrka<-10 \n && getSignedANGXY(apl[24],apl[28])-this.nBLrha <-10\n && getSignedANGXY(apl[25],apl[27])-this.nBLlka<-10 \n && apl[11].x> apl[15].x && apl[16].x> apl[12].x && apl[13].x> apl[15].x && apl[16].x> apl[14].x\n && apl[13].y> apl[15].y && apl[14].y> apl[16].y){\n \n logIt(\"person left\");\n \n b_moveTree=true;\n this.nStage = 2;\n this.oTree = new TreeObj(0);\n PlaySound(ad_shuttle,\"SwooshLouder.mp3\",false);\n \n }\n \n }else if (this.nStage===2){ // go right\n \n if (getSignedANGXY(apl[26],apl[28])- this.nBLrka>10 \n && getSignedANGXY(apl[23],apl[27])-this.nBLlha >10\n && getSignedANGXY(apl[25],apl[27])-this.nBLlka>10 \n && apl[11].x> apl[15].x && apl[16].x> apl[12].x && apl[13].x> apl[15].x && apl[16].x> apl[14].x\n && apl[13].y> apl[15].y && apl[14].y> apl[16].y ){\n \n logIt(\"person right\");\n \n b_moveTree=true;\n this.nStage = 1;\n this.oTree = new TreeObj(1);\n PlaySound(ad_shuttle,\"SwooshLouder.mp3\",false);\n\n }\n \n }\n \n }else{\n\n this.endGameProcess(Math.round( aTimeLapsed - this.nGameStartTime));\n\n }\n }else if (this.nStage===0){\n\n if((apl[27].x - apl[28].x)> (apl[11].x - apl[12].x) \n && apl[11].x > apl[15].x && apl[16].x > apl[12].x && getSignedANGXY(apl[25],apl[27])<20 && getSignedANGXY(apl[26],apl[28])>-20\n && apl[13].y > apl[15].y && apl[14].y > apl[12].x \n ){\n \n this.nBLlha=getSignedANGXY(apl[23],apl[27]);\n this.nBLlka=getSignedANGXY(apl[25],apl[27]);\n this.nBLrha=getSignedANGXY(apl[24],apl[28]);\n this.nBLrka=getSignedANGXY(apl[26],apl[28]);\n\n this.nStage = 1;\n document.getElementById('TimeBar').style.display = \"block\";\n //document.getElementById('scoreCount').style.display = \"block\";\n \n //document.getElementById('send').style.display = \"block\";\n this.nGameStartTime = aTimeLapsed;\n instructNow(\"Skate to your left.\");\n logIt(\"set Snow true and gameTIme at \" + this.nGameStartTime);\n\n }\n\n }else if (this.nStage===-3){\n\n this.nGameDuration = this.oSelector.assessSelection(apl);\n\n if (this.nGameDuration>0){\n \n this.nStage = 0;\n }\n\n }\n\n this.n_bannerY= (apl[11].y>apl[12].y)?apl[11].y:apl[12].y;\n\n }\n\n endGameProcess(aDuration){\n\n// if (n_scoreCount>0){\n// UpdateReward();\n // }\n //document.getElementById('gameTime').innerText = aDuration;\n b_inEx=false;\n PlaySound(ad_countDown,\"BellCelebrateHorn.mp3\",false);\n setComment(timeLapsed,\"You've done it!Good Job!\");\n\n \n }\n\n\n}\n\nclass clockObj{\n constructor(aCanvasWidth, aCanvasHeight){\n\n this.time = 45;\n this.dimWidth = 240;\n this.dimHeight = 225;\n\n this.width = 0.25*aCanvasWidth;\n this.height = this.dimHeight*this.width/this.dimWidth;\n\n this.x = aCanvasWidth/2 - this.width/2;\n this.y = 0;\n\n this.dimWidthStar = 280;\n this.dimHeightStar = 250;\n\n\n this.dimWidthSanta = 750;\n this.dimHeightSanta = 750;\n\n this.heightSanta = 0.8 * aCanvasHeight;\n //this.widthSanta = this.dimWidthSanta*this.heightSanta/this.dimHeightSanta;\n this.widthSanta= 0.8 *aCanvasWidth;\n \n this.widthStar = 0.2*aCanvasWidth;\n this.heightStar = this.dimHeightStar*this.widthStar/this.dimWidthStar;\n\n this.rX = generateRandomIntegerInRange(0,1);\n this.lX = generateRandomIntegerInRange(7,9);\n\n this.rY = generateRandomIntegerInRange(0,3);\n this.lY = generateRandomIntegerInRange(0,3);\n\n this.glitterStars = [];\n this.alarmTime = -1;\n\n this.diameterPendulum = -1;\n this.pendulumX = -1;\n this.pendulumY =-1;\n//bob dimension is 1:1 no need to cal height\n\n\n this.n_bannerY = 0;\n this.side = \"Left\";\n\n\n this.oSantaSleigh = new santaSleighObj(aCanvasWidth, aCanvasHeight,this.height,timeLapsed)\n this.nScore=0;\n this.getNewPosition(false);\n this.nGameStartTime=0;\n\n this.oSelector = new selectionObj(aCanvasWidth,[\"play 1 minute\",\"play 3 minutes\",\"play 5 minutes\",\"play continuous\"]\n ,[\"F_1min.png\",\"F_3min.png\",\"F_5min.png\",\"F_unlimited.png\"],[60,180,300,99999]);\n\n /*\n\n\n this.nStage = 1;\n this.nGameDuration=99999;\n */\n\n\n this.nStage = -3;\n this.nGameDuration=-1;\n\n\n }\n\n getNewPosition(b_progress){\n\n this.rX = generateRandomIntegerInRange(0,1);\n this.lX = generateRandomIntegerInRange(3,4);\n\n this.rY = generateRandomIntegerInRange(0,3);\n this.lY = generateRandomIntegerInRange(0,3);\n\n if (b_progress)\n this.progressTime();\n\n }\n\n progressTime(){\n \n this.time += 5;\n \n }\n\n resetTime(){\n this.time = 45;\n }\n\n //clock.show\n show(aTimeLapsed){\n\n if (this.nStage>0){\n\n document.getElementById('gameTime').innerText = Math.round( aTimeLapsed - this.nGameStartTime);\n\n logIt(\" Pendulum diameter:\" +this.diameterPendulum +\" with X:\" + this.pendulumX + \" and Y:\" + this.pendulumY);\n if (this.diameterPendulum>0){\n\n creImage(\"T_bob.png\",this.pendulumX,this.pendulumY,this.diameterPendulum,this.diameterPendulum );\n\n }\n\n if (this.time===60){\n\n if (this.glitterStars.length ===0){\n \n this.nScore++\n //n_scoreCount++;\n //document.getElementById('scoreCount').innerText = this.nScore;\n \n this.glitterStars.push({x:0,y:0});\n this.glitterStars.push({x:0,y:1});\n this.glitterStars.push({x:0,y:2});\n \n this.glitterStars.push({x:4,y:0});\n this.glitterStars.push({x:4,y:1});\n this.glitterStars.push({x:4,y:2});\n \n \n }\n \n if (this.alarmTime === -1){\n \n this.alarmTime = aTimeLapsed;\n PlaySound(ad_shuttle,\"wah.mp3\");\n \n }\n \n if (aTimeLapsed - this.alarmTime <2.5){\n \n creImage(\"TF_cSC.png\",camera.canvas.width/2-exObj.widthSanta/2,0.1*camera.canvas.height,exObj.widthSanta,exObj.heightSanta );\n for (var i =0; i< this.glitterStars.length;i++ ){\n\n var sFileName=\"T_starGlow.png\";\n\n \n if (aTimeLapsed - this.alarmTime > 1.9){\n creImage(sFileName,this.glitterStars[i].x*this.widthStar\n ,this.glitterStars[i].y*this.heightStar,this.widthStar,this.heightStar );\n }else if (aTimeLapsed - this.alarmTime > 1.6){\n creImage(\"T_star.png\",this.glitterStars[i].x*this.widthStar\n ,this.glitterStars[i].y*this.heightStar,this.widthStar,this.heightStar );\n }else if (aTimeLapsed - this.alarmTime > 1.2){\n creImage(sFileName,this.glitterStars[i].x*this.widthStar\n ,this.glitterStars[i].y*this.heightStar,this.widthStar,this.heightStar );\n }else if (aTimeLapsed - this.alarmTime > 0.8){\n \n creImage(\"T_star.png\",this.glitterStars[i].x*this.widthStar\n ,this.glitterStars[i].y*this.heightStar,this.widthStar,this.heightStar );\n \n }else if (aTimeLapsed - this.alarmTime > 0.4){\n creImage(sFileName,this.glitterStars[i].x*this.widthStar\n ,this.glitterStars[i].y*this.heightStar,this.widthStar,this.heightStar );\n }else{\n \n creImage(\"T_star.png\",this.glitterStars[i].x*this.widthStar\n ,this.glitterStars[i].y*this.heightStar,this.widthStar,this.heightStar );\n \n }\n \n }\n \n }else{\n \n this.alarmTime = -1;\n this.glitterStars =[];\n this.time = 45;\n\n /*\n if ((aTimeLapsed - this.nGameStartTime) > this.nGameDuration/2 && this.side===\"Left\" ){\n //if (false){\n this.side = \"Right\";\n s_comment = \"Now change to the \" + this.side;\n }else \n */\n \n if ((aTimeLapsed - this.nGameStartTime) > this.nGameDuration) {\n \n this.endGameProcess();\n \n }else{\n\n if (this.side===\"Left\"){\n this.side=\"Right\";\n }else{\n \n this.side=\"Left\";\n \n }\n \n s_comment = \"Change to the \" + this.side;\n\n }\n \n //this.getNewPosition(false);\n \n }\n \n }else{\n \n \n creImage(\"TF_\" +this.time+\"CF.png\",this.x,this.y,this.width,this.height );\n creImage(\"T_star.png\",this.rX*this.widthStar,this.rY*this.heightStar,this.widthStar,this.heightStar );\n creImage(\"T_star.png\",this.lX*this.widthStar,this.lY*this.heightStar,this.widthStar,this.heightStar );\n this.oSantaSleigh.show(aTimeLapsed);\n }\n \n } // start animation only after ExP\n else if(this.nStage===0){\n\n if (document.getElementById('loading').style.display!==\"none\"){\n document.getElementById('loading').style.display = \"none\";\n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n }\n\n \n var w = 160, h=330;\n\n //this.nGameStartTime = aTimeLapsed;\n //instruct(\"Feet wider than shoulder. Bend knees and lean forward. Bend your arms\");\n creImage(\"clockStart2.PNG\",camera.canvas.width/2 - w/2,camera.canvas.height/3 - h/3, w,h);\n } else if (this.nStage===-3){\n\n if (document.getElementById('loading').style.display!==\"none\"){\n document.getElementById('loading').style.display = \"none\";\n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n }\n this.oSelector.showSelection();\n\n }\n\n\n }\n\n /*\n setComment(aTimeLapsed, aCommentStr){\n\n if(aTimeLapsed - this.lastCommentTime > ln_configRA || this.prevComment!==aCommentStr){\n\n this.comment = aCommentStr;\n\n }\n\n }\n */\n\n endGameProcess(){\n \n// if (this.nScore>0)\n// UpdateReward();\n b_inEx=false;\n PlaySound(ad_countDown,\"BellCelebrateHorn.mp3\",false); \n setComment(timeLapsed,\"You've done it!Good Job!\"); \n\n\n }\n\n assess(apl, aTimeLapsed,aar_prevPts){\n\n if (this.nStage>0){\n\n this.n_bannerY = (apl[11].y>apl[12].y)?apl[11].y:apl[12].y;\n var bContinue = this.oSelector.checkContinue(apl);\n\n if (bContinue){\n\n if (this.nStage===1){\n\n if (this.time === 45){\n \n setComment(aTimeLapsed, \"Swing your \" + this.side + \" leg to the front.\");\n }else if(this.time === 50){\n \n setComment(aTimeLapsed, \"Swing your \" + this.side + \" leg to the side.\");\n \n }else if(this.time === 55){\n \n setComment(aTimeLapsed, \"Swing your \" + this.side + \" leg to the back.\");\n \n }\n \n if (this.side===\"Left\"){\n \n if (apl[31].y < apl[28].y){\n \n logIt(\"checking diameter: \" + this.diameterPendulum + \" curr: \" + ((apl[31].y - apl[27].y)*4));\n this.pendulumX = apl[27].x - this.diameterPendulum/2;\n this.pendulumY = apl[27].y- this.diameterPendulum/2;\n if (this.diameterPendulum ===-1){\n this.diameterPendulum = (apl[31].y - apl[27].y)*4;\n \n }else if (this.diameterPendulum < (apl[31].y - apl[27].y)*4){\n this.diameterPendulum = (apl[31].y - apl[27].y)*4;\n \n }\n \n \n }else{\n \n if (this.diameterPendulum>0){\n \n PlaySound(ad_tick,\"clock-ticking3.mp3\",false);\n this.getNewPosition(true);\n \n }\n \n this.diameterPendulum = -1;\n }\n \n }else if(this.side===\"Right\"){\n \n if (apl[32].y < apl[27].y){\n \n logIt(\"checking diameter: \" + this.diameterPendulum + \" curr: \" + ((apl[32].y - apl[28].y)*4));\n this.pendulumX = apl[28].x - this.diameterPendulum/2;\n this.pendulumY = apl[28].y - this.diameterPendulum/2 ;\n if (this.diameterPendulum ===-1){\n this.diameterPendulum = (apl[32].y - apl[28].y)*4;\n \n }else if (this.diameterPendulum < (apl[32].y - apl[28].y)*4){\n this.diameterPendulum = (apl[32].y - apl[28].y)*4;\n \n }\n \n \n }else{\n \n if (this.diameterPendulum>0){\n \n PlaySound(ad_tick,\"clock-ticking3.mp3\",false);\n this.getNewPosition(true);\n \n }\n \n this.diameterPendulum = -1;\n }\n \n }\n \n \n }\n \n }else{\n\n this.endGameProcess();\n\n }\n\n }else if (this.nStage===0){\n\n // check for ANG Lebw<-10, Rebw>10, Lka<15 Rka >-15 \n\n if(getSignedANGXY(apl[13],apl[15])<-10 && getSignedANGXY(apl[14],apl[16])>10 \n && getSignedANGXY(apl[25],apl[27])<15 && getSignedANGXY(apl[26],apl[28])>-15\n && checkStdev(aar_prevPts,15,1.5) && checkStdev(aar_prevPts,16,1.5)\n && checkStdev(aar_prevPts,27,1.5) && checkStdev(aar_prevPts,28,1.5) \n ){\n\n this.nStage=1;\n this.nGameStartTime = aTimeLapsed;\n\n document.getElementById('gameTime').innerText = Math.round( aTimeLapsed - this.nGameStartTime);\n\n }else{\n\n setComment(aTimeLapsed,\"Stand straight. Hands on your hips\");\n\n }\n\n }else if (this.nStage===-3){\n\n this.nGameDuration = this.oSelector.assessSelection(apl)\n if (this.nGameDuration>0){\n \n this.nStage = 0;\n }\n\n }\n\n }\n\n /*\n readComment(aTimeLapsed){\n\n if (this.comment.length>0){\n\n instructNow(this.comment);\n this.prevComment = this.comment;\n this.lastCommentTime = aTimeLapsed;\n\n this.comment = \"\";\n \n\n }\n\n }\n\n */\n\n\n}\n\nclass santaSleighObj{\n constructor(aCanvasWidth,aCanvasHeight, aclockHeight, aTimeLapsed){\n\n this.nCanvasWidth = aCanvasWidth;\n this.nDimSantaWidth = 2;\n this.nDimSantaHeight = 1;\n \n\n\n this.nSantaHeight = 0.25*aCanvasHeight;\n this.nSantaWidth = this.nSantaHeight* this.nDimSantaWidth/this.nDimSantaHeight;\n this.nDisplacementX= aCanvasWidth/14;\n\n this.nSide = 1;\n\n this.nHeightDisplacement = aclockHeight/2;\n this.nY = aclockHeight;\n\n this.nAnimateTime = aTimeLapsed+1;\n\n }\n\n show(aTimeLapsed){\n\n if (aTimeLapsed - this.nAnimateTime > 0){\n\n var nMoveUnit = Math.round((aTimeLapsed - this.nAnimateTime)/0.25);\n\n if (nMoveUnit < 20){\n\n if (this.nSide===1){\n\n creImage(\"T_rLCSCoins\"+nMoveUnit%2 +\".png\",nMoveUnit*this.nDisplacementX, this.nY, this.nSantaWidth, this.nSantaHeight);\n\n }else{\n\n creImage(\"T_lRCSCoins\"+nMoveUnit%2 +\".png\",this.nCanvasWidth - (nMoveUnit+2)*this.nDisplacementX, this.nY, this.nSantaWidth, this.nSantaHeight);\n\n }\n\n }else{\n this.nAnimateTime = aTimeLapsed + generateRandomIntegerInRange(1,2);\n this.nY = generateRandomIntegerInRange(1,4)* this.nHeightDisplacement;\n this.nSide = -1* this.nSide;\n\n }\n\n\n }\n\n }\n\n\n}\n\nclass fairyObj{\n constructor(aCanvasWidth,aCanvasHeight){\n\n this.nDimFairy1Width = 650;\n this.nDimFairy1Height = 480;\n\n /*\n\n this.nFairy1Height = 0.3 *aCanvasHeight;\n this.nFairyWidth = this.nFairy1Height * this.nDimFairy1Width/this.nDimFairy1Height;\n\n */\n \n this.nFairyWidth = 0.4*aCanvasWidth;\n\n\n this.nFairy1Height = this.nDimFairy1Height * this.nFairyWidth/this.nDimFairy1Width;\n\n this.nFairy0Height = 0.9*this.nFairy1Height;\n \n this.nWingState=0;\n this.nWingFlapTime =-1;\n\n }\n\n show(ax,ay, aIndex, aTimeLapsed)\n {\n if (aIndex===15){\n\n if (aTimeLapsed - this.nWingFlapTime> 0.4){\n this.nWingFlapTime = aTimeLapsed;\n if (this.nWingState===0){\n this.nWingState=1;\n }else{\n\n this.nWingState=0;\n\n }\n\n }\n\n if (this.nWingState===0){\n creImage(\"T_lcf0.png\",ax,ay,this.nFairyWidth,this.nFairy0Height);\n }else{\n creImage(\"T_lcf1.png\",ax,ay,this.nFairyWidth,this.nFairy1Height);\n }\n \n }else if (aIndex===16){\n\n if (aTimeLapsed - this.nWingFlapTime> 0.4){\n this.nWingFlapTime = aTimeLapsed;\n if (this.nWingState===0){\n this.nWingState=1;\n }else{\n\n this.nWingState=0;\n\n }\n\n }\n\n if (this.nWingState===0){\n creImage(\"T_rcf0.png\",ax,ay,this.nFairyWidth,this.nFairy0Height);\n }else{\n creImage(\"T_rcf1.png\",ax,ay,this.nFairyWidth,this.nFairy1Height);\n }\n \n }\n\n\n\n }\n\n}\n\nclass candyObj{\n constructor(aCanvasWidth,aCanvasHeight){\n\n //this.sWarpDirection = \"Left to Right \";\n this.nDimCandyWidth=100;\n this.nDimCandyHeight=340;\n\n /*\n this.nCandyWidth = aCanvasWidth/4;\n this.nCandyHeight = this.nDimCandyHeight * this.nCandyWidth/this.nDimCandyWidth;\n */\n\n this.nCandyWidth = aCanvasWidth/4;\n this.nCandyHeight = 0.6*aCanvasHeight;\n\n this.nCandyWidth = this.nDimCandyWidth * this.nCandyHeight/this.nDimCandyHeight;\n\n this.x = 0;\n this.y = (aCanvasHeight - this.nCandyHeight)/2;\n\n this.sColorDirection = \"T\";\n this.nRedCount=0;\n this.sComment = \"\";\n this.sPrevComment = \"\";\n this.nLastCommentTime = 0;\n\n this.nMaxHeight = aCanvasHeight;\n this.nMaxWidth = this.nMaxHeight*this.nDimCandyWidth/this.nDimCandyHeight;\n\n this.nAnimationTransitionTime=0.2;\n this.nAnimationLapTime=1;\n this.nAnimationSteps = this.nAnimationLapTime/this.nAnimationTransitionTime;\n\n this.nGrowthRate = (this.nMaxHeight - this.nCandyHeight)/this.nAnimationSteps;\n this.nMaxHeightX = aCanvasWidth/2 -this.nMaxWidth/2;\n\n this.nMoveRate = this.nMaxHeightX/this.nAnimationSteps;\n this.nAnimationStartTime=-1;\n\n this.nPresentHeight = aCanvasHeight/5; // for Xmas theme\n this.nPresentWidth = aCanvasHeight/5;\n\n this.nPresentX = aCanvasWidth - this.nPresentWidth;\n this.nPresentY = aCanvasHeight - this.nPresentHeight;\n\n this.oPl = null;\n\n// this.arryOptionText = [\"1 minute\",\"3 minute\",\"5 minute\",\"unlimited\"];\n// this.arryOptionIcon = [\"1min.png\",\"3min.png\",\"5min.png\",\"unlimited.png\"];\n\n this.oSelector = new selectionObj(aCanvasWidth,[\"play 1 minute\",\"play 3 minutes\",\"play 5 minutes\",\"play continuous\"]\n ,[\"F_1min.png\",\"F_3min.png\",\"F_5min.png\",\"F_unlimited.png\"],[60,180,300,99999]);\n\n this.nStage = -3;\n this.nGameDuration=-1;\n\n /*\n \n this.nStage = 1;\n this.nGameDuration=99999;\n\n this.nStage = -3;\n this.nGameDuration=-1;\n \n this.nDimFairyHeight = 25;\n this.nDimFairyWidth = 21;\n\n this.nFairyHeight = 0.3 * aCanvasHeight;\n this.nFairyWidth = this.nFairyHeight * this.nDimFairyWidth/this.nDimFairyHeight;\n \n */\n\n this.nFairyIndex=15;\n this.nFairyX=-1;\n this.nFairyY=-1;\n this.oFairy = new fairyObj(aCanvasWidth,aCanvasHeight);\n\n\n\n this.nRefShoulderWidth =-1;\n\n this.nGameStartTime=0;\n\n this.nHandClosedThreshold=0.55;\n this.nHandOpenedThreshold=0.6;\n this.bAssess=true;\n\n this.nEndCloseTarget = 3;\n this.nEndCloseCount=0;\n this.nScore=0;\n this.nAddColorTime = -1;\n\n this.n_bannerY=-1;\n\n }\n\n toggleCandy(){\n this.nRedCount=0;\n\n\n this.bAssess=true;\n this.nAnimationStartTime =-1;\n }\n\n getShrinkRate(){\n\n this.nPresentHeight = ((this.oPl[24].y - this.oPl[12].y) + (this.oPl[23].y - this.oPl[11].y))/2;\n this.nPresentWidth = this.oPl[11].x - this.oPl[12].x;\n this.nPresentX = this.oPl[12].x;\n\n this.nShrinkRate = (this.nMaxHeight - this.nPresentHeight)/(this.nAnimationSteps-1);\n this.nMinHeightX = (this.nPresentX + this.nPresentWidth/2 - (this.nPresentHeight*this.nDimCandyWidth/this.nDimCandyHeight)/2);\n\n this.nShrinkMoveRate = (this.nMinHeightX - this.nMaxHeightX )/(this.nAnimationSteps-1);\n\n }\n\n //candyShow\n show(aTimeLapsed){\n \n if (this.nStage>0){\n\n //scoreImg\n \n document.getElementById('gameTime').innerText = Math.round( aTimeLapsed - this.nGameStartTime); \n\n// creImage(\"T_presentGold.png\",this.nPresentX,this.nPresentY,this.nPresentWidth,this.nPresentHeight);\n\n\n //var s_imageName = \"T_cc\" + this.sColorDirection + this.nRedCount + \"R.png\";\n var s_imageName = \"T_fb\" + this.nRedCount + \".png\";\n\n if (this.nRedCount===0){\n //s_imageName = \"T_cc0R.png\";\n s_imageName = \"T_fb0.png\";\n }else if(this.nRedCount===4){\n\n s_imageName = \"T_fb4.png\";\n\n }\n\n if (this.nRedCount===4){\n\n \n logIt(\"in Red count 4\");\n if (this.nAnimationStartTime===-1){\n this.nAnimationStartTime = aTimeLapsed;\n \n }\n\n if (aTimeLapsed - this.nAnimationStartTime>2.7){\n\n logIt(\"this.nAnimationStartTime>2\");\n this.toggleCandy();\n //creImage(\"T_cc0R.png\",this.x,this.y,this.nCandyWidth,this.nCandyHeight);\n creImage(\"T_fb0.png\",this.x,this.y,this.nCandyWidth,this.nCandyHeight);\n\n if (this.sColorDirection===\"B\"){\n setComment(timeLapsed,\" Right to left. Round Knee.\");\n }else{\n setComment(timeLapsed,\" Left to right. Round head.\");\n } \n\n }else if (aTimeLapsed - this.nAnimationStartTime>2.2){\n\n logIt(\"this.nAnimationStartTime>1.8\");\n creImage(s_imageName,this.nMaxHeightX + 4*this.nShrinkMoveRate, 4*this.nShrinkRate,(this.nMaxHeight - 4*this.nShrinkRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nMaxHeight - 4*this.nShrinkRate);\n }else if (aTimeLapsed - this.nAnimationStartTime>1.9){\n\n logIt(\"this.nAnimationStartTime>1.6\");\n creImage(s_imageName,this.nMaxHeightX + 3*this.nShrinkMoveRate, 3*this.nShrinkRate,(this.nMaxHeight - 3*this.nShrinkRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nMaxHeight - 3*this.nShrinkRate);\n }else if (aTimeLapsed - this.nAnimationStartTime>1.6){\n\n logIt(\"this.nAnimationStartTime>1.4\");\n creImage(s_imageName,this.nMaxHeightX + 2*this.nShrinkMoveRate, 2*this.nShrinkRate,(this.nMaxHeight - 2*this.nShrinkRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nMaxHeight - 2*this.nShrinkRate);\n }else if (aTimeLapsed - this.nAnimationStartTime>1.3){\n\n logIt(\"this.nAnimationStartTime>1.2\");\n creImage(s_imageName,this.nMaxHeightX + this.nShrinkMoveRate, this.nShrinkRate,(this.nMaxHeight - this.nShrinkRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nMaxHeight - this.nShrinkRate);\n\n }else if (aTimeLapsed - this.nAnimationStartTime>1){\n\n logIt(\"this.nAnimationStartTime>1\");\n\n creImage(s_imageName,this.x + 5* this.nMoveRate,0,(this.nCandyHeight + 5*this.nGrowthRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nCandyHeight + 5*this.nGrowthRate);\n this.getShrinkRate();\n\n }else if (aTimeLapsed - this.nAnimationStartTime>0.8){\n\n logIt(\"this.nAnimationStartTime>0.8\");\n creImage(s_imageName,this.x + 4* this.nMoveRate,this.y - 4*this.nGrowthRate/2,(this.nCandyHeight + 4*this.nGrowthRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nCandyHeight + 4*this.nGrowthRate);\n\n }else if (aTimeLapsed - this.nAnimationStartTime>0.6){\n\n logIt(\"this.nAnimationStartTime>0.6\");\n creImage(s_imageName,this.x + 3* this.nMoveRate,this.y - 3*this.nGrowthRate/2,(this.nCandyHeight + 3*this.nGrowthRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nCandyHeight + 3*this.nGrowthRate);\n\n }else if (aTimeLapsed - this.nAnimationStartTime>0.4){\n\n logIt(\"this.nAnimationStartTime>0.4\");\n creImage(s_imageName,this.x + 2* this.nMoveRate,this.y - 2*this.nGrowthRate/2,(this.nCandyHeight + 2*this.nGrowthRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nCandyHeight + 2*this.nGrowthRate);\n\n }else if (aTimeLapsed - this.nAnimationStartTime>0.2){\n\n logIt(\"this.nAnimationStartTime>0.2\");\n creImage(s_imageName,this.x + this.nMoveRate,this.y -this.nGrowthRate/2,(this.nCandyHeight + this.nGrowthRate) *this.nDimCandyWidth/this.nDimCandyHeight,this.nCandyHeight + this.nGrowthRate);\n\n }else if (aTimeLapsed - this.nAnimationStartTime<0.2){\n\n logIt(\"this.nAnimationStartTime<0.2\");\n creImage(s_imageName,this.x,this.y,this.nCandyWidth,this.nCandyHeight);\n\n }\n\n }else{\n\n logIt(\"red not 4 display this: \" + s_imageName \n + \" this.x: \" +this.x+\" this.y: \"+ this.y+\" this.nCandyWidth: \" +this.nCandyWidth + \" this.nCandyHeight: \" +this.nCandyHeight);\n\n creImage(s_imageName,this.x,this.y,this.nCandyWidth,this.nCandyHeight);\n\n if(aTimeLapsed - this.nAddColorTime <0.7){\n\n //creImage(\"T_lFairy.png\", this.x + this.nCandyWidth,this.y,this.nFairyWidth,this.nFairyHeight);\n this.oFairy.show(this.x + this.nCandyWidth,this.y,15,aTimeLapsed);\n }else{\n\n this.oFairy.show(this.nFairyX,this.nFairyY,this.nFairyIndex,aTimeLapsed);\n\n\n } \n\n }\n\n \n } // start animation only after ExP\n else if(this.nStage===0){\n\n if (document.getElementById('loading').style.display!==\"none\"){\n document.getElementById('loading').style.display = \"none\";\n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n }\n \n var w = 145, h=400;\n //var w = 35, h=100;\n\n //this.nGameStartTime = aTimeLapsed;\n setComment(aTimeLapsed,\"Clasp a thin object. In front of chest.\");\n creImage(\"candyStart2.PNG\",camera.canvas.width/2 - w/2,camera.canvas.height/3 - h/3, w,h);\n } \n else if (this.nStage===-3){\n\n if (document.getElementById('loading').style.display!==\"none\"){\n document.getElementById('loading').style.display = \"none\";\n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n }\n this.oSelector.showSelection();\n\n }\n\n }\n\n addColor(){\n\n if (this.nRedCount < 4){\n\n \n this.nAddColorTime = timeLapsed;\n this.nRedCount++;\n if (this.nRedCount < 4)\n PlaySound(ad_shuttle,\"magicBell.mp3\");\n }\n \n logIt(\"added color red now: \" + this.nRedCount);\n }\n\n endGameProcess(aShoulderY){\n //this.nScore++;\n\n// if (this.nScore>0)\n// UpdateReward();\n\n //document.getElementById('scoreCount').innerText = this.nScore;\n logIt(\"banner height at:\" + aShoulderY);\n this.n_bannerY = aShoulderY;\n b_inEx=false;\n PlaySound(ad_countDown,\"BellCelebrateHorn.mp3\",false);\n setComment(timeLapsed,\"You've done it!Good Job!\");\n //s_comment = \"You've done it!Good Job!\";\n \n }\n\n// candyAssess\n assess(apl, aTimeLapsed,aar_prevPts){\n\n this.oPl = apl;\n\n if (this.bAssess){\n\n var nFingerWidth = apl[19].x - apl[20].x;\n var nMidSH = (apl[12].y+apl[23].y)/2;\n var nShoulderWidth = apl[11].x - apl[12].x;\n var nElbowWidth = apl[13].x - apl[14].x;\n var nHipWidth =apl[23].x - apl[24].x;\n var nKneeWidth = apl[25].x - apl[26].x;\n\n this.nFairyY = (apl[5].y +apl[2].y)/2 - this.oFairy.nFairy1Height;\n\n if (this.nFairyY<0)\n this.nFairyY=0;\n \n logIt(this.nStage+\": stage nFingerWidth: \" + nFingerWidth + \" this.nRefShoulderWidth: \" \n + this.nRefShoulderWidth +\" nFingerWidth/this.nRefShoulderWidth :\"+(nFingerWidth/this.nRefShoulderWidth)+ \" in stage:\" + this.nStage);\n logIt(\"nMidSH:\" + nMidSH + \" apl[16].y:\" + apl[16].y + \" apl[15].y:\" + apl[15].y);\n \n logIt(\"nFingerWidth: \" + nFingerWidth + \" nHipWidth: \" + nHipWidth );\n logIt(\"nFingerWidth: \" + nFingerWidth + \" nKneeWidth: \" + nKneeWidth );\n\n if (this.nStage>0 ){\n \n var bContinue = this.oSelector.checkContinue(apl);\n\n if (bContinue){\n\n if (this.nStage===1){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth > this.nRefShoulderWidth*this.nHandClosedThreshold && apl[15].y < nMidSH && apl[16].y < nMidSH){\n \n \n if (this.nEndCloseCount < this.nEndCloseTarget){\n \n this.nEndCloseCount++;\n logIt(this.nStage + \": stage endClose count: \" + this.nEndCloseCount);\n \n }else{\n \n //PlaySound(ad_shuttle,\"yummy2.mp3\");\n PlaySound(ad_shuttle,\"magicLong.mp3\");\n this.nEndCloseCount=0\n this.addColor();\n logIt(\"adding color:\" + this.nStage);\n //s_comment=\"Excellent.\";\n \n if (Math.round(aTimeLapsed-this.nGameStartTime) < this.nGameDuration){\n \n this.nScore++;\n //document.getElementById('scoreCount').innerText = this.nScore;\n this.sColorDirection = \"T\";\n this.bAssess=false;\n this.nStage=2;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n logIt(this.nStage+\": stage increment score:\" + this.nScore);\n \n }else{\n this.endGameProcess((apl[11].y>apl[12].y)?apl[11].y:apl[12].y);\n }\n \n logIt(\"hands opened going nStage:\" + this.nStage);\n \n }\n \n \n }else{\n this.nEndCloseCount=0;\n }\n \n }\n else if (this.nStage===2){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth > this.nRefShoulderWidth*this.nHandOpenedThreshold \n && apl[15].y < apl[11].y&& apl[16].y < apl[12].y){\n \n if (this.sColorDirection === \"B\"){\n \n this.nStage=1;\n this.nFairyIndex=15;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyX = apl[this.nFairyIndex].x;\n \n }else{\n \n this.nStage=3;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n }\n \n \n logIt(this.sColorDirection +\" hands opened going nStage:\" + this.nStage);\n \n }\n \n }\n else if (this.nStage===3){\n \n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth < this.nRefShoulderWidth*this.nHandClosedThreshold \n && apl[15].y < apl[11].y&& apl[16].y < apl[12].y){\n \n \n if (this.nEndCloseCount < this.nEndCloseTarget){\n \n this.nEndCloseCount++;\n logIt(this.nStage + \": stage endClose count: \" + this.nEndCloseCount);\n \n }else{\n this.nEndCloseCount=0;\n logIt(\"adding color:\" + this.nStage);\n //this.addColor();\n \n if (this.sColorDirection === \"B\"){\n setComment(timeLapsed,\"Good. Round Head.\");\n this.nStage=2;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n \n }else{\n \n setComment(timeLapsed,\"Good. Round Chest.\");\n this.nStage=4;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n this.nFairyX = apl[this.nFairyIndex].x;\n \n }\n \n logIt(this.sColorDirection +\" hands closed going nStage:\" + this.nStage);\n \n \n }\n \n }else{\n \n this.nEndCloseCount=0;\n \n }\n \n }\n \n else if (this.nStage===4){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth > this.nRefShoulderWidth*this.nHandOpenedThreshold \n && apl[15].y < apl[11].y&& apl[16].y < apl[12].y){\n \n if (this.sColorDirection === \"B\"){\n \n this.nStage=3;\n this.nFairyIndex=15;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyX = apl[this.nFairyIndex].x;\n \n }else{\n \n this.nStage=5;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n }\n \n \n logIt(this.sColorDirection +\" hands opened going nStage:\" + this.nStage);\n \n }\n \n }\n else if (this.nStage===5){\n \n \n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth < this.nRefShoulderWidth*this.nHandClosedThreshold \n && apl[16].y < nMidSH && apl[15].y < nMidSH){\n \n \n if (this.nEndCloseCount < this.nEndCloseTarget){\n \n this.nEndCloseCount++;\n logIt(this.nStage + \": stage endClose count: \" + this.nEndCloseCount);\n \n }else{\n this.nEndCloseCount=0;\n logIt(\"adding color:\" + this.nStage);\n this.addColor();\n \n if (this.sColorDirection === \"B\"){\n setComment(timeLapsed,\"Good. Round Head.\");\n this.nStage=2;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n \n }else{\n \n setComment(timeLapsed,\"Good. Round Chest.\");\n this.nStage=6;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n this.nFairyX = apl[this.nFairyIndex].x;\n \n }\n \n logIt(this.sColorDirection +\" hands closed going nStage:\" + this.nStage);\n \n \n }\n \n }else{\n \n this.nEndCloseCount=0;\n \n }\n \n }\n else if (this.nStage===6){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth > this.nRefShoulderWidth*this.nHandOpenedThreshold \n && apl[16].y < nMidSH && apl[15].y < nMidSH\n && apl[16].y > apl[0].y && apl[15].y > apl[0].y){\n \n if (this.sColorDirection === \"B\"){\n this.nStage=5;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n this.nFairyX = apl[this.nFairyIndex].x;\n \n }else{\n \n this.nStage=7;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n }\n \n logIt(this.sColorDirection +\" hands opened going nStage:\" + this.nStage);\n \n }\n \n }\n else if (this.nStage===7){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth < this.nRefShoulderWidth*this.nHandClosedThreshold \n && apl[16].y > apl[12].y && apl[15].y > apl[11].y){\n \n if (this.nEndCloseCount < this.nEndCloseTarget){\n \n this.nEndCloseCount++;\n logIt(this.nStage + \": stage endClose count: \" + this.nEndCloseCount);\n \n }else{\n \n this.nEndCloseCount=0;\n logIt(this.nStage+\": stage finger width and lower shoulder cleared\");\n \n if (this.sColorDirection === \"B\"){\n \n if (apl[16].y > nMidSH && apl[15].y > nMidSH){\n this.nStage=6;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n setComment(timeLapsed,\"Great. Round Chest.\");\n logIt(\"adding color:\" + this.nStage);\n this.addColor();\n }else{\n logIt(this.nStage+\": height not cleared \");\n }\n \n }else{\n \n if (apl[16].y < nMidSH && apl[15].y < nMidSH){\n setComment(timeLapsed,\"Lovely. Round Hip.\");\n this.nStage=8;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n this.nFairyX = apl[this.nFairyIndex].x;\n logIt(\"adding color:\" + this.nStage);\n this.addColor();\n }else{\n \n }\n \n }\n \n logIt(this.sColorDirection +\" hands closed going nStage:\" + this.nStage);\n \n \n }\n \n }else{\n this.nEndCloseCount=0;\n }\n \n }else if (this.nStage===8){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth > nHipWidth\n && apl[16].y > nMidSH && apl[15].y > nMidSH\n && apl[16].y < apl[26].y && apl[15].y < apl[25].y){\n \n if (this.sColorDirection === \"B\"){\n this.nStage=7;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n this.nFairyX = apl[this.nFairyIndex].x;\n \n }else{\n \n this.nStage=9;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n }\n \n \n \n logIt(this.sColorDirection +\" hands opened going nStage:\" + this.nStage);\n \n }\n \n }\n else if (this.nStage===9){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth < nHipWidth \n && apl[16].y > nMidSH && apl[15].y > nMidSH\n && apl[16].y < apl[26].y && apl[15].y < apl[25].y){\n \n \n if (this.nEndCloseCount < this.nEndCloseTarget){\n \n this.nEndCloseCount++;\n logIt(this.nStage + \": stage endClose count: \" + this.nEndCloseCount);\n \n }else{\n \n this.nEndCloseCount =0;\n this.addColor();\n logIt(\"adding color:\" + this.nStage);\n \n \n if (this.sColorDirection === \"B\"){\n this.nStage=8;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n setComment(timeLapsed,\"Great. Round Hip.\");\n }else{\n setComment(timeLapsed,\"Great. Round Knee.\");\n this.nStage=10;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n logIt(this.sColorDirection +\" hands closed going nStage:\" + this.nStage);\n \n \n }\n \n \n \n }else{\n \n this.nEndCloseCount =0;\n }\n \n }else if (this.nStage===10){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n if (nFingerWidth > nKneeWidth \n && apl[16].y > apl[24].y && apl[15].y > apl[23].y){\n \n if (this.sColorDirection === \"B\"){\n this.nStage=9;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=15;\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n else{\n this.nStage=11;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n }\n \n logIt(this.sColorDirection +\" hands opened going nStage:\" + this.nStage);\n \n }\n \n } \n else if (this.nStage===11){\n \n if (this.nFairyIndex===16){\n this.nFairyX = apl[this.nFairyIndex].x- this.oFairy.nFairyWidth;\n }else{\n this.nFairyX = apl[this.nFairyIndex].x;\n }\n \n \n if (nFingerWidth < nKneeWidth\n && apl[16].y > apl[24].y && apl[15].y > apl[23].y){\n \n \n if (this.nEndCloseCount < this.nEndCloseTarget){\n \n this.nEndCloseCount++;\n logIt(this.nStage + \": stage endClose count: \" + this.nEndCloseCount);\n \n }else{\n \n //PlaySound(ad_shuttle,\"yummy2.mp3\");\n PlaySound(ad_shuttle,\"magicLong.mp3\");\n this.nEndCloseCount =0;\n this.addColor();\n logIt(\"adding color:\" + this.nStage);\n //setComment(timeLapsed,\"Wonderful.\");\n \n if (Math.round(aTimeLapsed-this.nGameStartTime) < this.nGameDuration){\n \n \n this.nScore++;\n \n // document.getElementById('scoreCount').innerText = this.nScore;\n this.bAssess = false; \n this.sColorDirection = \"B\";\n this.nStage=10;\n this.nFairyIndex=16;\n this.nFairyX = apl[this.nFairyIndex].x - this.oFairy.nFairyWidth;\n logIt(this.nStage+\": stage increment score:\" + this.nScore);\n \n }else{\n this.endGameProcess((apl[11].y>apl[12].y)?apl[11].y:apl[12].y);\n }\n \n logIt(this.sColorDirection +\" hands closed going nStage:\" + this.nStage);\n \n }\n \n }else{\n \n this.nEndCloseCount =0;\n \n }\n \n }\n\n }else{\n\n this.endGameProcess((apl[11].y>apl[12].y)?apl[11].y:apl[12].y);\n\n }\n\n\n } else if (this.nStage===0){\n \n if (apl[16].y < nMidSH && apl[15].y < nMidSH \n && this.nHandClosedThreshold*nShoulderWidth > nFingerWidth \n\n && apl[16].x < apl[15].x\n && checkStdev(aar_prevPts,15,1.5) && checkStdev(aar_prevPts,14,1.5)\n && checkStdev(aar_prevPts,25,1.5) && checkStdev(aar_prevPts,28,1.5)\n\n )\n {\n \n s_comment=\"Left to right. Round head\";\n this.nRefShoulderWidth = nShoulderWidth;\n document.getElementById('TimeBar').style.display=\"block\";\n this.nStage=2;\n //document.getElementById('scoreCount').innerText = \"Stage: \" +this.nStage;\n this.nGameStartTime = aTimeLapsed;\n //document.getElementById('canvasContainer').scrollTop = 0;\n logIt(\"Ex Pose found. ShoulderRefWidth: \" +this.nRefShoulderWidth + \" going nStage:\" + this.nStage);\n \n }else{\n //setComment(\"Clasp a thin object. In front of chest.\");\n }\n \n }else if (this.nStage===-3){\n\n this.nGameDuration = this.oSelector.assessSelection(apl)\n if (this.nGameDuration>0){\n \n this.nStage = 0;\n }\n\n }\n \n \n }\n\n \n }\n\n readComment(aTimeLapsed){\n\n if (this.sComment.length>0){\n\n instructNow(this.sComment);\n this.sPrevComment = this.sComment;\n this.nLastCommentTime = aTimeLapsed;\n\n this.sComment = \"\";\n \n\n }\n\n }\n\n}\n\nclass selectionObj{\n constructor(aCanvasWidth, aArryOptionTexts, aArryOptionIcons,aArryOptionValues){\n\n this.nSelectionState = 0;\n this.bPrevChoice = false;\n this.nXCount=0;\n this.arryOptionText = aArryOptionTexts;\n this.arryOptionIcon = aArryOptionIcons;\n this.arryOptionValue = aArryOptionValues;\n this.nOptionIndex =0;\n this.nOptionIconHeight=140;\n this.nCanvasWidth = aCanvasWidth;\n\n }\n\n setIconHeight(aEHeight){\n\n if (aEHeight >0 && this.nOptionIconHeight-10 > aEHeight){\n if (aEHeight <60){\n logIt(\"force set icon height to 60\")\n this.nOptionIconHeight = 60;\n }else{\n logIt(\"set icon height to: \" +aEHeight)\n this.nOptionIconHeight =aEHeight;\n }\n \n }\n\n\n }\n\n manageOptionIndex(aChange){\n\n this.nOptionIndex += aChange;\n \n if (this.nOptionIndex < 0)\n this.nOptionIndex=0;\n else if (this.nOptionIndex>=this.arryOptionIcon.length){\n this.nOptionIndex = this.arryOptionIcon.length-1;\n }\n \n }\n\n showSelection(){\n\n if(this.nOptionIndex > 0){\n\n creImage(this.arryOptionIcon[this.nOptionIndex-1],(this.nCanvasWidth/2)+ 10 + (this.nOptionIconHeight/2)\n ,0, this.nOptionIconHeight/2,this.nOptionIconHeight/2);\n\n }\n\n creImage(this.arryOptionIcon[this.nOptionIndex],(this.nCanvasWidth/2)- (this.nOptionIconHeight/2)\n ,0, this.nOptionIconHeight,this.nOptionIconHeight);\n\n if (this.nOptionIndex+1 < this.arryOptionIcon.length){\n\n creImage(this.arryOptionIcon[this.nOptionIndex+1],(this.nCanvasWidth/2)- 10 -this.nOptionIconHeight\n ,0, this.nOptionIconHeight/2,this.nOptionIconHeight/2);\n\n } \n\n }\n\n assessSelection(apl){\n\n if(apl[20].y < apl[2].y\n ){ // select option wrist over eyes\n\n if (this.bPrevChoice){ // choice made; PrevChoice to make sure the pose maintained for 2 cycles. Not glitch.\n\n logIt(\"b_prevChoice:\" + this.bPrevChoice);\n this.bPrevChoice=false;\n return this.arryOptionValue[this.nOptionIndex];\n\n }else{\n logIt(\"First Pass set choice:\" + this.bPrevChoice);\n this.bPrevChoice=true;\n }\n\n }else if(apl[16].y < apl[14].y){ // check for swipe movement coz wrist above elbow\n\n //logIt(\"checking for swipe movement\");\n this.bPrevChoice = false;\n //swipe left seq\n if (this.nSelectionState===0 && apl[16].x apl[12].x && apl[16].x < apl[7].x ){// right wrist left of right shoulder before left ear\n this.nSelectionState=2;\n //logIt(\"from 1 to : \"+ this.nSelectionState);\n }else if(this.nSelectionState===2 && apl[16].x > apl[7].x ){\n\n this.manageOptionIndex(1); // right wrist beyond left ear\n this.nSelectionState=0;\n //logIt(\"from 2 to : \"+ this.nSelectionState);\n\n } else if (this.nSelectionState===0 && apl[16].x > apl[7].x){\n this.nSelectionState=3;\n //logIt(\"from 0 to : \"+ this.nSelectionState);\n\n }else if (this.nSelectionState===3 && apl[16].x > apl[12].x && apl[16].x < apl[7].x ){\n\n this.nSelectionState=2;\n //logIt(\"from 3 to : \"+ this.nSelectionState);\n\n }else if (this.nSelectionState===2 && apl[16].x apl[14].y){\n this.nSelectionState=0;\n\n } \n\n return -3;\n\n }\n\n checkContinue(apl){\n\n if (apl[16].y < apl[14].y && apl[15].y < apl[13].y\n && apl[16].x > apl[15].x && apl[13].x > apl[14].x\n ){\n\n if (this.nXCount>6){ // hands crossed for 2 cycles\n return false;\n }else{\n this.nXCount++;\n }\n \n\n }else{\n this.nXCount=0;\n }\n\n return true;\n }\n\n}\n\nclass DropObj{\n constructor(PosNum){\n \n this.spacing = (ln_videoWidth/9)/n_wSFactor;\n this.offSet = 10;\n this.width=25;\n logIt(\"in DropObj, videoWidth: \" + ln_videoWidth + \" spacing: \" + this.spacing);\n if (this.spacing+this.offSet < this.width){\n this.width = (this.spacing+this.offSet)*0.8\n }\n this.height=this.width;\n \n this.fallY=(camera.canvas.height-this.height)/30;\n logIt(\"fallY:\" + this.fallY + \" height: \" + camera.canvas.height);\n this.level=0;\n this.vX = PosNum*this.spacing;\n this.vY = 0;\n this.orientation = generateRandomIntegerInRange(0,4);\n this.PosX = PosNum;\n this.lastAnimate=timeLapsed;\n\n \n\n }\n\n dropIfValid(){\n\n if (timeLapsed - this.lastAnimate > 0.2){\n\n if (this.level>28){ //screen height/ 80 =6, 6-1= 5\n\n return false;\n }else{\n this.drop();\n return true;\n }\n\n }else{ // not time to drop yet\n\n this.draw();\n return true;\n\n }\n\n\n }\n\n draw(){\n\n //this.orientation = generateRandomIntegerInRange(0,4);\n var imgV = document.createElement('img');\n imgV.src = \"pb\"+this.orientation+\".png\";\n //this.orientation = generateRandomIntegerInRange(0,4);\n camera.drawPic(imgV,{x:this.vX+(this.orientation*5),y:this.vY},this.width,this.height);\n\n }\n\n getXPosition(){\n return this.PosX;\n }\n\n drop(){\n\n if (timeLapsed - this.lastAnimate >0.2){\n this.vY = this.vY + this.fallY;\n this.level++;\n //this.orientation++;\n this.orientation = generateRandomIntegerInRange(0,4);\n\n this.lastAnimate = timeLapsed;\n\n }\n\n this.draw();\n \n }\n\n\n}\n\nclass TreeObj{\n\n constructor(an_position){\n\n this.position = an_position;\n\n this.imgC = document.createElement('img');\n this.imgC.src = \"TF_fairyPeach.png\";\n \n this.dimWidth = 400;\n this.dimHeight = 400;\n\n this.height = 0.6*camera.canvas.height;\n //this.width = 0.6*camera.canvas.width;\n this.width = this.height* this.dimWidth/this.dimHeight;\n \n this.y=(camera.canvas.height-this.height);\n this.animateTime =-1;\n\n // creImage(\"xt.png\",0,200,200,270);\n \n switch(an_position) {\n case 0:\n \n this.x = 0;\n \n break;\n case 1:\n\n this.x = (camera.canvas.width- this.width)/n_wSFactor;\n logIt(\"Original left x:\" + this.x + \" with wSfactor: \" + n_wSFactor + \" \");\n \n break;\n\n default:\n break;\n \n }\n }\n\n moveTree(){\n\n if (this.width>60){\n\n if (this.animateTime===-1){\n\n n_scoreCount++;\n //document.getElementById('scoreCount').innerText = n_scoreCount;\n this.animateTime=timeLapsed;\n \n }else if(timeLapsed - this.animateTime > 0.15){\n \n this.width = 0.9*this.width;\n this.height=0.9*this.height;\n \n this.animateTime=timeLapsed;\n }\n\n if (this.position ===1)\n this.x = (camera.canvas.width -this.width)/n_wSFactor;\n\n camera.drawPic(this.imgC,{x:this.x,y:this.y},this.width/n_vSFactor,this.height/n_vSFactor);\n\n }else{\n\n logIt(\"end animation\");\n b_moveTree = false;\n\n this.animateTime=-1\n if (this.position ===1)\n if (n_scoreCount%4===0){\n instructNow(\"Neat. Skate to the left \");\n }else{\n instructNow(\"Good. Skate to the left \");\n }\n \n else{\n\n if (n_scoreCount%3===0){\n instructNow(\"Lovely. Now to the right\");\n\n }else{\n\n instructNow(\"Great. Now to the right\");\n } \n\n }\n \n }\n //logIt(\"drawing covid x:\" + this.cX +\" y:\" + this.cY);\n }\n\n}\n\nclass TapObj{\n constructor(anDuration){\n \n this.nTargetDuration = anDuration;\n \n this.nStablePoseTarget=1;\n this.nHitDuration = 6;\n \n this.nExStartTime = timeLapsed;\n this.nStableTarget=1;\n this.arryTargetsList=[\"L\",\"LC\",\"LR\",\"C\",\"CR\",\"R\"];\n \n\n this.bExPoseReady=false; \n this.nScore=0;\n\n this.nStartPose=0; \n\n this.arrySpinOut=[];\n this.arryDisplayedTargets=[];\n\n this.oSelector = new selectionObj(camera.canvas.width,[\"play 1 minute\",\"play 3 minutes\",\"play 5 minutes\",\"play continuous\"]\n ,[\"F_1min.png\",\"F_3min.png\",\"F_5min.png\",\"F_unlimited.png\"],[60,180,300,99999]);\n\n this.nImgWidth =-1;\n this.nImgHeight =-1;\n\n this.n_bannerY=0;\n\n\n }\n\n setDisplayTargets(){\n \n let nTargetLocationIndex = generateRandomIntegerInRange(0,5);\n //let nTargetLocationIndex =1;\n\n logIt(\"Random Target location index: \" + nTargetLocationIndex + \" with code: \" + this.arryTargetsList[nTargetLocationIndex]);\n\n this.arryDisplayedTargets=[];\n\n for (var i=0;i0 && this.nImgHeight>0 && this.arryDisplayedTargets.length>0){\n\n let nY = 0;\n let nX;\n \n logIt(\"in show, this.arryDisplayedTargets count: \" + this.arryDisplayedTargets.length);\n for (let apos of this.arryDisplayedTargets){\n \n nX = this.getXPos(apos);\n \n logIt(\"display banana with nX: \" + nX);\n \n creImage(\"banana.png\",nX,nY,this.nImgWidth,this.nImgHeight) \n \n }\n \n \n }\n \n if (this.arrySpinOut.length>0){\n \n let arryTempSpin=[]; \n \n for (let spinObj of this.arrySpinOut){\n \n logIt(\"Let spin! spinObj.state: \" + spinObj.state + \" destin: \" + spinObj.destin + \" sping content: \" + this.arrySpinOut.length);\n \n if (spinObj.state<6){\n spinObj.state++;\n let nRotateAngle = spinObj.state*45;\n let nPosX = this.getXPos(spinObj.destin),nPosY = spinObj.state* (camera.canvas.height-this.nImgHeight)/7\n \n if (nRotateAngle===225)\n nPosY = spinObj.state* (camera.canvas.height-this.nImgHeight)/7 + 0.5*this.nImgHeight;\n \n else if(nRotateAngle===270)\n nPosY = spinObj.state* (camera.canvas.height-this.nImgHeight)/7 + this.nImgHeight;\n else if(nRotateAngle===315)\n nPosY = spinObj.state* (camera.canvas.height-this.nImgHeight)/7+ 1.5*this.nImgHeight;\n \n \n if (nPosY > camera.canvas.height)\n nPosY = camera.canvas.height - this.nImgHeight;\n \n logIt(\"nPosX: \" + nPosX +\" nPosY: \" + nPosY +\" nRotateAngle:\" + nRotateAngle \n + \" screen height: \" + camera.canvas.height + \" this.nImgHeight\" + this.nImgHeight);\n \n creRotatedDropImage(\"banana.png\",nPosX,nPosY,this.nImgWidth,this.nImgHeight,nRotateAngle);\n \n //arryTmpDisplay.push(new ObjDisplayFrame(\"banana.png\",nPosX,nPosY,this.nWidth,this.nHeight,\"\",nRotateAngle)); \n arryTempSpin.push(spinObj);\n }\n \n \n }\n \n this.arrySpinOut = arryTempSpin;\n \n }\n\n }else{\n logIt(\"Time ended\");\n this.endGameProcess(this.nTargetDuration);\n }\n\n\n }\n\n\n\n assess(apl, aTimeLapsed,aar_prevPts){\n \n var bContinue = this.oSelector.checkContinue(apl);\n var bStageCompleted = false;\n\n logIt(\"in assess with continue: \" + bContinue);\n if (bContinue){\n\n if (this.nImgHeight===-1 && checkPartsStability(aar_prevPts,[objPartIndexMap.le,objPartIndexMap.rm],3)){\n\n\n logIt(\"facial stable. Setting Img dim\");\n this.nImgHeight =getArrayAvg(aar_prevPts,objPartIndexMap.le,\"y\") - (getArrayAvg(aar_prevPts,objPartIndexMap.lm,\"y\") - getArrayAvg(aar_prevPts,objPartIndexMap.le,\"y\"));\n\n if (this.nImgHeight < 0.25*camera.canvas.height)\n this.nImgHeight = 0.25*camera.canvas.height\n\n this.nImgWidth = 0.3*camera.canvas.width;\n\n logIt(\" Avg le position Y: \" + getArrayAvg(aar_prevPts,objPartIndexMap.le,\"y\") \n + \" Avg lm position Y: \" + getArrayAvg(aar_prevPts,objPartIndexMap.lm,\"y\") \n + \" nImgHeight: \" + this.nImgHeight + \" nImgWidth: \" + this.nImgWidth );\n\n\n }\n\n // 1 cycle only do either\n if (this.arryDisplayedTargets.length===0 || (timeLapsed - this.nHitStartTime > this.nHitDuration && this.nHitStartTime>0)){\n // if all cleared the set new targets\n\n logIt(\"Setting target in assess\");\n this.setDisplayTargets();\n\n }else{\n\n let arryTmpTargets=[];\n logIt(\"got targets to display\");\n for (let targetPos of this.arryDisplayedTargets){\n let nThisTargetX = this.getXPos(targetPos);\n \n logIt(\"nThisTargetX: \" + nThisTargetX + \" from targetPos: \" + targetPos);\n if ((apl[objPartIndexMap.lw].y< this.nImgHeight \n && apl[objPartIndexMap.lw].x > nThisTargetX \n && apl[objPartIndexMap.lw].x < (nThisTargetX+this.nImgWidth))\n ||(apl[objPartIndexMap.rw].y< this.nImgHeight \n && apl[objPartIndexMap.rw].x > nThisTargetX\n && apl[objPartIndexMap.rw].x < (nThisTargetX+this.nImgWidth))\n ){\n\n logIt(\"playing magic bell\");\n PlaySound(ad_shuttle,\"magicBell.mp3\",false);\n this.arrySpinOut.push({state:0,destin:targetPos});\n //this.arrySpinOut.push({});\n\n }else{\n\n arryTmpTargets.push(targetPos);\n\n }\n\n }\n\n this.arryDisplayedTargets = arryTmpTargets;\n\n }\n\n }else{\n logIt(\"End with access\");\n this.n_bannerY= (apl[11].y>apl[12].y)?apl[11].y:apl[12].y;\n this.endGameProcess(Math.round( aTimeLapsed - this.nExStartTime));\n }\n\n\n }\n\n endGameProcess(aDuration){\n\n //sendData(\"yys\");\n b_inEx=false;\n this.nStage=-4;\n showEndBanner(this.n_bannerY);\n document.getElementById('gameTime').innerText = aDuration;\n document.getElementById('share').style.display = \"none\";\n PlaySound(ad_countDown,\"BellCelebrateHorn.mp3\",false);\n logIt(\"in endGameProcess, setting good job\");\n setComment(timeLapsed,\"Well Done!Good Job!\");\n\n }\n\n}\n\nclass PuzzleObj{\n constructor(anDuration){\n \n this.nTargetDuration = anDuration;\n \n this.nStablePoseTarget=1;\n this.nHitDuration = 6;\n \n this.nExStartTime = timeLapsed;\n this.nStableTarget=1;\n\n this.bExPoseReady=false; \n this.nScore=0;\n\n this.nStartPose=0; \n\n this.arrySpinOut=[];\n this.arryDisplayedTargets=[];\n\n\n this.nStableY=0;\n\n this.nImgWidth =-1;\n this.nImgHeight =-1;\n\n this.n_bannerY=0;\n\n //this.arrySPLocations=[\"LT\",\"LM\",\"RT\",\"RM\"];\n this.arrySPLocations=[\"LT\",\"RT\"];\n\n this.bInHand=false;\n this.arrySnapped = [];\n this.sMP=\"\";\n this.arryPreFix = [\"a\",\"b\",\"c\"];\n this.arryMP = [\"t1\",\"t2\",\"t3\",\"t4\",\"m1\",\"m2\",\"m3\",\"m4\",\"b1\",\"b2\",\"b3\",\"b4\"];\n this.sMPSpot=\"\";\n this.nHoldingIndex=0;\n this.nHoldingX = -1;\n this.nHoldingY=-1;\n this.bShowPiece=true;\n\n this.nPhase=-2;\n this.nStartTime = timeLapsed;\n this.nPuzzleDone=0;\n this.nAllDurations = [];\n\n\n }\n\n setDisplayTarget(){\n \n if (this.arryMP.length>0){\n\n let nMPIndex = generateRandomIntegerInRange(0,this.arryMP.length-1);\n\n //nMPIndex=this.arryMP.length-1;\n\n this.sMP = this.arryMP[nMPIndex];\n \n //this.sMP=\"M\";\n this.arryMP.splice(nMPIndex,1);\n \n \n this.sMPSpot=this.arrySPLocations[generateRandomIntegerInRange(0,this.arrySPLocations.length-1)];\n //this.sMPSpot=\"RM\";\n\n }else{\n\n this.sMPSpot=\"\";\n\n }\n \n\n /* \n for (var i=0;i0){\n\n mpWidth = 0.4*camera.canvas.width;\n mpHeight = 0.3*camera.canvas.height;\n\n if (this.sMPSpot.startsWith(\"L\")){\n mpX = 0.6*camera.canvas.width;\n \n }else{\n mpX = 0;\n }\n \n if (this.sMPSpot.endsWith(\"T\")){\n mpY=0;\n \n }else{\n mpY=0.05* camera.canvas.height;\n }\n\n imgName = this.arryPreFix[this.nPuzzleDone] + sPieceID + \".png\";\n\n }\n\n //logIt(\"creImage: \" + imgName + \" x:\" + mpX + \" y:\" + mpY+\" width:\" + mpWidth + \" height:\" + mpHeight);\n creImage(imgName,mpX,mpY,mpWidth,mpHeight);\n\n\n }\n\n getXPos(asPos){\n\n if (asPos===\"L\"){\n\n return 0.7* camera.canvas.width;\n\n }else if (asPos===\"C\"){\n\n return 0.35* camera.canvas.width;\n\n }else {\n // must be R\n return 0;\n\n }\n\n }\n\n displayInHand(){\n\n let sPieceName =this.arryPreFix[this.nPuzzleDone]+ this.sMP+\".png\";\n\n let nImgWidth = 0.4*camera.canvas.width;\n let nImgHeight = 0.3* camera.canvas.height;\n\n // let nImgWidth = 0.04*camera.canvas.width;\n // let nImgHeight = 0.03* camera.canvas.height;\n\n let imgX = this.nHoldingX - nImgWidth/2;\n let imgY = this.nHoldingY - nImgHeight/2;\n\n creImage(sPieceName,imgX,imgY,nImgWidth,nImgHeight);\n\n\n }\n\n\n show(aTimeLapsed){\n\n logIt(\"this.nExStartTime: \" + this.nExStartTime + \" this.nTargetDuration: \" + this.nTargetDuration)\n \n\n logIt(\"Still in play\");\n\n if (this.nPhase===-1){\n\n this.showStaticPiece(\"Y\",\"C\");\n\n }else if (this.nPhase===0 && (aTimeLapsed - this.nStartTime) < 3){\n\n this.showStaticPiece(\"F\",\"C\");\n\n }else if (this.nPhase===0 && (aTimeLapsed - this.nStartTime) > 3){\n\n if (this.bShowPiece){\n this.setDisplayTarget();\n this.bShowPiece=false;\n }\n this.nPhase=1;\n\n }else if(this.nPhase===1){\n\n\n document.getElementById('gameTime').innerText = (Math.round( aTimeLapsed - this.nStartTime) -3) + stats.sum(this.nAllDurations);\n\n if ((Math.round( aTimeLapsed - this.nStartTime) -3) < this.nTargetDuration){\n\n //b_displayTime = true;\n this.showStaticPiece(\"BP\",\"C\");\n\n if (this.arrySnapped.length>0){\n\n logIt(\"display snapped\");\n for (var i=0;i 5){\n\n this.bExPoseReady=false;\n this.nPhase=-2;\n this.nScore=0;\n this.sMP=\"\";\n\n this.bInHand=false;\n this.arrySnapped = [];\n this.sMP=\"\";\n this.arryMP = [\"t1\",\"t2\",\"t3\",\"t4\",\"m1\",\"m2\",\"m3\",\"m4\",\"b1\",\"b2\",\"b3\",\"b4\"];\n this.nStableY=0;\n this.sMPSpot=\"\";\n this.nHoldingIndex=0;\n this.nHoldingX = -1;\n this.nHoldingY=-1;\n this.bShowPiece=true;\n\n\n if (b_actualPlay){\n\n if (this.nPuzzleDone===3){\n\n\n this.completedSegment();\n \n }\n\n }else\n this.completedSegment();\n\n\n }\n\n \n\n }\n\n\n checkGrabPiece(apl){\n\n if (this.sMPSpot===\"LT\"){\n\n if(apl[objPartIndexMap.li].x > 0.6*camera.canvas.width && apl[objPartIndexMap.li].y < 0.3*camera.canvas.height ){\n\n this.bInHand = true;\n this.nHoldingIndex = objPartIndexMap.li;\n\n }\n\n }else if(this.sMPSpot===\"LM\"){\n\n if(apl[objPartIndexMap.li].x > 0.7*camera.canvas.width \n && apl[objPartIndexMap.li].y < 0.35*camera.canvas.height && apl[objPartIndexMap.li].y > 0.2*camera.canvas.height){\n\n this.bInHand = true;\n this.nHoldingIndex = objPartIndexMap.li;\n\n }\n\n }else if(this.sMPSpot===\"RT\"){\n\n if(apl[objPartIndexMap.ri].x < 0.4*camera.canvas.width \n && apl[objPartIndexMap.ri].y < 0.3*camera.canvas.height){\n\n this.bInHand = true;\n this.nHoldingIndex = objPartIndexMap.ri;\n\n }\n\n }else if(this.sMPSpot===\"RM\"){\n\n if(apl[objPartIndexMap.ri].x < 0.3*camera.canvas.width \n && apl[objPartIndexMap.ri].y < 0.35*camera.canvas.height && apl[objPartIndexMap.ri].y > 0.2*camera.canvas.height){\n\n this.bInHand = true;\n this.nHoldingIndex = objPartIndexMap.ri;\n\n }\n\n }\n\n\n }\n\n getGridBox(asMP){\n\n let nMinY, nMaxY,nMinX,nMaxX;\n\n if (asMP.startsWith(\"t\")){\n\n\n nMinY = 0.25*camera.canvas.height;\n nMaxY = 0.45*camera.canvas.height;\n\n /*\n if (apl[this.nHoldingIndex].x > 0.35*camera.canvas.width && apl[this.nHoldingIndex].x < 0.65*camera.canvas.width\n && apl[this.nHoldingIndex].y> 0.40*camera.canvas.height && apl[this.nHoldingIndex].y< 0.55*camera.canvas.height ){\n\n this.bInHand=false;\n this.arrySnapped.push(this.sMP);\n this.sMP=\"\";\n this.setDisplayTarget();\n this.nScore++;\n\n }*/\n\n }else if (asMP.startsWith(\"m\")){\n\n nMinY = 0.45*camera.canvas.height;\n nMaxY = 0.65*camera.canvas.height;\n\n }else if (this.sMP.startsWith(\"b\")){\n\n nMinY = 0.65*camera.canvas.height;\n nMaxY = 0.85*camera.canvas.height;\n\n }\n\n if (asMP.endsWith(\"1\")){\n\n nMinX = 0.725*camera.canvas.width;\n nMaxX = 0.95*camera.canvas.width;\n\n }else if (asMP.endsWith(\"2\")){\n\n nMinX = 0.5*camera.canvas.width;\n nMaxX = 0.725*camera.canvas.width;\n\n }else if (asMP.endsWith(\"3\")){\n\n nMinX = 0.275*camera.canvas.width;\n nMaxX = 0.5*camera.canvas.width;\n\n }else if (asMP.endsWith(\"4\")){\n\n nMinX = 0.05*camera.canvas.width;\n nMaxX = 0.275*camera.canvas.width;\n\n }\n\n return {minX: nMinX, maxX: nMaxX,minY: nMinY, maxY: nMaxY};\n\n\n }\n checkSnapPiece(apl){\n\n let oGridBox = this.getGridBox(this.sMP);\n\n\n if (apl[this.nHoldingIndex].x > oGridBox.minX && apl[this.nHoldingIndex].x < oGridBox.maxX\n && apl[this.nHoldingIndex].y> oGridBox.minY && apl[this.nHoldingIndex].y< oGridBox.maxY ){\n\n this.bInHand=false;\n\n\n this.arrySnapped.push({imgName:this.arryPreFix[this.nPuzzleDone]+this.sMP+\".png\", x: oGridBox.minX,y:oGridBox.minY,w: 0.225*camera.canvas.width, h:0.20*camera.canvas.height });\n this.sMP=\"\";\n this.setDisplayTarget();\n this.nScore++;\n\n }\n\n\n\n }\n\n checkInitialCondition(apl){\n\n //document.getElementById(\"startcondition\").innerText = ((apl[objPartIndexMap.lfi].y - apl[objPartIndexMap.re].y)/camera.canvas.height).toFixed(2);\n\n if (apl[objPartIndexMap.lfi].x < camera.canvas.width && apl[objPartIndexMap.lfi].x >0\n && apl[objPartIndexMap.rfi].x < camera.canvas.width && apl[objPartIndexMap.rfi].x >0\n && apl[objPartIndexMap.li].x < camera.canvas.width && apl[objPartIndexMap.li].x >0\n && apl[objPartIndexMap.ri].x < camera.canvas.width && apl[objPartIndexMap.ri].x >0\n && apl[objPartIndexMap.lfi].y < camera.canvas.height && apl[objPartIndexMap.lfi].x >0\n && apl[objPartIndexMap.rfi].y < camera.canvas.height && apl[objPartIndexMap.rfi].x >0\n && apl[objPartIndexMap.le].y < camera.canvas.height && apl[objPartIndexMap.le].x >0\n && apl[objPartIndexMap.re].y < camera.canvas.height && apl[objPartIndexMap.re].x >0\n && (apl[objPartIndexMap.lfi].y - apl[objPartIndexMap.re].y) > 0.7*camera.canvas.height){\n\n this.bExPoseReady=true;\n this.nPhase=-1;\n // document.getElementById(\"startcondition\").innerText =this.nPhase;\n //this.setDisplayTarget();\n\n }\n\n\n }\n\n checkYPose(apl){\n\n if (apl[objPartIndexMap.rw].x < apl[objPartIndexMap.reb].x && apl[objPartIndexMap.reb].x < apl[objPartIndexMap.rs].x\n && apl[objPartIndexMap.ls].x < apl[objPartIndexMap.leb].x && apl[objPartIndexMap.leb].x < apl[objPartIndexMap.lw].x\n && apl[objPartIndexMap.rw].y < apl[objPartIndexMap.reb].y && apl[objPartIndexMap.reb].y < apl[objPartIndexMap.rs].y\n && apl[objPartIndexMap.lw].y < apl[objPartIndexMap.leb].y && apl[objPartIndexMap.leb].y < apl[objPartIndexMap.ls].y\n ){\n return true;\n }else{\n return false;\n }\n\n }\n\n\n\n assess(apl, aTimeLapsed,aar_prevPts){\n \n //var bContinue = this.oSelector.checkContinue(apl);\n var bContinue=true;\n var bStageCompleted = false;\n\n if (!this.bExPoseReady){\n this.checkInitialCondition(apl);\n }else if (this.nPhase===-1){\n\n if (this.checkYPose(apl)){\n\n this.nStableY++;\n\n if (this.nStableY>3){\n\n this.nPhase = 0;\n this.nStartTime = timeLapsed;\n //document.getElementById(\"startcondition\").innerText = this.nPhase;\n\n }\n \n\n }else\n this.nStableY=0;\n \n\n //document.getElementById(\"startcondition\").innerText = this.nStableY;\n\n }else{\n\n logIt(\"in assess with continue: \" + bContinue);\n\n if (this.nPhase===1){\n\n if (this.nScore<12 && this.sMPSpot!==\"\"){\n this.checkGrabPiece(apl);\n }\n \n if (this.bInHand){\n \n this.nHoldingX = apl[this.nHoldingIndex].x;\n this.nHoldingY = apl[this.nHoldingIndex].y;\n \n this.checkSnapPiece(apl);\n\n if (this.nScore===12)\n this.endGameProcess();\n \n }\n\n }\n\n\n\n }\n\n\n }\n\n endGameProcess(){\n\n //sendData(\"yys\");\n //b_inEx=false;\n //this.nPhase=-2;\n this.nPuzzleDone++;\n\n let nThisDuration = (Math.round( timeLapsed - this.nStartTime) -3);\n\n if (nThisDuration > this.nTargetDuration)\n nThisDuration = this.nTargetDuration;\n this.nAllDurations.push(nThisDuration);\n\n this.nStartTime = timeLapsed;\n this.nPhase = 3;\n\n if (this.nPuzzleDone===3 && b_actualPlay)\n sendTime(s_teamName,stats.sum(this.nAllDurations));\n\n //this.nStage=-4;\n //showEndBanner(this.n_bannerY);\n\n\n }\n\n completedSegment(){\n\n b_predict=false;\n //b_runTime = false;\n b_displayTime=false;\n\n document.getElementById('nc').style.display=\"block\";\n \n getContent();\n \n document.documentElement.scrollTop =0;\n document.getElementById('gameTime').innerText=0;\n document.getElementById('ExView').style.display=\"none\";\n\n }\n\n}\n\nclass DanceObj{\n constructor(){\n\n this.nStopTolerance = 2;\n this.nFadeTiming = 1; \n this.nCutTime=10;\n this.nInitBuffer=15;\n this.nGaming=timeLapsed;\n this.nGameStart = timeLapsed;\n\n this.nAnimationPhase=1;\n this.nAnimationBase=5;\n this.nDiminish=1;\n\n this.nCorner=0;\n this.nColor=0;\n\n this.nDifference=1;\n this.nSafeLevel=-1;\n\n //this.bEmergency=false;\n\n this.nEmergency=0;\n \n //this.startSong();\n\n }\n\n\n checkPlayingCondition(apl,aar_prevPts){\n\n //document.getElementById(\"startcondition\").innerText = ((apl[objPartIndexMap.lfi].y - apl[objPartIndexMap.re].y)/camera.canvas.height).toFixed(2);\n\n if (\n apl[objPartIndexMap.li].x < camera.canvas.width && apl[objPartIndexMap.li].x >0\n && apl[objPartIndexMap.ri].x < camera.canvas.width && apl[objPartIndexMap.ri].x >0\n\n && apl[objPartIndexMap.le].y < camera.canvas.height && apl[objPartIndexMap.le].x >0\n && apl[objPartIndexMap.re].y < camera.canvas.height && apl[objPartIndexMap.re].x >0\n\n && apl[objPartIndexMap.leb].y > apl[objPartIndexMap.lw].y && apl[objPartIndexMap.reb].y > apl[objPartIndexMap.rw].y\n && getArrayStdev(aar_prevPts,objPartIndexMap.lw,\"x\") >2 && getArrayStdev(aar_prevPts,objPartIndexMap.rw,\"x\") >2\n \n ){\n \n if ( this.nSafeLevel < 0)\n this.nSafeLevel = apl[objPartIndexMap.lh].y\n\n this.nGaming = timeLapsed;\n\n }\n\n\n }\n\n assess(apl, aTimeLapsed,aar_prevPts){\n\n //document.getElementById(\"tName\").innerText = this.nGaming;\n document.getElementById(\"gameTime\").innerText = Math.round(timeLapsed);\n\n this.checkPlayingCondition(apl, aar_prevPts);\n\n if (apl[0].y> this.nSafeLevel){\n pauseSong();\n this.nEmergency++;\n\n if (this.nEmergency>5){\n\n setComment(timeLapsed, \"Are you ok?\");\n\n }else{\n \n document.getElementById(\"emergencyPic\").style.display=\"block\";\n\n if (arry_safety.length>4){\n\n document.getElementById(\"f0\").src = arry_safety[0];\n document.getElementById(\"f1\").src = arry_safety[1];\n document.getElementById(\"f2\").src = arry_safety[2];\n document.getElementById(\"f3\").src = arry_safety[3];\n document.getElementById(\"f4\").src = arry_safety[4];\n\n }\n\n this.bEmergency=true;\n }\n\n \n\n\n\n }else{\n\n this.nEmergency=0\n\n if (timeLapsed -this.nGameStart> this.nInitBuffer){\n\n\n if(this.nGaming < this.nInitBuffer)\n this.nGaming = this.nInitBuffer\n \n if (timeLapsed - this.nGaming > this.nStopTolerance){\n \n \n let nDifference = Math.round(timeLapsed - this.nGaming);\n \n if (nDifference < this.nCutTime){\n \n gainNode.gain.value = -1*0.1*nDifference;\n \n if (gainNode.gain.value < 0){\n \n if (gainNode.gain.value > -0.25)\n this.nDiminish = 0.7;\n else if (gainNode.gain.value > -0.5)\n this.nDiminish = 0.5;\n else if (gainNode.gain.value > -0.7)\n this.nDiminish = 0.25;\n }\n \n \n }else{\n \n pauseSong();\n this.nDiminish =0;\n \n }\n \n }else{\n \n if (gainNode.gain.value <0){\n gainNode.gain.value = Math.abs(gainNode.gain.value);\n this.nDifference=1;\n }\n \n \n startSong();\n this.nDiminish =1;\n \n }\n \n }\n\n }\n\n\n \n\n }\n\n show(aTimeLapsed){\n\n if (this.nEmergency>5){\n\n\n creImage(\"emergency.png\",0,0,camera.canvas.width,camera.canvas.height);\n\n }else{\n\n if (this.nAnimationPhase===2){\n\n arry_safety.push(camera.canvas.toDataURL());\n \n if (arry_safety.length===n_poseLookBack)\n arry_safety.shift();\n \n }\n \n let nImgWidth = this.nDiminish*(this.nAnimationPhase/this.nAnimationBase) * camera.canvas.width;\n let nImgHeight = this.nDiminish*(this.nAnimationPhase/this.nAnimationBase) * camera.canvas.height;\n \n let yPos = 0;\n let xPos = 0;\n \n if (this.nCorner===0){\n \n yPos = camera.canvas.height - nImgHeight;\n xPos = camera.canvas.width - nImgWidth;\n \n }else if (this.nCorner===1){\n \n yPos = 0;\n xPos = 0;\n \n \n }else if (this.nCorner===2){\n \n yPos = camera.canvas.height - nImgHeight;\n xPos = 0;\n \n }else if (this.nCorner===3){\n \n yPos = 0;\n xPos = camera.canvas.width - nImgWidth;\n \n }\n\n \n creImage(this.nColor+\".jfif\",xPos,yPos,nImgWidth,nImgHeight);\n \n this.nAnimationPhase++;\n \n if (this.nAnimationPhase>this.nAnimationBase){\n \n this.nAnimationPhase=1;\n this.nCorner++;\n if (this.nCorner>3)\n this.nCorner=0;\n \n this.nColor++;\n if (this.nColor>5)\n this.nColor=0;\n \n }\n \n }\n\n }\n\n}\n\nfunction startSong(){\n\n\n if (audioCtx.state !== \"running\"){\n audioCtx.resume().then(function(){\n\n gainNode.gain.value = 1;\n song.play();\n\n });\n\n }\n\n}\n\nfunction pauseSong(){\n\n if (audioCtx.state === \"running\"){\n\n audioCtx.suspend().then(function(){\n song.pause();\n });\n\n }\n}\n\n\n\nfunction checkPartsStability(aarryPoseSeq,aarryIndiceToCheck,anStdev){\n\n for (let nIndex of aarryIndiceToCheck){\n\n if (getArrayStdev(aarryPoseSeq,nIndex,\"y\")>anStdev || getArrayStdev(aarryPoseSeq,nIndex,\"x\")>anStdev){\n\n logIt(\"index: \" + nIndex + \" not stable. y: \"+getArrayStdev(aarryPoseSeq,nIndex,\"y\") + \" x: \" + getArrayStdev(aarryPoseSeq,nIndex,\"x\"));\n return false;\n\n }\n\n }\n logIt(\"Parts are stable\");\n return true;\n\n}\n\nfunction getArrayAvg(aarry, an_poseIndex, as_property){\n\n var tmp_arry=[];\n\n for (var t=0; t< aarry.length; t++){\n \n if (as_property===\"x\")\n tmp_arry.push(aarry[t][an_poseIndex].x);\n else\n tmp_arry.push(aarry[t][an_poseIndex].y);\n\n }\n\n //logIt(\"length arry: \" + aarry.length + \" avg tmp_arryX:\" +stats.mean(tmp_arryX) );\n\n return stats.mean(tmp_arry);\n\n}\n\nfunction getArrayStdev(aarry, an_poseIndex, as_property){\n\n var tmp_arry=[];\n\n for (var t=0; t< aarry.length; t++){\n \n if (as_property===\"x\")\n tmp_arry.push(aarry[t][an_poseIndex].x);\n else\n tmp_arry.push(aarry[t][an_poseIndex].y);\n\n }\n\n //logIt(\"length arry: \" + aarry.length + \" avg tmp_arryX:\" +stats.mean(tmp_arryX) );\n\n return stats.stdev(tmp_arry);\n\n}\n\nfunction UpdateReward(){\n\n if (s_name.length>0 ){\n\n var dYesterday = new Date(new Date().setDate(new Date().getDate() - 1));\n \n var dToday = new Date();\n\n var dNextYear =new Date(new Date().setFullYear(new Date().getFullYear() + 1));\n\n \n\n if (d_lastPlay===-1 ||(d_lastPlay.getDate() ===dYesterday.getDate()&& d_lastPlay.getMonth() ===dYesterday.getMonth()) ){ // \n\n n_myCoupon++;\n // 3,5,7\n \n var lTier=0;\n if (n_myCoupon > 6){\n lTier = 3;\n }else if (n_myCoupon > 4){\n lTier = 2;\n }else if (n_myCoupon > 2){\n lTier = 1;\n \n }\n \n if (lTier > n_tierAchieved)\n n_tierAchieved = lTier;\n \n }else{\n if (!(d_lastPlay.getDate() ===dToday.getDate()&& d_lastPlay.getMonth() ===dToday.getMonth())){\n n_myCoupon=1;\n }\n \n }\n\n /*\n document.cookie = \"BLSRName=\"+s_name + \"; expires=\" + dNextYear.toUTCString();\n document.cookie = \"DateLastPlayed=\"+dToday+\"; expires=\" + dNextYear.toUTCString();\n document.cookie = \"TierAchievered=\"+n_tierAchieved+\"; expires=\" + dNextYear.toUTCString();\n document.cookie = \"CurrentSeq=\"+n_myCoupon+\"; expires=\" + dNextYear.toUTCString()\n\n document.cookie = \"BLSRName=\"+s_name + \";\" ;\n document.cookie = \"DateLastPlayed=\"+dToday+\";\";\n document.cookie = \"TierAchievered=\"+n_tierAchieved+\";\";\n document.cookie = \"CurrentSeq=\"+n_myCoupon+\";\";\n */\n\n d_lastPlay = dToday;\n\n document.cookie = \"BLSRName=\"+s_name + \"; expires=\" + dNextYear.toUTCString();\n document.cookie = \"DateLastPlayed=\"+dToday+\"; expires=\" + dNextYear.toUTCString();\n document.cookie = \"TierAchievered=\"+n_tierAchieved+\"; expires=\" + dNextYear.toUTCString();\n document.cookie = \"CurrentSeq=\"+n_myCoupon+\"; expires=\" + dNextYear.toUTCString();\n\n logIt(\"BLSRName=\"+s_name);\n logIt(\"DateLastPlayed=\"+dToday);\n logIt(\"TierAchievered=\"+n_tierAchieved);\n logIt(\"CurrentSeq=\"+n_myCoupon);\n\n //document.getElementById('blsrProgress').style.display=\"block\";\n\n \n //document.getElementById('residentName').innerText = s_name;\n\n //document.getElementById('TierAchievered').innerText = n_tierAchieved;\n //document.getElementById('DateLastPlayed').innerText = formatDate(d_lastPlay);\n\n //document.getElementById('CurrentSeq').innerText = n_myCoupon;\n\n //logIt(\"blsrProgress blocked and values set: \" + formatDate(d_lastPlay) + \" conSeq:\" + n_myCoupon);\n\n //sendData(\"Cookies\");\n\n\n // dYesterday.getDate() getMonth() blsrProgress\n\n\n\n }\n\n\n\n}\n\nfunction setComment(aTimeLapsed, aCommentStr){\n\n if (typeof(aCommentStr) === \"undefined\"){\n logIt(\"detected undefined str\");\n }else\n if(aTimeLapsed - n_lastCommentTime > ln_configRA || s_prevComment!==aCommentStr){\n\n logIt(\"Set comment: \" + aCommentStr);\n s_comment = aCommentStr;\n\n }\n\n}\n\nfunction sayComment(aTimeLapsed){\n\n if (s_comment.length>0){\n\n instructNow(s_comment);\n s_prevComment = s_comment;\n n_lastCommentTime = aTimeLapsed;\n\n s_comment = \"\";\n \n\n }\n\n}\n\nfunction getIndex(aarryExistingIndex){\n\n var ln_randPosition = generateRandomIntegerInRange(0,7);\n var b_searchingIndex = true;\n\n while(b_searchingIndex){\n\n if (aarryExistingIndex.includes(ln_randPosition)){\n ln_randPosition++;\n\n if (ln_randPosition > 7){\n ln_randPosition=0;\n }\n }else{\n b_searchingIndex = false;\n }\n }\n return ln_randPosition;\n}\n\n\nfunction getAvgX(aarry, an_index){\n\n var tmp_arryX=[];\n\n for (var t=0; t< aarry.length; t++){\n \n tmp_arryX.push(aarry[t][an_index].x);\n }\n\n //logIt(\"length arry: \" + aarry.length + \" avg tmp_arryX:\" +stats.mean(tmp_arryX) );\n\n return stats.mean(tmp_arryX);\n\n}\n\nfunction getAvgY(aarry, an_index){\n\n var tmp_arryY=[];\n\n for (var t=0; t< aarry.length; t++){\n \n tmp_arryY.push(aarry[t][an_index].y);\n }\n\n //logIt(\"length arry: \" + aarry.length + \" avg tmp_arryY:\" +stats.mean(tmp_arryY) );\n\n return stats.mean(tmp_arryY);\n\n}\n\nfunction checkStdev(aarry, an_index, an_sstev){\n\n var tmp_arryX=[];\n var tmp_arryY=[];\n for (var t=0; t< aarry.length; t++){\n tmp_arryX.push(aarry[t][an_index].x);\n tmp_arryY.push(aarry[t][an_index].y);\n }\n\n /*\n logIt(\"length arry: \" + aarry.length + \" stdev tmp_arryX:\" +stats.stdev(tmp_arryX)\n + \" stdev tmp_arryY:\" +stats.stdev(tmp_arryY) );\n */\n //document.getElementById('gameTime').innerText = \"stdevX: \" + stats.stdev(tmp_arryX) + \" Y:\" + stats.stdev(tmp_arryY)\n if (stats.stdev(tmp_arryX)< an_sstev && stats.stdev(tmp_arryY)< an_sstev){\n return true;\n }else{\n logIt(\"not stable:\" + an_index);\n return false;\n }\n\n\n}\n\nfunction setUpDeviceParam(){\n\n var ln_vWidth=document.getElementById('video').videoWidth; \n\n var ln_vHeight=document.getElementById('video').videoHeight; \n var n_scaleFactor = 0;\n\n var b_isMobile = window.matchMedia(\"only screen and (max-width: 760px)\").matches;\n\n logIt(\"is it mobile:\" +b_isMobile);\n\n logIt(\"video size: width:\" + ln_vWidth + \" height:\" + ln_vHeight);\n logIt(\"screen size: width:\" + window.screen.width + \" height:\" + window.screen.height);\n \n if (window.screen.height > window.screen.width ){ // portrait\n\n\n if (ln_vWidth > window.screen.width){\n\n document.getElementById('canvasContainer').style.width = window.screen.width+\"px\";\n document.getElementById('canvasContainer').style.height = window.screen.height+\"px\";\n \n if(window.screen.width < ln_vWidth){\n n_scaleFactor = window.screen.width/ln_vWidth;\n }\n\n }\n\n\n\n\n\n }else {\n\n if (window.screen.height>=720 && window.screen.width>=960 ){\n\n\n // document.getElementById('canvasContainer').style.width =\"960px\";\n // document.getElementById('canvasContainer').style.height = \"720px\";\n\n n_scaleFactor = 960/ln_vWidth; \n }else if (window.screen.height >= ln_vHeight && window.screen.width >= ln_vWidth){\n n_scaleFactor=1;\n // document.getElementById('canvasContainer').style.width =ln_vWidth+\"px\";\n // document.getElementById('canvasContainer').style.height = ln_vHeight+\"px\";\n\n }else{\n\n // document.getElementById('canvasContainer').style.width = window.screen.width+\"px\";\n // document.getElementById('canvasContainer').style.height = window.screen.height+\"px\";\n\n if(window.screen.width < ln_vWidth){\n n_scaleFactor = window.screen.width/ln_vWidth;\n }\n }\n\n\n document.getElementById('canvasContainer').scrollIntoView({\n behavior: 'auto',\n block: 'center',\n inline: 'center'\n });\n \n\n }\n\n\n logIt(\"scale factor:\" +n_scaleFactor);\n return {n_videoWidth:ln_vWidth,n_videoHeight:ln_vHeight,n_scaleFactor: n_scaleFactor, b_isMobile: b_isMobile }\n //document.getElementById('sLevel').innerHTML = \"ln_vWidth:\" + ln_vWidth + \", ln_vHeight:\" + ln_vHeight;\n \n}\n\nfunction showEndBanner(aY){\n \n var w = 525, h=250;\n //instruct(\"Feet wider than shoulder. Bend knees and lean forward. Bend your arms\");\n logIt(\"y position:\" + aY);\n creImage(\"jb.PNG\",ln_videoWidth/2 - w/2,aY, w,h);\n\n document.getElementById('refresh').style.display=\"block\";\n \n}\n\nfunction creRotatedDropImage(imgName,x,y,w,h,angDegrees){\n\n var imgC = document.createElement('img');\n imgC.src = imgName;\n //logIt(\"Creating img:\" + imgName + \" x:\" + x + \" y:\" +y); drawRotatePic\n\n if ((y+h)>camera.canvas.width )\n y = camera.canvas.width-h;\n\n try{\n logIt(\"Creating drop img\");\n camera.drawRotateDropPic(imgC,{x:x,y:y},w,h,angDegrees);\n }catch(err){\n logIt(imgName +\"- Error drawing:\" + err.message);\n }\n \n\n}\n\nfunction creImage(imgName,x,y,w,h){\n\n var imgC = document.createElement('img');\n imgC.src = imgName;\n //logIt(\"Creating img:\" + imgName + \" x:\" + x + \" y:\" +y); drawRotatePic\n try{\n camera.drawPic(imgC,{x:x,y:y},w,h);\n }catch(err){\n logIt(imgName +\"- Error drawing:\" + err.message);\n }\n \n\n}\n\nfunction creRotatedImage(imgName,x,y,w,h,angDegress){\n\n var imgC = document.createElement('img');\n imgC.src = imgName;\n //logIt(\"Creating img:\" + imgName + \" x:\" + x + \" y:\" +y); drawRotatePic\n\n if ((y+h)>camera.canvas.width )\n y = camera.canvas.width-h;\n\n try{\n camera.drawRotatePic(imgC,{x:x,y:y},w,h,angDegress);\n }catch(err){\n logIt(imgName +\"- Error drawing:\" + err.message);\n }\n \n\n}\n\nfunction PlaySound(as_obj, a_sFileName, ab_loop){\n\n // as_obj = new Audio(a_sFileName);\n as_obj.src = a_sFileName\n as_obj.loop = ab_loop;\n as_obj.volume = 1.0;\n as_obj.play(); \n }\n\n \n function StopSound(as_obj){\n as_obj.pause();\n //as_obj.currentTime = 0;\n \n }\n\n function instructNow(instStr){\n\n b_notSpeaking = true;\n ln_promptTime = timeLapsed - ln_configRA -1;\n\n instruct(instStr);\n\n\n}\n\nfunction instruct(instStr){\n\n instructBase(instStr, ln_configRA);\n\n}\n\nfunction instructBase(instStr, an_waitTime){\n\n logIt(\"in instruct for: \" + instStr);\n logIt(\" with b_notSpeaking:\" + b_notSpeaking );\n \n\n if (b_notSpeaking && timeLapsed-ln_promptTime > an_waitTime){\n b_notSpeaking = false;\n \n\n if (b_SI){\n\n\n utterThis.text =instStr;\n utterThis.rate = ln_utterSpeed;\n utterThis.volume = 1;\n utterThis.onend = function(){\n ln_promptTime = timeLapsed;\n b_notSpeaking = true;\n logIt(\" now b_notSpeaking:\" + b_notSpeaking );\n\n };\n ln_promptTime = timeLapsed;\n synth.speak(utterThis);\n logIt(\"spoke: \" + instStr);\n \n }\n \n return true;\n \n }else\n return false;\n\n}\n\n/// End Display and Sound Functions\n/// Start Program Logic functions\n\nfunction getPL(p, an_scaleX, an_scaleY){\n\n var ap_l = [];\n \n if (p[12].x > p[11].x){\n p[0].x = p[0].x/an_scaleX;\n p[0].y = p[0].y/an_scaleY;\n ap_l.push(p[0]);\n for (var i=1; i < 33; i++){\n\n\n if (i%2===0){\n p[i-1].x = p[i-1].x/an_scaleX;\n p[i-1].y = p[i-1].y/an_scaleY;\n ap_l.push(p[i-1]);\n //ap_l[i] = p[i-1];\n\n }else{\n p[i+1].x = p[i+1].x/an_scaleX;\n p[i+1].y = p[i+1].y/an_scaleY;\n ap_l.push(p[i+1]);\n //ap_l[i] = p[i+1];\n }\n\n }\n\n }else{\n ap_l = p;\n }\n\n return ap_l;\n\n}\n\nfunction getANGYX(pp,np){\n\n if (pp.x-np.x ===0)\n return 90;\n else\n return Math.atan(Math.abs(pp.y-np.y)/Math.abs(pp.x-np.x)) * 180 / Math.PI;\n\n}\n\nfunction getSignedANGXY(pp,np){\n\n if (pp.y-np.y ===0)\n return 90;\nelse\n return Math.atan((pp.x-np.x)/(pp.y-np.y)) * 180 / Math.PI;\n\n}\n\nfunction getANGXY(hp,lp){\n\n if (lp.y-hp.y ===0)\n return 90;\nelse\n return Math.atan(Math.abs(lp.x-hp.x)/Math.abs(lp.y-hp.y)) * 180 / Math.PI;\n\n}\n\nfunction getDistance(p1, p2){\n\n return Math.sqrt(Math.pow((p1.x-p2.x),2) + Math.pow((p1.y-p2.y),2));\n\n}\n\nfunction toDegrees (angle) {\n return angle * (180 / Math.PI);\n}\n\nfunction getArea(p1, p2, p3){\n\n var d12, d13,d23, p, area;\n \n d12 = getDistance(p1, p2);\n d13 = getDistance(p1, p3);\n d23 = getDistance(p2, p3);\n\n p = (d12,d13,d23)/2;\n\n area = Math.sqrt(p * (p-d12)* (p-d13)* (p-d23));\n logIt(\"Found area: \" + area);\n\n return area;\n\n\n}\n\nfunction getANGby3Points(s, eb, w){\n\n var Dseb, Debw,Dsw;\n \n Dseb = getDistance(s, eb);\n Debw = getDistance(eb, w);\n Dsw = getDistance(s, w);\n\n //document.getElementById('angle').innerHTML = \"Dseb2: \" + (Dseb*Dseb) + \" Debw2: \" + (Debw*Debw) + \" Dsw2: \" + (Dsw*Dsw);\n\n if (Dsw+Debw+Dseb ===0 || Dseb===0||Debw===0){\n\n return 370;\n }else{\n\n\n return toDegrees(Math.acos((Dseb*Dseb + Debw*Debw-Dsw*Dsw)/(2*Dseb*Debw)));\n\n //return (Dsw/(Dsw+Debw+Dseb)) * 180;\n }\n\n}\n\nfunction getObtuseANG(ANG){\n\n if (ANG<0){\n\n return 180+ ANG;\n }else{\n\n return ANG;\n }\n\n}\n\nfunction checkValBetw(val, upperVal, lowerVal, msg){\n\n if (val < upperVal && val > lowerVal){\n\n return 1;\n }else{\n\n logIt('Failed for ' + msg + ' with values: ' + val + ' upperVal:' + upperVal + ' lowerVal:' + lowerVal );\n\n return 0;\n\n }\n \n}\n\nfunction generateRandomIntegerInRange(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n\n\nfunction logIt(als_log){\n\n ls_log += timeLapsed+\": \"+als_log + \"\\\\n\";\n //ls_log=\"\";\n}\n\n\n\nfunction convertToMinSec(aTimeDuration){\n\n if (Math.floor(aTimeDuration/60)>0){\n return Math.floor(aTimeDuration/60) + \"min \" + Math.ceil(aTimeDuration%60)+\"sec\";\n }else{\n return Math.ceil(aTimeDuration%60)+\"sec\";\n }\n \n\n}\n/*\nfunction calTimeDuration (aCurrentWave, aCurrDuration,ab_all){\n\n var ltimeDuration = aCurrDuration; \n\n if (aCurrentWave>1 && ab_all){\n\n for (var w=1; w { \n\n if (typeof(detector) === \"undefined\"){\n\n return null;\n\n }else{\n\n try{\n const poses = detector.estimatePoses(\n camera.video,\n {maxPoses: STATE.modelConfig.maxPoses, flipHorizontal: false});\n \n return poses;\n }catch(err){\n logIt(\"End Err: \" + err);\n return null;\n }\n\n }\n\n };\n\n\n\nasync function setUpCapturing(){\n\n await tf.setBackend(STATE.backend);\n\n try{\n camera = await Camera.setupCamera(STATE.camera);\n }catch(err){\n alert(err);\n }\n \n \n await tf.ready();\n \n detector = await createDetector();\n\n/* \n if (typeof(camera) !== \"undefined\"){\n\n setInterval(() => {\n dObj = net.detect(camera.video);\n }, 100);\n\n }\n\n\n*/\n n_commentID = setInterval(sayComment,1000);\n\n n_sceneID = setInterval(controlDisplay,200);\n \n n_predictID = setInterval(renderResult, 201);\n\n //renderPrediction();\n}\n\nfunction controlDisplay(){\n //n_displayMode>3\n logIt(\"ControlDisplay calling renderScene\");\n renderScene();\n \n}\n\nfunction renderScene(){\n\n camera.drawCtx();\n\n exObj.show(timeLapsed);\n\n}\n\nasync function renderResult() {\n\n\n timeLapsed = (Date.now() - startTime)/1000;\n\n //document.getElementById('timelapse').innerText = timeLapsed;\n //timer.innerHTML = timeLapsed\n\n if (b_predict){\n try{\n\n if (typeof(camera) !== \"undefined\"){\n\n \n if (ln_videoWidth===0){\n\n if (b_initLoad){\n document.getElementById('loading').style.display=\"none\";\n document.getElementById('TimeBar').style.display=\"block\";\n //setComment(timeLapsed,\"Starting\");\n \n \n\n }\n \n b_initLoad = false;\n\n ln_videoWidth = camera.canvas.width;\n logIt(\"screen width:\" + window.screen.width +\" screen height:\" + window.screen.height \n + \" canvas width:\" +ln_videoWidth + \" videoWidth:\"+ camera.video.videoWidth );\n\n if (n_selection===1){\n exObj = new skaterObj(camera.canvas.width,camera.canvas.height);\n \n }\n if (n_selection===2){\n exObj = new clockObj(camera.canvas.width,camera.canvas.height);\n\n }else if (n_selection===3){\n exObj = new candyObj(camera.canvas.width,camera.canvas.height);\n \n }else if(n_selection===4){\n exObj = new upLimbExObj(camera.canvas.width,camera.canvas.height);\n }else if (n_selection===5){\n logIt(\"set up tap with 30\");\n exObj = new TapObj(30);\n }else if (n_selection===6){\n logIt(\"set up buid with 30\");\n exObj = new PuzzleObj(120);\n }else if(n_selection===7){\n startSong();\n exObj = new DanceObj();\n } \n\n\n }\n\n\n \n if(b_inEx){\n \n logIt(\"in b_inEx\");\n\n if(!b_showLine){\n //camera.drawCtx();\n \n\n if (b_skipframe)\n b_skipframe=false;\n //else\n //exObj.show(timeLapsed);\n }\n \n //dObj = await net.detect(camera.video);\n //exObj.nRedCount = n_level;\n\n\n \n try{ \n \n getPose().then((value) => {\n \n //if (value && value.length ){\n if (value && value.length ){\n \n var p = value[0];\n var bx=0,by=0,bwidth=0,bheight=0;\n data = data + \"\\\\n\" \n + timeLapsed+\",\"+ p.keypoints[0].x+ \",\" + p.keypoints[0].y+ \",\"\n + p.keypoints[2].x+ \",\" + p.keypoints[2].y+ \",\"+ p.keypoints[5].x+ \",\" + p.keypoints[5].y+ \",\"\n \n + p.keypoints[7].x+ \",\" + p.keypoints[7].y +\",\"+ p.keypoints[8].x+ \",\" + p.keypoints[8].y+ \",\"\n + p.keypoints[11].x+ \",\" + p.keypoints[11].y +\",\"+ p.keypoints[12].x+ \",\" + p.keypoints[12].y+ \",\"\n + p.keypoints[13].x+ \",\" + p.keypoints[13].y +\",\"+ p.keypoints[14].x+ \",\" + p.keypoints[14].y+ \",\"\n + p.keypoints[15].x+ \",\" + p.keypoints[15].y +\",\"+ p.keypoints[16].x+ \",\" + p.keypoints[16].y+ \",\"\n + p.keypoints[17].x+ \",\" + p.keypoints[17].y +\",\"+ p.keypoints[18].x+ \",\" + p.keypoints[18].y+ \",\"\n + p.keypoints[19].x+ \",\" + p.keypoints[19].y +\",\"+ p.keypoints[20].x+ \",\" + p.keypoints[20].y+ \",\"\n + p.keypoints[21].x+ \",\" + p.keypoints[21].y +\",\"+ p.keypoints[22].x+ \",\" + p.keypoints[22].y+ \",\"\n + p.keypoints[23].x+ \",\" + p.keypoints[23].y +\",\"+ p.keypoints[24].x+ \",\" + p.keypoints[24].y+ \",\"\n + p.keypoints[25].x+ \",\" + p.keypoints[25].y +\",\"+ p.keypoints[26].x+ \",\" + p.keypoints[26].y+ \",\"\n + p.keypoints[27].x+ \",\" + p.keypoints[27].y +\",\"+ p.keypoints[28].x+ \",\" + p.keypoints[28].y+ \",\"\n + p.keypoints[29].x+ \",\" + p.keypoints[29].y +\",\"+ p.keypoints[30].x+ \",\" + p.keypoints[30].y+ \",\"\n + p.keypoints[31].x+ \",\" + p.keypoints[31].y +\",\"+ p.keypoints[32].x+ \",\" + p.keypoints[32].y+ \",\"\n +bx+\",\"+ by+\",\"+ bwidth+\",\"+ bheight+\",\"\n + timeLapsed; \n \n \n if (b_showLine){\n\n camera.drawCtx();\n camera.drawResults(value);\n\n //exObj.show(timeLapsed);\n }\n var p_l = getPL(value[0].keypoints, n_wSFactor,n_vSFactor);\n \n if (arry_prevPts.length>4){\n exObj.assess(p_l, timeLapsed,arry_prevPts);\n }\n \n arry_prevPts.push(p_l);\n if (arry_prevPts.length===n_poseLookBack){\n arry_prevPts = arry_prevPts.slice(1,n_poseLookBack);\n }\n \n\n } //valid values\n \n }); // get pose\n \n \n }catch(cErr){\n \n \n logIt(\"Err drawing ctx:\" + cErr.message);\n \n }\n\n //sayComment(timeLapsed);\n\n }else{ // Ex ended\n\n //showEndBanner(exObj.n_bannerY);\n\n }\n\n //sayComment(timeLapsed);\n\n\n \n }\n\n\n }catch(ex){\n\n logIt(\"Stopping video Err:\" + ex )\n\n }\n }\n \n} // RenderResult\n\n\nasync function renderPrediction() {\n \nif (b_timer){\n try{\n\n if (document.getElementById('loadingStats').style.display!==\"none\"){\n\n var loadingTime = (Date.now() - startTime)/1000;\n document.getElementById('estLoadStats').innerText = Math.floor(loadingTime/n_1PerLoadTime);\n }\n \n\n await renderResult();\n\n /* \n \n if (typeof(camera) !== \"undefined\"){\n var obj = await net.detect(camera.video);\n \n obj.forEach(prediction => {\n \n if (prediction['class'].includes(\"racket\")){\n logIt(\"Found racket\");\n camera.drawRect(prediction);\n [bx, by, bwidth, bheight] = prediction['bbox'];\n }\n });\n\n }\n \n */\n\n rafId = requestAnimationFrame(renderPrediction);\n\n }catch(err1){\n logIt(\"Error under renderPrediction:\" + err1);\n //instruct(\"Err in renderPrediction\");\n }\n \n \n\n}\n\n\n};\n\n/// End video capturing/AI\n\nfunction sendData(aFileName){\n\n b_timer = false;\n \n const axios = require('axios');\n\n var currentdate = new Date();\n var newFileName = aFileName\n +\"_\"+ currentdate.getDate() + \"_\"\n + (currentdate.getMonth()+1) + \"_\" \n + \"t\" \n + currentdate.getHours() + \"_\" \n + currentdate.getMinutes() + \"_\" \n + currentdate.getSeconds();\n var bodyFormData = new FormData();\n\n bodyFormData.append('afileName', newFileName);\n bodyFormData.append('csvData', data);\n bodyFormData.append('csvLog', ls_log);\n\n var s_url=\"\";\n\n s_url = \"https://csm2.achieversprofile.com/c/d?handler=Log\";\n\n\n axios({\n method: \"post\",\n url: s_url,\n \n data: bodyFormData,\n headers: { \"Content-Type\": \"multipart/form-data\" },\n })\n .then(function (response) {\n //handle success\n //console.log(response); w:480, H:640\n b_timer = false;\n \n\n })\n .catch(function (response) {\n //handle error\n\n b_timer = false;\n //saveStatus.innerHTML = response;\n //document.getElementById('save').style.visibility = \"hidden\";\n //console.log(response);\n\n });\n\n}\n\nfunction sendTime(aTeamName, aTiming){\n\n //b_timer = false;\n \n const axios = require('axios');\n\n var bodyFormData = new FormData();\n\n bodyFormData.append('teamName', aTeamName);\n bodyFormData.append('timing', aTiming);\n \n\n var s_url=\"\";\n\n if (n_server>0)\n s_url = \"https://csm2.achieversprofile.com/c/d?handler=RecNC\";\n else \n s_url = \"https://localhost:44349/c/d?handler=RecNC\";\n\n\n\n axios({\n method: \"post\",\n url: s_url,\n \n data: bodyFormData,\n headers: { \"Content-Type\": \"multipart/form-data\" },\n })\n .then(function (response) {\n //handle success\n //console.log(response); w:480, H:640\n //b_timer = false;\n \n\n })\n .catch(function (response) {\n //handle error\n\n //b_timer = false;\n //saveStatus.innerHTML = response;\n //document.getElementById('save').style.visibility = \"hidden\";\n //console.log(response);\n\n });\n\n}\n\nfunction getContent(){\n\n //b_timer = false;\n \n const axios = require('axios');\n\n var s_url=\"\";\n\n if (n_server>0){\n s_url = \"https://csm2.achieversprofile.com/c/d?handler=GetTable\";\n }else{\n s_url = \"https://localhost:44349/c/d?handler=GetTable\";\n }\n\n axios({\n method: \"post\",\n url: s_url,\n headers: { \"Content-Type\": \"multipart/form-data\" },\n })\n .then(function (response) {\n\n /*\n\n 5\n >\n >\n >\n >\n >\n >\n\n */\n \n\n var ls_ranking = response;\n\n var arryRecs = response.data.content.split(\";\");\n\n let rankedTeam=[];\n\n for (var r=0; r < arryRecs.length; r++){\n\n let rawItem = arryRecs[r].split(\",\");\n if (rawItem[0].length>0)\n rankedTeam.push({n:rawItem[0],t:parseInt(rawItem[1],10)});\n\n }\n\n rankedTeam.sort((a,b)=>(a.t>b.t)?1:-1);\n\n\n\n\n var s_tableHead = \"\";\n\n var s_tableBottom = \"
RankTeam NameTime
\";\n var s_tableContent=\"\";\n for (var r=0; r < rankedTeam.length; r++){\n\n s_tableContent = s_tableContent + \" \";\n\n var arryfields = arryRecs[r].split(\",\");\n\n s_tableContent = s_tableContent + \"\"+(r+1)+\"\";\n s_tableContent = s_tableContent + \"\"+rankedTeam[r].n+\"\";\n s_tableContent = s_tableContent + \"\"+rankedTeam[r].t+\"\";\n \n/*\n document.getElementById('nick' + (r+1)).innerHTML= arryfields[1];\n document.getElementById('wc' + (r+1)).innerHTML= arryfields[2];\n document.getElementById('sk' + (r+1)).innerHTML= arryfields[3];\n document.getElementById('ph' + (r+1)).innerHTML= arryfields[4];\n document.getElementById('sc' + (r+1)).innerHTML= arryfields[5];\n document.getElementById('gd' + (r+1)).innerHTML= convertToMinSec(parseInt(arryfields[6]));\n */\n\n s_tableContent = s_tableContent + \" \";\n\n \n\n }\n document.getElementById('teamRanked').innerHTML = s_tableHead+ s_tableContent + s_tableBottom;\n\n })\n .catch(function (response) {\n //handle error\n \n //b_timer = false;\n //saveStatus.innerHTML = response;\n //document.getElementById('save').style.visibility = \"hidden\";\n //console.log(response);\n\n });\n\n}\n\nasync function PostUpdateRec(aMobile, aReward,adExpiry,auserInfo){\n\n logIt(\"In PostUpdateRec\");\n var bodyFormData = new FormData();\n bodyFormData.append('aReward', aReward);\n bodyFormData.append('aMobile', aMobile);\n\n var s_url = \"\";\n\n\n\n if (n_server>0){\n s_url = \"https://csm2.achieversprofile.com/ExerciseRewards/Create?handler=UpdateRec\";\n }else{\n s_url = \"https://localhost:44349/ExerciseRewards/Create?handler=UpdateRec\";\n }\n\n logIt(\"Updating to url: \" + s_url);\n\n const axios = require('axios');\n \n axios({\n method: \"post\",\n url: s_url,\n data: bodyFormData,\n headers: { \"Content-Type\": \"multipart/form-data\" },\n })\n .then(function (response) {\n\n if (response.data.returnMsg===\"Ok\"){\n\n if (aReward===\"T\"){\n\n d_lastReward = Date.now();\n logIt(\"set last reward:\" + d_lastReward);\n document.cookie = \"DateLastReward=\"+d_lastReward+\"; expires=\" + adExpiry.toUTCString(); // Date user last obtained reward\n }\n \n\n document.cookie = \"DateLastPlayed=\"+Date.now()+\"; expires=\" + adExpiry.toUTCString(); // Date completed an exercise and sync with server\n document.cookie = \"MyCouponCount=\"+response.data.myCouponCount+\"; expires=\" + adExpiry.toUTCString();\n \n logIt(\"set MyCouponCount\" + response.data.myCouponCount);\n auserInfo = document.cookie;\n \n //document.getElementById('blsr').style.display =\"none\";\n // eslint-disable-next-line no-restricted-globals\n //location.reload();\n\n }else{\n\n //logIt(\"Error \");\n alert(\"An error has occurred. Please inform admin that: \" + response.data.returnMsg);\n }\n\n })\n .catch(function (response) {\n\n alert(\"A network error has occurred.\");\n //return response.data.returnMsg;\n\n });\n \n\n}\n\nasync function PostNewRec(aName, aMobile, adExpiry, auserInfo){\n\n var bodyFormData = new FormData();\n bodyFormData.append('aName', aName);\n bodyFormData.append('aMobile', aMobile);\n\n var s_url = \"\";\n\n if (n_server>0){\n s_url = \"https://csm2.achieversprofile.com/ExerciseRewards/Create?handler=AddRec\";\n }else{\n s_url = \"https://localhost:44349/ExerciseRewards/Create?handler=AddRec\";\n }\n\n\n const axios = require('axios');\n\n axios({\n method: \"post\",\n url: s_url,\n data: bodyFormData,\n headers: { \"Content-Type\": \"multipart/form-data\" },\n })\n .then(function (response) {\n\n if (response.data.returnMsg===\"Ok\"){\n\n document.cookie = \"BLSRName=\"+document.getElementById('nameBLS').value + \"; expires=\" + adExpiry.toUTCString();\n document.cookie = \"BLSRMobile=\"+document.getElementById('mobileBLS').value + \"; expires=\" + adExpiry.toUTCString();\n document.cookie = \"DateLastPlayed=-1; expires=\" + adExpiry.toUTCString(); // Date completed an exercise and sync with server\n document.cookie = \"DateLastReward=-1; expires=\" + adExpiry.toUTCString(); // Date user last obtained reward\n document.cookie = \"MyCouponCount=0; expires=\" + adExpiry.toUTCString();\n \n auserInfo = document.cookie;\n \n document.getElementById('blsr').style.display =\"none\";\n // eslint-disable-next-line no-restricted-globals\n location.reload();\n\n }else{\n\n alert(\"An error has occurred. Please inform admin that: \" + response.data.returnMsg);\n }\n\n })\n .catch(function (response) {\n\n alert(\"A network error has occurred. Status:\" + response.status);\n //return response.data.returnMsg;\n\n });\n\n\n}\n\n\n\nfunction ReportIssue(){\n\n b_timer=false;\n\n if (n_server > 0){\n var nVer = navigator.appVersion;\n\n ls_log = \"Agent: \" +nVer+\"\\\\n\" \n + \"Device: \" + document.getElementById('DeviceDesc').value + \"\\\\n\"\n + \"Problem: \"+document.getElementById('problemDesc').value + \"\\\\n\" + ls_log;\n\n sendData(\"SeniorIssues\");\n\n }\n\n}\n\nfunction isFacebookApp() {\n var ua = navigator.userAgent || navigator.vendor || window.opera;\n return (ua.indexOf(\"FBAN\") > -1) || (ua.indexOf(\"FBAV\") > -1);\n}\n\nfunction prizeRandomizer(aWinLevel){\n\n logIt(\"d_lastReward:\" + d_lastReward \n + \" formatDate(new Date(Date.now())):\" +formatDate(new Date(Date.now())) );\n if (d_lastReward===-1 ||formatDate(d_lastReward)!==formatDate(new Date(Date.now()))){\n\n if (generateRandomIntegerInRange(0,100) < aWinLevel){\n\n logIt(\"Prize is true\");\n\n return true;\n\n }else{\n logIt(\"Prize is false\");\n return false;\n }\n \n\n }else{\n\n return false;\n\n }\n \n\n}\n\nfunction formatDate (aDate){\n\n const monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oc\", \"Nov\", \"Dec\"];\n \n const month = monthNames[aDate.getMonth()];\n const day = String(aDate.getDate()).padStart(2, '0');\n const year = aDate.getFullYear();\n return day +\" \"+ month + \" \" + year;\n\n}\n\nfunction selectClimber(anStage){\n\n // document.getElementById('start').addEventListener(\"click\", function(){\n\n\n// ad_background= new Audio();\n // ad_background.src = \"jingShe.mp3\";\n // ad_background.volume = 0.2;\n // ad_background.loop = true;\n// ad_background.play();\n\n \n // });\n\n document.getElementById('blsrProgress').style.display=\"none\";\n document.getElementById('Landing').style.display=\"none\";\n document.getElementById('ExView').style.display=\"block\";\n //document.getElementById('RefVideo').src = \"https://www.youtube.com/embed/REYyQBOVIIU\";\n document.documentElement.scrollTop =0;\n\n b_timer=true;\n b_inEx=true;\n n_selection=anStage;\n initGeneric();\n document.getElementById('start').style.display=\"none\";\n document.getElementById('TimeBar').style.display=\"block\";\n\n //document.getElementById('scoreImg').src =\"T_chineseGold.png\" ;\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n\n}\n\nfunction startGame(){\n\n document.getElementById('blsrProgress').style.display=\"none\";\n document.getElementById('Landing').style.display=\"none\";\n document.getElementById('ExView').style.display=\"block\";\n \n document.documentElement.scrollTop =0;\n \n b_timer=true;\n b_inEx=true;\n\n if (b_initLoad){\n\n setUpCapturing();\n setUpDeviceParam();\n document.getElementById('loading').style.display = \"block\";\n\n }\n\n}\n\nfunction DanceGame(){\n\n startGame();\n n_selection=7;\n exObj = new DanceObj();\n\n}\n\nfunction PuzzleGame(){\n startGame();\n n_selection=6;\n \n //initGeneric();\n //initPuzzle(); \n \n exObj = new PuzzleObj(120);\n \n document.getElementById('loadingStats').style.display = \"none\";\n document.getElementById('start').style.display=\"none\";\n document.getElementById('TimeBar').style.display=\"block\";\n \n //document.getElementById('scoreImg').src =\"T_chineseGold.png\" ;\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n}\n\n\n\n///End External interaction\n\nasync function app() {\n\n/*\n let testArr = [{n:\"test\",t:100},{n:\"test1\",t:101},{n:\"test2\",t:95}];\n\n testArr.sort((a,b)=>(a.t>b.t)?1:-1);\n\n */\n\n\n //getContent();\n\n \n audioCtx = new AudioContext();\n song = new Audio(\"DancingQueen.mp3\");\n\n source = audioCtx.createMediaElementSource(song);\n\n source.connect(audioCtx.destination);\n\n gainNode = audioCtx.createGain();\n\n source.connect(gainNode).connect(audioCtx.destination);\n\n\n\n arryLen=6;\n n_mode=1;\n n_state=-3;\n\n n_selection=5;\n\n var url_string = window.location.href; //\n var url = new URL(url_string);\n\n var state = url.searchParams.get(\"state\");\n\n if (state===\"bp\"){\n\n selectClimber(4);\n\n }else if (state===\"dm\"){\n selectClimber(5);\n }else if (state===\"nc\"){\n document.getElementById('nc').style.display=\"block\";\n getContent();\n\n document.getElementById('Pose').addEventListener(\"click\", function(){\n\n exObj.nPhase=-1;\n\n });\n\n document.getElementById('Ypose').addEventListener(\"click\", function(){\n\n exObj.nPhase=0;\n \n exObj.nStartTime =timeLapsed;\n\n });\n\n document.getElementById('br').addEventListener(\"click\", function(){\n\n sendData(\"ccBottom2\");\n\n\n });\n\n document.getElementById('Gend').addEventListener(\"click\", function(){\n\n\n b_predict=false;\n //b_runTime = false;\n b_displayTime=false;\n\n document.getElementById('nc').style.display=\"block\";\n \n getContent();\n \n document.documentElement.scrollTop =0;\n document.getElementById('ExView').style.display=\"none\";\n \n \n\n\n });\n\n\n document.getElementById('Demo').addEventListener(\"click\", function(){\n\n b_predict=true;\n b_actualPlay = false;\n //b_inEx = true;\n b_displayTime=false;\n if (document.getElementById('teamName').value.length>0){\n\n if (/^[a-zA-Z]+$/.test(document.getElementById('teamName').value)){\n\n startTime = Date.now();\n timeLapsed = 0;\n s_teamName = document.getElementById('teamName').value;\n \n document.getElementById('tName').innerText = s_teamName;\n \n \n PuzzleGame();\n\n }else\n alert(document.getElementById('teamName').value + \" is invalid. Only letters are allowed.\");\n\n\n //selectClimber(6);\n //sendTime(s_teamName,91);\n\n }else{\n alert(\"Team name cannot be empty\");\n }\n \n \n });\n\n document.getElementById('Play').addEventListener(\"click\", function(){\n\n b_predict=true;\n b_actualPlay = true;\n //b_inEx = true;\n b_displayTime=false;\n if (document.getElementById('teamName').value.length>0){\n\n if (/^[a-zA-Z]+$/.test(document.getElementById('teamName').value)){\n\n startTime = Date.now();\n timeLapsed = 0;\n s_teamName = document.getElementById('teamName').value;\n \n document.getElementById('tName').innerText = s_teamName;\n \n \n PuzzleGame();\n\n }else\n alert(document.getElementById('teamName').value + \" is invalid. Only letters are allowed.\");\n\n\n //selectClimber(6);\n //sendTime(s_teamName,91);\n\n }else{\n alert(\"Team name cannot be empty\");\n }\n \n \n });\n\n //selectClimber(6);\n \n }else if(state===\"mg\"){\n\n document.getElementById('mg').style.display=\"block\";\n \n document.getElementById('Dance').addEventListener(\"click\", function(){\n\n document.getElementById('mg').style.display=\"none\";\n document.getElementById('start').style.display=\"none\";\n\n \n //start\n b_predict=true;\n b_actualPlay = false;\n //b_inEx = true;\n b_displayTime=false;\n\n var s_inAudible = \"data:audio/mpeg;base64,SUQzBAAAAAABEVRYWFgAAAAtAAADY29tbWVudABCaWdTb3VuZEJhbmsuY29tIC8gTGFTb25vdGhlcXVlLm9yZwBURU5DAAAAHQAAA1N3aXRjaCBQbHVzIMKpIE5DSCBTb2Z0d2FyZQBUSVQyAAAABgAAAzIyMzUAVFNTRQAAAA8AAANMYXZmNTcuODMuMTAwAAAAAAAAAAAAAAD/80DEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/zQsRbAAADSAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/zQMSkAAADSAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\";\n \n //song =new Audio();\n song.src = s_inAudible;\n song.volume=1.0;\n song.play();\n\n DanceGame();\n\n song.src = \"DancingQueen.mp3\";\n //startSong();\n \n });\n\n\n }else{\n\n //document.body.style.backgroundImage=\"url('bgTreasureHunt.jpg')\";\n document.body.style.background = \"url('bgTreasureHunt.jpg') no-repeat center fixed\";\n document.body.style.backgroundSize = \"cover\";\n \n\n document.getElementById('bannerImg').style.display=\"block\";\n document.getElementById('help').style.display=\"block\";\n \n \n document.getElementById('Landing').style.display=\"block\";\n document.getElementById('Contributors').style.display=\"block\";\n document.getElementById('Reference').style.display=\"block\";\n\n }\n\n\n dExpiry = new Date(new Date().setFullYear(new Date().getFullYear() + 1));\n\n \n //var dYesterday = new Date(new Date().setDate(new Date().getDate() -2));\n //document.cookie = \"DateLastPlayed=-1;\";\n\n userInfo = \"\";\n userInfo = document.cookie;\n\n document.getElementById('showPiece').addEventListener(\"click\", function(){\n\n exObj.bShowPiece=true;\n\n });\n\n document.getElementById('snap').addEventListener(\"click\", function(){\n\n \n exObj.arrySnapped.push(exObj.sMP);\n exObj.sMP=\"\";\n exObj.bShowPiece=true;\n\n\n });\n \n\n document.getElementById('update').addEventListener(\"click\", function(){\n \n PostUpdateRec(\"12345678\",\"T\",dExpiry,userInfo);\n\n \n });\n\n if (userInfo.includes(\"BLSRName\") ){\n\n document.getElementById('blsrProgress').style.display =\"block\";\n\n var arryKeyValue = userInfo.split(\";\");\n if (arryKeyValue.length>0){\n\n for(var c=0; c0){\n \n document.getElementById('enterName').style.display=\"none\";\n document.getElementById('nameBLS').style.display=\"none\";\n document.getElementById('next').style.display=\"none\";\n\n document.getElementById('enterMobile').style.display=\"block\";\n document.getElementById('mobileBLS').style.display=\"block\";\n document.getElementById('join').style.display=\"block\";\n\n\n /*\n document.cookie = \"BLSRName=\"+document.getElementById('nameBLS').value + \"; expires=\" + dExpiry.toUTCString();\n document.cookie = \"DateLastPlayed=-1; expires=\" + dExpiry.toUTCString();\n document.cookie = \"TierAchievered=0; expires=\" + dExpiry.toUTCString();\n document.cookie = \"CurrentSeq=0; expires=\" + dExpiry.toUTCString();\n\ndocument.cookie = \"BLSRName=\"+document.getElementById('nameBLS').value + \";\";\ndocument.cookie = \"DateLastPlayed=-1;\";\ndocument.cookie = \"TierAchievered=0;\";\ndocument.cookie = \"CurrentSeq=0;\";\n\n document.cookie = \"BLSRName=\"+document.getElementById('nameBLS').value + \"; expires=\" + dExpiry.toUTCString();\n document.cookie = \"DateLastPlayed=-1; expires=\" + dExpiry.toUTCString();\n document.cookie = \"TierAchievered=0; expires=\" + dExpiry.toUTCString();\n document.cookie = \"CurrentSeq=0; expires=\" + dExpiry.toUTCString();\n\n userInfo = document.cookie;\n\n document.getElementById('blsr').style.display =\"none\";\n // eslint-disable-next-line no-restricted-globals\n location.reload();\n\n*/\n \n }else{\n alert(\"Enter your name to join the reward progromme.\");\n }\n \n });\n\n document.getElementById('join').addEventListener(\"click\", async function(){\n \n if(document.getElementById('mobileBLS').value.length>0){\n \n /*\n document.cookie = \"BLSRName=\"+document.getElementById('nameBLS').value + \"; expires=\" + dExpiry.toUTCString();\n document.cookie = \"DateLastPlayed=-1; expires=\" + dExpiry.toUTCString();\n document.cookie = \"TierAchievered=0; expires=\" + dExpiry.toUTCString();\n document.cookie = \"CurrentSeq=0; expires=\" + dExpiry.toUTCString();\n\ndocument.cookie = \"BLSRName=\"+document.getElementById('nameBLS').value + \";\";\ndocument.cookie = \"DateLastPlayed=-1;\";\ndocument.cookie = \"TierAchievered=0;\";\ndocument.cookie = \"CurrentSeq=0;\";\n\n*/\n await PostNewRec(document.getElementById('nameBLS').value, document.getElementById('mobileBLS').value,dExpiry,userInfo);\n\n }else{\n alert(\"Enter your mobile to join the reward progromme.\");\n }\n \n });\n\n\n\n \n }\n\n /* testing \n var dYesterday = new Date(new Date().setDate(new Date().getDate() - 1));\n d_lastPlay =dYesterday;\n n_tierAchieved=1;\n n_myCoupon=5;\n s_name=\"sname\";\n\n UpdateReward();\n\n */\n\n //net = await cocossd.load();\n //var n = Math.round(0.09/0.2);\n\n /*\n document.getElementById('browser').innerText=\"browser: \"+ navigator.appVersion + \", userAgent: \" + navigator.userAgent\n +\", vendor:\" + navigator.vendor + \", opera: \" + window.opera;\n\n */\n\n /*\n\n if ((!(navigator.appVersion.includes(\"Safari\")||navigator.appVersion.includes(\"Chrome\")))||isFacebookApp()){\n\n document.getElementById('warning').style.display=\"block\";\n document.getElementById('Landing').style.display=\"none\";\n }\n\n */\n\n logIt(\"Program initiated\");\n\n// 1.1.3: send device status to admin\n// 1.1.4: fix sound & black screen.\n //document.getElementById('ver').innerHTML=\"ver 1.1.5\";\n //document.getElementById('email').style.fontSize = \"15px\";\n\n if (window.screen.width < 500){\n\n document.getElementById('UseVideo').style.width = 0.8*window.screen.width+\"px\";\n document.getElementById('UseVideo').style.height = (280*window.screen.width/500)+\"px\";\n\n //document.getElementById('RefVideo').style.width = window.screen.width+\"px\";\n //document.getElementById('RefVideo').style.height = (280*window.screen.width/500)+\"px\";\n \n\n document.getElementById('blsrProgress').style.width = window.screen.width+\"px\";\n //document.getElementById('blsrProgress').style.height = (280*window.screen.width/500)+\"px\";\n\n\n document.getElementById('loading').style.width = window.screen.width+\"px\";\n document.getElementById('loading').style.height = (280*window.screen.width/500)+\"px\";\n\n document.getElementById('upperGif').style.width = 0.8*window.screen.width+\"px\";\n document.getElementById('skaterGif').style.width = 0.8*window.screen.width+\"px\";\n document.getElementById('candyGif').style.width = 0.8*window.screen.width+\"px\";\n document.getElementById('clockGif').style.width = 0.8*window.screen.width+\"px\";\n\n }\n\n //getRank();\n\n //checkCreateSessionRec(s_pc,\"tester\");\n\n startTime = Date.now();\n b_timer = true;\n\n var btnUpCount = document.createElement(\"button\");\n \n //btnShowBird.innerHTML = \"Show\";\n btnUpCount.innerHTML = \"Show\";\n btnUpCount.addEventListener(\"click\", function() {\n\n exObj.nGameDuration = 300;\n exObj.nStage = 2;\n exObj.oSwingObj.nPhase = 1;\n \n });\n\n var btnUpPhase = document.createElement(\"button\");\n \n //btnShowBird.innerHTML = \"Show\";\n btnUpPhase.innerHTML = \"Level+\";\n btnUpPhase.addEventListener(\"click\", function() {\n\n exObj.oSwingObj.nPhase++;\n\n if (exObj.oSwingObj.nPhase===5){\n exObj.oLiftObj.nPhase = 1;\n \n }\n b_skipframe=true;\n\n\n //n_phase++;\n //n_state=1;\n \n });\n\n var btnTarget = document.createElement(\"button\");\n \n //btnShowBird.innerHTML = \"Show\";\n btnTarget.innerHTML = \"Target\";\n btnTarget.addEventListener(\"click\", function() {\n\n exObj.oLiftObj.nLevel = 5;\n \n });\n\n//document.getElementById('canvasContainer').appendChild(btnUpCount);\n//document.getElementById('canvasContainer').appendChild(btnUpPhase);\n\n//document.getElementById('canvasContainer').appendChild(btnTarget);\n\ndocument.getElementById('send').addEventListener(\"click\", function(){\n\n sendData(\"getPoints\");\n\n});\n\ndocument.getElementById('climber').addEventListener(\"click\", function(){\n\n selectClimber(4);\n \n});\n\ndocument.getElementById('skater').addEventListener(\"click\", function(){\n\n document.getElementById('start').addEventListener(\"click\", function(){\n\n\n ad_background= new Audio();\n ad_background.src = \"chunFeng.mp3\";\n ad_background.volume = 0.2;\n ad_background.loop = true;\n ad_background.play();\n\n n_selection=1;\n initGeneric();\n document.getElementById('start').style.display=\"none\";\n document.getElementById('TimeBar').style.display=\"block\";\n //document.getElementById('scoreImg').src =\"T_fairyPeach.png\";\n \n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n });\n\n document.getElementById('blsrProgress').style.display=\"none\";\n document.getElementById('Landing').style.display=\"none\";\n document.getElementById('ExView').style.display=\"block\";\n //document.getElementById('RefVideo').src = \"https://www.youtube.com/embed/MMqbM4wEeuc\";\n document.documentElement.scrollTop =0;\n \n\n});\n\ndocument.getElementById('candy').addEventListener(\"click\", function(){\n\n document.getElementById('start').addEventListener(\"click\", function(){\n\n\n ad_background= new Audio();\n ad_background.src = \"daDi.mp3\";\n ad_background.volume = 0.1;\n ad_background.loop = true;\n ad_background.play();\n n_selection=3;\n n_state=-3;\n logIt(\"started clock\");\n\n initGeneric();\n document.getElementById('start').style.display=\"none\";\n document.getElementById('TimeBar').style.display=\"block\";\n //document.getElementById('scoreImg').src =\"T_fb4.png\" ;\n\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n\n });\n document.getElementById('blsrProgress').style.display=\"none\";\n document.getElementById('Landing').style.display=\"none\";\n document.getElementById('ExView').style.display=\"block\";\n //document.getElementById('RefVideo').src = \"https://www.youtube.com/embed/6Vz_xCqwJKQ\";\n document.documentElement.scrollTop =0;\n\n\n});\n\ndocument.getElementById('clock').addEventListener(\"click\", function(){\n\n document.getElementById('start').addEventListener(\"click\", function(){\n\n\n ad_background= new Audio();\n ad_background.src = \"caiShengDao.mp3\";\n ad_background.volume = 0.4;\n ad_background.loop = true;\n ad_background.play();\n n_selection=2;\n logIt(\"started clock\");\n\n initGeneric();\n\n document.getElementById('start').style.display=\"none\";\n document.getElementById('TimeBar').style.display=\"block\";\n //scoreImg\n // document.getElementById('scoreImg').src =\"TF_cSC.png\" ;\n document.getElementById('TimeBar').scrollIntoView({top: 0, behavior: 'smooth' });\n\n });\n\n \n document.getElementById('blsrProgress').style.display=\"none\";\n document.getElementById('Landing').style.display=\"none\";\n document.getElementById('ExView').style.display=\"block\";\n // document.getElementById('RefVideo').src = \"https://www.youtube.com/embed/pMI5-x6j45c\";\n document.documentElement.scrollTop =0;\n\n\n});\n\n document.getElementById('Restart').addEventListener(\"click\", function(){\n\n // eslint-disable-next-line no-restricted-globals\n exObj.completedSegment(); \n });\n\n document.getElementById('help').addEventListener(\"click\", function(){\n\n document.getElementById('help').style.display=\"none\";\n document.getElementById('helpForm').style.display=\"block\";\n\n });\n\n document.getElementById('sendProblem').addEventListener(\"click\", function(){\n\n ReportIssue();\n\n document.getElementById(\"Landing\").style.display=\"none\";\n document.getElementById(\"ExView\").style.display=\"none\";\n document.getElementById('sendProblem').style.display=\"none\";\n\n //document.getElementById(\"helpForm\").style.display=\"none\";\n document.getElementById(\"ErrSent\").style.display=\"block\"; \n\n\n });\n \n data = \"DT,nX,nY\"\n +\",leX,leY,reX,reY,learX,learY,rearX,rearY\"\n +\",lsX,lsY,rsX,rsY,lebX,lebY,rebX,rebY\"\n +\",lwX,lwY,rwX,rwY,lpX,lpY,rpX,rpY\"\n +\",liX,liY,riX,riY,ltX,ltY,rtX,rtY\"\n +\",lhX,lhY,rhX,rhY,lkX,lkY,rkX,rkY\"\n +\",laX,laY,raX,raY,lheX,lheY,rheX,rheY\"\n +\",lfiX,lfiY,rfiX,rfiY\"\n +\",bx,by,bwidth,bheight,DT\";\n\n\n\n};\n\napp();"],"sourceRoot":""}