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