Last commit not found
// the game itself | |
var game; | |
var gameOptions = { | |
// slices (prizes) placed in the wheel | |
slices: 6, | |
// prize names, starting from 12 o'clock going clockwise | |
slicePrizes: [ | |
"π 5% OFF", | |
"π 10% OFF", | |
"π 15% OFF", | |
"π 25% OFF", | |
"π 50% OFF", | |
"π FREE PASTRY π°" | |
], | |
// wheel rotation duration, in milliseconds | |
rotationTime: 3000 | |
} | |
// once the window loads... | |
window.onload = function () { | |
// game configuration object | |
var gameConfig = { | |
// render type | |
type: Phaser.CANVAS, | |
// game width, in pixels | |
width: 850, | |
// game height, in pixels | |
height: 850, | |
// game background color | |
backgroundColor: 0x880044, | |
// scenes used by the game | |
scene: [playGame] | |
}; | |
// game constructor | |
game = new Phaser.Game(gameConfig); | |
// pure javascript to give focus to the page/frame and scale the game | |
window.focus() | |
resize(); | |
window.addEventListener("resize", resize, false); | |
} | |
// PlayGame scene | |
class playGame extends Phaser.Scene { | |
// constructor | |
constructor() { | |
super("PlayGame"); | |
} | |
// method to be executed when the scene preloads | |
preload() { // loading assets | |
this.load.image("wheel", window.location.href + "images/wheel.png"); | |
this.load.image("pin", window.location.href + "images/pin.png"); | |
} | |
// method to be executed once the scene has been created | |
create() { | |
// adding the wheel in the middle of the canvas | |
this.wheel = this.add.sprite(game.config.width / 2, game.config.height / 2, "wheel"); | |
// adding the pin in the middle of the canvas | |
this.pin = this.add.sprite(game.config.width / 2, game.config.height / 2, "pin"); | |
// adding the text field | |
this.prizeText = this.add.text(game.config.width / 2, game.config.height - 35, "SPIN TO WIN", { | |
font: "bold 64px Rajdhani", | |
align: "center", | |
color: "white" | |
}); | |
// center the text | |
this.prizeText.setOrigin(0.5); | |
// the game has just started = we can spin the wheel | |
this.canSpin = true; | |
// waiting for your input, then calling "spinWheel" function | |
this.input.on("pointerdown", this.spinWheel, this); | |
} | |
// function to spin the wheel | |
spinWheel() { | |
// can we spin the wheel? | |
if (this.canSpin) { | |
// resetting text field | |
this.prizeText.setText(""); | |
// the wheel will spin round from 2 to 4 times. This is just coreography | |
var rounds = Phaser.Math.Between(4, 6); | |
// then will rotate by a random number from 0 to 360 degrees. This is the actual spin | |
var degrees = Phaser.Math.Between(0, 360); | |
// before the wheel ends spinning, we already know the prize according to "degrees" rotation and the number of slices | |
var prize = gameOptions.slices - 1 - Math.floor(degrees / (360 / gameOptions.slices)); | |
// now the wheel cannot spin because it's already spinning | |
this.canSpin = false; | |
// animation tweeen for the spin: duration 3s, will rotate by (360 * rounds + degrees) degrees | |
// the quadratic easing will simulate friction | |
this.tweens.add({ | |
// adding the wheel to tween targets | |
targets: [this.wheel], | |
// angle destination | |
angle: 360 * rounds + degrees, | |
// tween duration | |
duration: gameOptions.rotationTime, | |
// tween easing | |
ease: "Cubic.easeOut", | |
// callback scope | |
callbackScope: this, | |
// function to be executed once the tween has been completed | |
onComplete: function (tween) { | |
// displaying prize text | |
this.prizeText.setText(gameOptions.slicePrizes[prize]); | |
// player can spin again | |
this.canSpin = false; | |
} | |
}); | |
} | |
} | |
} | |
// pure javascript to scale the game | |
function resize() { | |
var canvas = document.querySelector("canvas"); | |
var windowWidth = window.innerWidth; | |
var windowHeight = window.innerHeight; | |
var windowRatio = windowWidth / windowHeight; | |
var gameRatio = game.config.width / game.config.height; | |
if (windowRatio < gameRatio) { | |
canvas.style.width = windowWidth + "px"; | |
canvas.style.height = (windowWidth / gameRatio) + "px"; | |
} | |
else { | |
canvas.style.width = (windowHeight * gameRatio) + "px"; | |
canvas.style.height = windowHeight + "px"; | |
} | |
} |