TINA - particle example

by Cedric Stoquer

HTML

<script src="https://rawgit.com/Wizcorp/tina/master/build/tina.min.js"></script>
<script src="https://rawgit.com/Wizcorp/tina.js/master/examples/Sprite.js"></script>
<image id="image" src="https://raw.githubusercontent.com/Wizcorp/tina.js/master/examples/star.png" class="hidden">
<canvas id="canvas" width="400" height="400"></canvas>

CSS

body {
	background-color: #7F7F7F;
	text-align: center;
	font-family: verdana;
}

canvas {
	margin: 20px auto;
	border-radius: 5px;
	box-shadow: 1px 1px 10px #333;
	display: block;
}

.title {
	font-weight: bolder;
	font-size: 30px;
	text-shadow: 2px 2px 10px #000;
	color: #AAA;
}

.hidden {
	display: none;
}

JavaScript

var image   = document.getElementById('image');
var canvas  = document.getElementById('canvas');
var ctx     = canvas.getContext('2d');
var sprites = [];

//▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

TINA.onUpdate(function update(t, dt) {
	// At this point, all my tweens are up to date for the current iteration
	ctx.clearRect(0, 0, 400, 400);
	for (var i = 0; i < sprites.length; i++) {
		sprites[i].draw(ctx);
	}
});

function createAnimation(x, y) {
	for (var i = 0; i < sprites.length; i++) {
		var sprite = sprites[i];
		sprite.scale = 0.5 * Math.random() + 0.1;

		var tween = TINA.Tween(sprite, ['x', 'y', 'rotation', 'alpha']);
		var duration = 300 + Math.random() * 200;
		var easingParameter = 1;

		tween.from({
			x: x,
			y: y,
			rotation: 0,
			alpha: 1
		});

		tween.to({
			x: x + (Math.random() - 0.5) * 400,
			y: y + (Math.random() - 0.5) * 400,
			rotation: 10 * (Math.random() - 0.5),
			alpha: 0
		}, duration, TINA.easing.expOut, easingParameter);

		tween.start();
	}
}

canvas.addEventListener('mousedown', function onTap(e) {
	e.preventDefault();
	createAnimation(e.layerX, e.layerY);
}, false);

//▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

for (var i = 0; i < 100; i++) {
	sprites.push(new Sprite(image));
}