1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var spriteMap; 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var ballRadius; 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var spriteMapSize = 50; 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function drawBallInit(diameter) { 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ballRadius = diameter / 2; 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var ballImage = document.getElementById('ballImage'); 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) spriteMap = document.createElement("canvas"); 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) spriteMap.setAttribute('width', ballDiameter*spriteMapSize + 2); 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) spriteMap.setAttribute('height', ballDiameter + 2); 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx = spriteMap.getContext("2d"); 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx.clearRect(0,0, ballDiameter*spriteMapSize + 2, ballDiameter + 2); 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx.translate(ballRadius + 1, ballRadius + 1); 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (var i = 0; i < spriteMapSize; i++) { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx.save(); 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx.rotate(i * 2 * Math.PI / spriteMapSize ); 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx.drawImage(ballImage, -ballRadius, -ballRadius, ballDiameter, 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ballDiameter); 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx.restore(); 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ctx.translate(ballDiameter, 0); 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function safeMod(a, b) { 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var q = Math.floor(a / b); 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return a - q*b; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function drawBall(x, y, angle) { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) canvasContext.save(); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) canvasContext.translate(x, y); 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var idx = safeMod(Math.floor(angle * spriteMapSize / (2 * Math.PI)), 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) spriteMapSize); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) canvasContext.drawImage(spriteMap, idx*ballDiameter + 1, 1, ballDiameter, 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ballDiameter, -ballRadius, -ballRadius, ballDiameter, ballDiameter); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) canvasContext.restore(); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 42