153 lines
		
	
	
		
			No EOL
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			No EOL
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var debugMode = false;
 | |
| var resourceName, toFillInPercentage, win_message, lose_message, currency, key, price, price_type, price_label, formattedPrice;
 | |
| 
 | |
| $(function() {
 | |
|   window.addEventListener('message', function(event) {
 | |
|     if (event.data.type === "openScratch") {
 | |
|       $('body').fadeIn(500);
 | |
|       debugMode = event.data.debug;
 | |
|       resourceName = event.data.resourceName;
 | |
|       toFillInPercentage = event.data.scratchAmount;
 | |
|       win_message = event.data.win_message;
 | |
|       lose_message = event.data.lose_message;
 | |
|       currency = event.data.currency;
 | |
|       key = event.data.key;
 | |
|       price = event.data.price;
 | |
|       amount = event.data.amount;
 | |
|       price_type = event.data.price_type;
 | |
|       price_label = event.data.price_label;
 | |
|       document.getElementById('key-hidden').innerHTML = key;
 | |
|       document.getElementById('price-hidden').innerHTML = price;
 | |
|       document.getElementById('amount-hidden').innerHTML = amount;
 | |
|       document.getElementById('price-type-hidden').innerHTML = price_type;
 | |
|       if(price_type == 'money') {
 | |
|         formattedPrice = currency + ' ' + Number.parseFloat(price).toFixed(0); // Want decimals? Change 0 -> n of decimals
 | |
|         price > 0 ? document.getElementById('price').innerHTML = "<span style='color:#2ECC71'>" + win_message + "</span><br><br><span style='font-size:50px;'>" + formattedPrice + '</span>' : document.getElementById('price').innerHTML = "<span style='color:#B2BABB;text-transform:uppercase;'>" + lose_message + "</span><br><br><span style='font-size:60px;'>" + currency + " 0</span>";
 | |
|       } else {
 | |
|         document.getElementById('price').innerHTML = "<span style='color:#2ECC71'>" + win_message + "</span><br><span style='font-size:20px;color:#7F8C8D'>" + amount + "x</span><br><span style='font-size:40px;'>" + price_label + '</span>'
 | |
|       }
 | |
|     } else if (event.data.type === "closeScratch") {
 | |
|       $('body').fadeOut(500);
 | |
|     }
 | |
|   });
 | |
| });
 | |
| 
 | |
| var isDrawing, lastPoint;
 | |
| var canvas = document.getElementById('canvas'),
 | |
|   ctx = canvas.getContext('2d'),
 | |
|   canvasWidth = canvas.width,
 | |
|   canvasHeight= canvas.height,
 | |
|   image = new Image(),
 | |
|   imageSrc = 'img/scratch-here.jpg',
 | |
|   brush = new Image();
 | |
| image.src = imageSrc;
 | |
| 
 | |
| image.onload = function() {
 | |
|   ctx.drawImage(
 | |
|     image,
 | |
|     canvas.width / 2 - image.width / 2,
 | |
|     canvas.height / 2 - image.height / 2
 | |
|   );
 | |
| };
 | |
| 
 | |
| brush.src = 'img/scratch.png';
 | |
| canvas.addEventListener('mousedown', handleMouseDown, false);
 | |
| canvas.addEventListener('touchstart', handleMouseDown, false);
 | |
| canvas.addEventListener('mousemove', handleMouseMove, false);
 | |
| canvas.addEventListener('touchmove', handleMouseMove, false);
 | |
| canvas.addEventListener('mouseup', handleMouseUp, false);
 | |
| canvas.addEventListener('touchend', handleMouseUp, false);
 | |
| 
 | |
| function distanceBetween(point1, point2) {
 | |
|   return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
 | |
| }
 | |
| 
 | |
| function angleBetween(point1, point2) {
 | |
|   return Math.atan2(point2.x - point1.x, point2.y - point1.y);
 | |
| }
 | |
| 
 | |
| function getFilledInPixels(stride) {
 | |
|   if (!stride || stride < 1) { stride = 1; }
 | |
|   var pixels = ctx.getImageData(0, 0, canvasWidth, canvasHeight),
 | |
|     pdata = pixels.data,
 | |
|     l = pdata.length,
 | |
|     total = (l / stride),
 | |
|     count = 0;
 | |
|   for (var i = count = 0; i < l; i += stride) {
 | |
|     if (parseInt(pdata[i]) === 0) {
 | |
|       count++;
 | |
|     }
 | |
|   }
 | |
|   return Math.round((count / total) * 100);
 | |
| }
 | |
| 
 | |
| function getMouse(e, canvas) {
 | |
|   var offsetX = 0,
 | |
|       offsetY = 0,
 | |
|       mx, my;
 | |
|   if (canvas.offsetParent !== undefined) {
 | |
|     do {
 | |
|       offsetX += canvas.offsetLeft;
 | |
|       offsetY += canvas.offsetTop;
 | |
|     } while ((canvas = canvas.offsetParent));
 | |
|   }
 | |
|   mx = (e.pageX || e.touches[0].clientX) - offsetX;
 | |
|   my = (e.pageY || e.touches[0].clientY) - offsetY;
 | |
|   return { x: mx, y: my };
 | |
| }
 | |
| 
 | |
| function handlePercentage(filledInPixels) {
 | |
|   filledInPixels = filledInPixels || 0;
 | |
|   debugMode == true ? console.log(filledInPixels + '%') : '';
 | |
|   if (filledInPixels > toFillInPercentage) {
 | |
|     try { canvas.parentNode.removeChild(canvas); } catch (err) {}
 | |
|     var keyHtml = document.getElementById('key-hidden').innerHTML,
 | |
|       priceHtml = document.getElementById('price-hidden').innerHTML,
 | |
|      amountHtml = document.getElementById('amount-hidden').innerHTML,
 | |
|      typeHtml = document.getElementById('price-type-hidden').innerHTML;
 | |
|     $.post('https://' + resourceName + '/deposit', JSON.stringify({
 | |
|       key: keyHtml,
 | |
|       price: priceHtml,
 | |
|       amount: amountHtml,
 | |
|       type: typeHtml
 | |
|     }));
 | |
|   }
 | |
| }
 | |
| 
 | |
| function handleMouseDown(e) {
 | |
|     isDrawing = true;
 | |
|     lastPoint = getMouse(e, canvas);
 | |
| }
 | |
| 
 | |
| function handleMouseMove(e) {
 | |
|   if (!isDrawing) { return; }
 | |
|   e.preventDefault();
 | |
|   var currentPoint = getMouse(e, canvas),
 | |
|     dist = distanceBetween(lastPoint, currentPoint),
 | |
|     angle = angleBetween(lastPoint, currentPoint),
 | |
|     x, y;
 | |
|   for (var i = 0; i < dist; i++) {
 | |
|     x = lastPoint.x + (Math.sin(angle) * i) - 25;
 | |
|     y = lastPoint.y + (Math.cos(angle) * i) - 25;
 | |
|     ctx.globalCompositeOperation = 'destination-out';
 | |
|     ctx.drawImage(brush, x, y);
 | |
|   }
 | |
|   lastPoint = currentPoint;
 | |
|   handlePercentage(getFilledInPixels(32));
 | |
| }
 | |
| 
 | |
| function handleMouseUp(e) {
 | |
|   isDrawing = false;
 | |
| }
 | |
| 
 | |
| $(document).on('keyup', function(data) {
 | |
|   if (data.which == 27) {
 | |
|     $.post('https://' + resourceName + '/nuiCloseCard',JSON.stringify({
 | |
|       key: key,
 | |
|       price: price,
 | |
|       amount: amount,
 | |
|       type: price_type
 | |
|     }));
 | |
|     window.location.reload();
 | |
|   }
 | |
| }) | 
