/**** 
* Classes
****/ 
var Shape = Container.expand(function () {
	var self = Container.call(this);
	console.log('Shape created');
	var shapeGraphics;
	shapeGraphics = LK.getAsset('circle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.updateColor = function () {
		var h = self.colorIndex / 32;
		var s = 0.8;
		var v = 0.8;
		self.color = hsvToRgb(h, s, v);
		shapeGraphics.tint = self.color;
	};
	self.colorIndex = Math.floor(Math.random() * 32);
	self.updateColor();
	shapeGraphics.alpha = 0.5;
	self.addChild(shapeGraphics);
	var angle = Math.random() * Math.PI * 2;
	var speed = 7;
	self.vx = Math.cos(angle) * speed;
	self.vy = Math.sin(angle) * speed;
	self._move_migrated = function () {
		if (!self.isCollided) {
			self.x += self.vx;
			self.y += self.vy;
			if (self.x - self.width / 2 < 0 || self.x > 2048 - self.width / 2) {
				self.vx = -self.vx;
			}
			if (self.y - self.height / 2 < 0 || self.y > 2732 - self.height / 2) {
				self.vy = -self.vy;
			}
		} else {
			self.vx = 0;
			self.vy = 0;
			self.isCollided = true;
			self.scalingU = true;
		}
	};
	self.scalingUp = false;
	self.scalingDown = false;
	var scaleUp2 = function scaleUp2() {
		self.scalingUp = true;
	};
	self.explode = function () {
		self.isCollided = true;
		LK.setTimeout(scaleUp2, 1);
	};
	var scaleDown2 = function scaleDown2() {
		self.scalingDown = true;
	};
	self._update_migrated = function () {
		if (self.scalingUp) {
			if (self.scale.x < 4) {
				self.scale.x += 0.2;
				self.scale.y += 0.2;
			} else {
				self.scalingUp = false;
				LK.setTimeout(scaleDown2, 4000);
			}
		} else if (self.scalingDown) {
			if (self.scale.x > 0.2) {
				self.scale.x -= 0.2;
				self.scale.y -= 0.2;
			} else {
				if (self.parent) {
					self.parent.expandedCount--;
				}
				self.destroy();
			}
		}
	};
});
var StaticShape = Container.expand(function () {
	var self = Container.call(this);
	self._update_migrated = function () {
		if (self.scalingUp) {
			if (self.scale.x < 4) {
				self.scale.x += 0.08;
				self.scale.y += 0.08;
			} else {
				self.scalingUp = false;
				LK.setTimeout(scaleDown2, 5000);
			}
		} else if (self.scalingDown) {
			if (self.scale.x > 0.4) {
				self.scale.x -= 0.4;
				self.scale.y -= 0.4;
			} else {
				if (self.parent) {
					self.parent.expandedCount--;
				}
				self.destroy();
			}
		}
	};
	var shapeGraphics;
	shapeGraphics = LK.getAsset('circle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	shapeGraphics.alpha = 0.5;
	self.addChild(shapeGraphics);
	self.isCollided = true;
	self.scalingUp = true;
	self.scalingDown = false;
	self.scale.set(1, 1);
	var scaleDown2 = function scaleDown2() {
		console.log('StaticShape.scaleDown2 called');
		self.scalingDown = true;
	};
	var update = function update() {
		if (self.scalingUp) {
			if (self.scale.x < 4) {
				self.scale.x += 0.08;
				self.scale.y += 0.08;
			} else {
				self.scalingUp = false;
				LK.setTimeout(scaleDown2, 4000);
			}
		} else if (self.scalingDown) {
			if (self.scale.x > 0.4) {
				self.scale.x -= 0.4;
				self.scale.y -= 0.4;
			} else {
				if (self.parent) {
					self.parent.expandedCount--;
				}
				self.destroy();
			}
		}
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
var hsvToRgb = function hsvToRgb(h, s, v) {
	var r, g, b;
	var i = Math.floor(h * 6);
	var f = h * 6 - i;
	var p = v * (1 - s);
	var q = v * (1 - f * s);
	var t = v * (1 - (1 - f) * s);
	switch (i % 6) {
		case 0:
			r = v, g = t, b = p;
			break;
		case 1:
			r = q, g = v, b = p;
			break;
		case 2:
			r = p, g = v, b = t;
			break;
		case 3:
			r = p, g = q, b = v;
			break;
		case 4:
			r = t, g = p, b = v;
			break;
		case 5:
			r = v, g = p, b = q;
			break;
	}
	return (r * 255 << 16) + (g * 255 << 8) + b * 255;
};
var circlesCollide = function circlesCollide(o1, o2) {
	var dx = (o1.x - o2.x) * (o1.x - o2.x);
	var dy = (o1.y - o2.y) * (o1.y - o2.y);
	var radii = (o1.width + o2.width) / 2;
	radii *= radii;
	if (dx + dy < radii) {
		return true;
	} else {
		return false;
	}
};
game.expandedCount = 1;
game.setBackgroundColor('0xCCCCFF');
var currentLevel = 0;
var playerScore = 0;
var levels = [[1, 5], [3, 7], [6, 9], [8, 12], [10, 15], [15, 20], [18, 25], [25, 32], [30, 40], [35, 50], [50, 65], [75, 75]];
var shapes = [];
var levelText = new Text2('Level 1 - Get 1 out of 5 shapes', {
	size: 80,
	fill: "#ffffff",
	align: 'center'
});
levelText.anchor.set(0.5, 0);
levelText.x = 0;
levelText.y = 50;
LK.gui.top.addChild(levelText);
var collisionsCount = 0;
var collisionText = new Text2('Shapes: ' + collisionsCount, {
	size: 80,
	fill: "#777777",
	align: 'center'
});
collisionText.anchor.set(0.5, 0);
collisionText.x = 0;
collisionText.y = 150;
LK.gui.top.addChild(collisionText);
for (var i = 0; i < 5; i++) {
	var shape = game.addChild(new Shape());
	shape.x = shape.width + Math.random() * (2048 - 2 * shape.width);
	shape.y = shape.height + Math.random() * (2732 - 2 * shape.height);
	shapes.push(shape);
}
var isClicked = false;
game.staticShape = null;
game.on('down', function (x, y, obj) {
	if (!isClicked) {
		isClicked = true;
		var event = obj;
		var pos = game.toLocal(event.global);
		game.staticShape = game.addChild(new StaticShape());
		game.staticShape.x = pos.x - game.staticShape.width / 2;
		game.staticShape.y = pos.y - game.staticShape.height / 2;
	}
});
LK.on('tick', function () {
	if (game.expandedCount == 0) {
		if (collisionsCount >= levels[currentLevel][0]) {
			collisionText.setText('Level Completed - now try this');
			playerScore += collisionsCount;
			currentLevel++;
		} else {
			collisionText.setText('Try again');
		}
		shapes.forEach(function (child) {
			child.destroy();
		});
		shapes = [];
		if (currentLevel == levels.length) {
			collisionText.setText('Good Job!\nAll levels completed!\nYou win :)');
			LK.setScore(playerScore);
			LK.showGameOver();
			return;
		}
		for (var i = 0; i < (levels[currentLevel] ? levels[currentLevel][1] : 0); i++) {
			var shape = game.addChild(new Shape());
			shape.x = shape.width + Math.random() * (2048 - 2 * shape.width);
			shape.y = shape.height + Math.random() * (2732 - 2 * shape.height);
			shapes.push(shape);
		}
		isClicked = false;
		collisionsCount = 0;
		game.expandedCount = 1;
		if (currentLevel < levels.length) {
			levelText.setText('Level ' + (currentLevel + 1) + ' - Get ' + levels[currentLevel][0] + ' out of ' + levels[currentLevel][1] + ' shapes');
		} else {
			levelText.setText('All levels completed!');
		}
		return;
	}
	if (game.staticShape && game.staticShape._update_migrated) {
		game.staticShape._update_migrated();
	}
	shapes.forEach(function (shape) {
		shape._move_migrated();
		if (shape._update_migrated) {
			shape._update_migrated();
		}
		game.children.forEach(function (child) {
			if (shape !== child && !shape.isCollided && child.isCollided && circlesCollide(shape, child)) {
				shape.explode();
				collisionsCount++;
				game.expandedCount++;
				collisionText.setText('Shapes: ' + collisionsCount);
			}
		});
	});
}); /**** 
* Classes
****/ 
var Shape = Container.expand(function () {
	var self = Container.call(this);
	console.log('Shape created');
	var shapeGraphics;
	shapeGraphics = LK.getAsset('circle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.updateColor = function () {
		var h = self.colorIndex / 32;
		var s = 0.8;
		var v = 0.8;
		self.color = hsvToRgb(h, s, v);
		shapeGraphics.tint = self.color;
	};
	self.colorIndex = Math.floor(Math.random() * 32);
	self.updateColor();
	shapeGraphics.alpha = 0.5;
	self.addChild(shapeGraphics);
	var angle = Math.random() * Math.PI * 2;
	var speed = 7;
	self.vx = Math.cos(angle) * speed;
	self.vy = Math.sin(angle) * speed;
	self._move_migrated = function () {
		if (!self.isCollided) {
			self.x += self.vx;
			self.y += self.vy;
			if (self.x - self.width / 2 < 0 || self.x > 2048 - self.width / 2) {
				self.vx = -self.vx;
			}
			if (self.y - self.height / 2 < 0 || self.y > 2732 - self.height / 2) {
				self.vy = -self.vy;
			}
		} else {
			self.vx = 0;
			self.vy = 0;
			self.isCollided = true;
			self.scalingU = true;
		}
	};
	self.scalingUp = false;
	self.scalingDown = false;
	var scaleUp2 = function scaleUp2() {
		self.scalingUp = true;
	};
	self.explode = function () {
		self.isCollided = true;
		LK.setTimeout(scaleUp2, 1);
	};
	var scaleDown2 = function scaleDown2() {
		self.scalingDown = true;
	};
	self._update_migrated = function () {
		if (self.scalingUp) {
			if (self.scale.x < 4) {
				self.scale.x += 0.2;
				self.scale.y += 0.2;
			} else {
				self.scalingUp = false;
				LK.setTimeout(scaleDown2, 4000);
			}
		} else if (self.scalingDown) {
			if (self.scale.x > 0.2) {
				self.scale.x -= 0.2;
				self.scale.y -= 0.2;
			} else {
				if (self.parent) {
					self.parent.expandedCount--;
				}
				self.destroy();
			}
		}
	};
});
var StaticShape = Container.expand(function () {
	var self = Container.call(this);
	self._update_migrated = function () {
		if (self.scalingUp) {
			if (self.scale.x < 4) {
				self.scale.x += 0.08;
				self.scale.y += 0.08;
			} else {
				self.scalingUp = false;
				LK.setTimeout(scaleDown2, 5000);
			}
		} else if (self.scalingDown) {
			if (self.scale.x > 0.4) {
				self.scale.x -= 0.4;
				self.scale.y -= 0.4;
			} else {
				if (self.parent) {
					self.parent.expandedCount--;
				}
				self.destroy();
			}
		}
	};
	var shapeGraphics;
	shapeGraphics = LK.getAsset('circle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	shapeGraphics.alpha = 0.5;
	self.addChild(shapeGraphics);
	self.isCollided = true;
	self.scalingUp = true;
	self.scalingDown = false;
	self.scale.set(1, 1);
	var scaleDown2 = function scaleDown2() {
		console.log('StaticShape.scaleDown2 called');
		self.scalingDown = true;
	};
	var update = function update() {
		if (self.scalingUp) {
			if (self.scale.x < 4) {
				self.scale.x += 0.08;
				self.scale.y += 0.08;
			} else {
				self.scalingUp = false;
				LK.setTimeout(scaleDown2, 4000);
			}
		} else if (self.scalingDown) {
			if (self.scale.x > 0.4) {
				self.scale.x -= 0.4;
				self.scale.y -= 0.4;
			} else {
				if (self.parent) {
					self.parent.expandedCount--;
				}
				self.destroy();
			}
		}
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
var hsvToRgb = function hsvToRgb(h, s, v) {
	var r, g, b;
	var i = Math.floor(h * 6);
	var f = h * 6 - i;
	var p = v * (1 - s);
	var q = v * (1 - f * s);
	var t = v * (1 - (1 - f) * s);
	switch (i % 6) {
		case 0:
			r = v, g = t, b = p;
			break;
		case 1:
			r = q, g = v, b = p;
			break;
		case 2:
			r = p, g = v, b = t;
			break;
		case 3:
			r = p, g = q, b = v;
			break;
		case 4:
			r = t, g = p, b = v;
			break;
		case 5:
			r = v, g = p, b = q;
			break;
	}
	return (r * 255 << 16) + (g * 255 << 8) + b * 255;
};
var circlesCollide = function circlesCollide(o1, o2) {
	var dx = (o1.x - o2.x) * (o1.x - o2.x);
	var dy = (o1.y - o2.y) * (o1.y - o2.y);
	var radii = (o1.width + o2.width) / 2;
	radii *= radii;
	if (dx + dy < radii) {
		return true;
	} else {
		return false;
	}
};
game.expandedCount = 1;
game.setBackgroundColor('0xCCCCFF');
var currentLevel = 0;
var playerScore = 0;
var levels = [[1, 5], [3, 7], [6, 9], [8, 12], [10, 15], [15, 20], [18, 25], [25, 32], [30, 40], [35, 50], [50, 65], [75, 75]];
var shapes = [];
var levelText = new Text2('Level 1 - Get 1 out of 5 shapes', {
	size: 80,
	fill: "#ffffff",
	align: 'center'
});
levelText.anchor.set(0.5, 0);
levelText.x = 0;
levelText.y = 50;
LK.gui.top.addChild(levelText);
var collisionsCount = 0;
var collisionText = new Text2('Shapes: ' + collisionsCount, {
	size: 80,
	fill: "#777777",
	align: 'center'
});
collisionText.anchor.set(0.5, 0);
collisionText.x = 0;
collisionText.y = 150;
LK.gui.top.addChild(collisionText);
for (var i = 0; i < 5; i++) {
	var shape = game.addChild(new Shape());
	shape.x = shape.width + Math.random() * (2048 - 2 * shape.width);
	shape.y = shape.height + Math.random() * (2732 - 2 * shape.height);
	shapes.push(shape);
}
var isClicked = false;
game.staticShape = null;
game.on('down', function (x, y, obj) {
	if (!isClicked) {
		isClicked = true;
		var event = obj;
		var pos = game.toLocal(event.global);
		game.staticShape = game.addChild(new StaticShape());
		game.staticShape.x = pos.x - game.staticShape.width / 2;
		game.staticShape.y = pos.y - game.staticShape.height / 2;
	}
});
LK.on('tick', function () {
	if (game.expandedCount == 0) {
		if (collisionsCount >= levels[currentLevel][0]) {
			collisionText.setText('Level Completed - now try this');
			playerScore += collisionsCount;
			currentLevel++;
		} else {
			collisionText.setText('Try again');
		}
		shapes.forEach(function (child) {
			child.destroy();
		});
		shapes = [];
		if (currentLevel == levels.length) {
			collisionText.setText('Good Job!\nAll levels completed!\nYou win :)');
			LK.setScore(playerScore);
			LK.showGameOver();
			return;
		}
		for (var i = 0; i < (levels[currentLevel] ? levels[currentLevel][1] : 0); i++) {
			var shape = game.addChild(new Shape());
			shape.x = shape.width + Math.random() * (2048 - 2 * shape.width);
			shape.y = shape.height + Math.random() * (2732 - 2 * shape.height);
			shapes.push(shape);
		}
		isClicked = false;
		collisionsCount = 0;
		game.expandedCount = 1;
		if (currentLevel < levels.length) {
			levelText.setText('Level ' + (currentLevel + 1) + ' - Get ' + levels[currentLevel][0] + ' out of ' + levels[currentLevel][1] + ' shapes');
		} else {
			levelText.setText('All levels completed!');
		}
		return;
	}
	if (game.staticShape && game.staticShape._update_migrated) {
		game.staticShape._update_migrated();
	}
	shapes.forEach(function (shape) {
		shape._move_migrated();
		if (shape._update_migrated) {
			shape._update_migrated();
		}
		game.children.forEach(function (child) {
			if (shape !== child && !shape.isCollided && child.isCollided && circlesCollide(shape, child)) {
				shape.explode();
				collisionsCount++;
				game.expandedCount++;
				collisionText.setText('Shapes: ' + collisionsCount);
			}
		});
	});
});
:quality(85)/https://cdn.frvr.ai/655e3390be406eb4a5a71fe1.png%3F3) 
 a white geometric square shape Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/655e3459be406eb4a5a72003.png%3F3) 
 a white dot Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/655f2994620d4377ab354888.png%3F3) 
 flat white round disk Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/655f936c668f83fe1af7041f.png%3F3) 
 gif circle spinning animation Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.