Code edit (1 edits merged)
Please save this source code
User prompt
Pango's Coloring Canvas
Initial prompt
Pango the blue raccoon 💙: rabbit’s paintbox 🤍. Help rabbit 🤍 color in her blank canvas. Tap to choose a blank piece of paper 💙 or a picture to color in ❤️, tap on a color, use your finger to draw on the picture, you can rub out by choosing the rubber and moving your finger on the screen.
/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var ColorPalette = Container.expand(function () {
	var self = Container.call(this);
	var colors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFA500, 0x800080, 0xFFC0CB, 0x8B4513, 0x000000, 0xFFFFFF];
	var colorButtons = [];
	for (var i = 0; i < colors.length; i++) {
		var button = LK.getAsset('colorButton', {
			anchorX: 0.5,
			anchorY: 0.5,
			x: i % 6 * 100,
			y: Math.floor(i / 6) * 100
		});
		button.tint = colors[i];
		button.colorValue = colors[i];
		colorButtons.push(button);
		self.addChild(button);
	}
	self.colorButtons = colorButtons;
	return self;
});
var DrawingCanvas = Container.expand(function () {
	var self = Container.call(this);
	var border = self.attachAsset('canvasBorder', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var canvas = self.attachAsset('canvas', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var strokes = [];
	var templateElements = [];
	self.addStroke = function (x, y, color) {
		var stroke = LK.getAsset('brushStroke', {
			anchorX: 0.5,
			anchorY: 0.5,
			x: x,
			y: y
		});
		stroke.tint = color;
		strokes.push(stroke);
		self.addChild(stroke);
	};
	self.clearCanvas = function () {
		for (var i = 0; i < strokes.length; i++) {
			strokes[i].destroy();
		}
		strokes = [];
		for (var j = 0; j < templateElements.length; j++) {
			templateElements[j].destroy();
		}
		templateElements = [];
	};
	self.addTemplate = function (templateType) {
		self.clearCanvas();
		if (templateType === 'house') {
			var house = LK.getAsset('houseTemplate', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: 0,
				y: 50
			});
			var roof = LK.getAsset('roofTemplate', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: 0,
				y: -20
			});
			templateElements.push(house);
			templateElements.push(roof);
			self.addChild(house);
			self.addChild(roof);
		} else if (templateType === 'nature') {
			var sun = LK.getAsset('sunTemplate', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: -200,
				y: -200
			});
			var tree = LK.getAsset('treeTemplate', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: 100,
				y: 100
			});
			var cloud1 = LK.getAsset('cloudTemplate', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: 0,
				y: -300
			});
			var cloud2 = LK.getAsset('cloudTemplate', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: 150,
				y: -280
			});
			templateElements.push(sun);
			templateElements.push(tree);
			templateElements.push(cloud1);
			templateElements.push(cloud2);
			self.addChild(sun);
			self.addChild(tree);
			self.addChild(cloud1);
			self.addChild(cloud2);
		}
	};
	return self;
});
var Pango = Container.expand(function () {
	var self = Container.call(this);
	var body = self.attachAsset('pangoBody', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var head = self.attachAsset('pangoHead', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: -40
	});
	var leftEar = self.attachAsset('pangoEar', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -20,
		y: -60
	});
	var rightEar = self.attachAsset('pangoEar', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 20,
		y: -60
	});
	var leftEye = self.attachAsset('pangoEye', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -15,
		y: -45
	});
	var rightEye = self.attachAsset('pangoEye', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 15,
		y: -45
	});
	var leftPupil = self.attachAsset('pangoPupil', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -15,
		y: -45
	});
	var rightPupil = self.attachAsset('pangoPupil', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 15,
		y: -45
	});
	var nose = self.attachAsset('pangoNose', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: -35
	});
	var stripe1 = self.attachAsset('pangoStripe', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: -10
	});
	var stripe2 = self.attachAsset('pangoStripe', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: 10
	});
	self.wave = function () {
		tween(self, {
			rotation: 0.1
		}, {
			duration: 500,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				tween(self, {
					rotation: -0.1
				}, {
					duration: 500,
					easing: tween.easeInOut,
					onFinish: function onFinish() {
						tween(self, {
							rotation: 0
						}, {
							duration: 500,
							easing: tween.easeInOut
						});
					}
				});
			}
		});
	};
	return self;
});
var Rabbit = Container.expand(function () {
	var self = Container.call(this);
	var body = self.attachAsset('rabbitBody', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var head = self.attachAsset('rabbitHead', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: -35
	});
	var leftEar = self.attachAsset('rabbitEar', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -12,
		y: -55
	});
	var rightEar = self.attachAsset('rabbitEar', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 12,
		y: -55
	});
	var leftEye = self.attachAsset('rabbitEye', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -10,
		y: -40
	});
	var rightEye = self.attachAsset('rabbitEye', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 10,
		y: -40
	});
	var nose = self.attachAsset('rabbitNose', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: -30
	});
	return self;
});
var TemplateSelector = Container.expand(function () {
	var self = Container.call(this);
	var blankBorder = self.attachAsset('templateBorder', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -120,
		y: 0
	});
	var blankButton = self.attachAsset('templateButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -120,
		y: 0
	});
	var blankText = new Text2('Blank', {
		size: 24,
		fill: '#000000'
	});
	blankText.anchor.set(0.5, 0.5);
	blankText.x = -120;
	blankText.y = 0;
	self.addChild(blankText);
	var houseBorder = self.attachAsset('templateBorder', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 120,
		y: 0
	});
	var houseButton = self.attachAsset('templateButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 120,
		y: 0
	});
	var houseText = new Text2('House', {
		size: 24,
		fill: '#000000'
	});
	houseText.anchor.set(0.5, 0.5);
	houseText.x = 120;
	houseText.y = 0;
	self.addChild(houseText);
	var natureBorder = self.attachAsset('templateBorder', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: 200
	});
	var natureButton = self.attachAsset('templateButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: 200
	});
	var natureText = new Text2('Nature', {
		size: 24,
		fill: '#000000'
	});
	natureText.anchor.set(0.5, 0.5);
	natureText.x = 0;
	natureText.y = 200;
	self.addChild(natureText);
	self.blankButton = blankButton;
	self.houseButton = houseButton;
	self.natureButton = natureButton;
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
var gameState = 'template_selection';
var selectedColor = 0xFF0000;
var isDrawing = false;
var lastDrawX = 0;
var lastDrawY = 0;
var pango = new Pango();
pango.x = 200;
pango.y = 400;
game.addChild(pango);
var rabbit = new Rabbit();
rabbit.x = 1800;
rabbit.y = 400;
game.addChild(rabbit);
var templateSelector = new TemplateSelector();
templateSelector.x = 1024;
templateSelector.y = 1200;
game.addChild(templateSelector);
var drawingCanvas = new DrawingCanvas();
drawingCanvas.x = 1024;
drawingCanvas.y = 800;
drawingCanvas.visible = false;
game.addChild(drawingCanvas);
var colorPalette = new ColorPalette();
colorPalette.x = 200;
colorPalette.y = 1400;
colorPalette.visible = false;
game.addChild(colorPalette);
var titleText = new Text2('Choose a Canvas!', {
	size: 80,
	fill: '#FFFFFF'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 300;
game.addChild(titleText);
var instructionText = new Text2('Tap to select a template', {
	size: 40,
	fill: '#FFFFFF'
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 400;
game.addChild(instructionText);
var eraserButton = LK.getAsset('colorButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 200,
	y: 1600
});
eraserButton.tint = 0xFFFFFF;
eraserButton.visible = false;
game.addChild(eraserButton);
var eraserText = new Text2('Eraser', {
	size: 24,
	fill: '#000000'
});
eraserText.anchor.set(0.5, 0.5);
eraserText.x = 200;
eraserText.y = 1600;
eraserText.visible = false;
game.addChild(eraserText);
function startDrawingMode(templateType) {
	gameState = 'drawing';
	templateSelector.visible = false;
	titleText.visible = false;
	instructionText.visible = false;
	drawingCanvas.visible = true;
	colorPalette.visible = true;
	eraserButton.visible = true;
	eraserText.visible = true;
	if (templateType !== 'blank') {
		drawingCanvas.addTemplate(templateType);
	}
	titleText.setText('Start Coloring!');
	titleText.visible = true;
	titleText.y = 150;
	pango.wave();
	LK.getSound('templateSelect').play();
}
function handleMove(x, y, obj) {
	if (gameState === 'drawing' && isDrawing) {
		var canvasPos = drawingCanvas.toLocal({
			x: x,
			y: y
		});
		if (Math.abs(canvasPos.x) <= 700 && Math.abs(canvasPos.y) <= 500) {
			var distance = Math.sqrt(Math.pow(canvasPos.x - lastDrawX, 2) + Math.pow(canvasPos.y - lastDrawY, 2));
			if (distance > 15) {
				drawingCanvas.addStroke(canvasPos.x, canvasPos.y, selectedColor);
				lastDrawX = canvasPos.x;
				lastDrawY = canvasPos.y;
				LK.getSound('brushStroke').play();
			}
		}
	}
}
game.move = handleMove;
game.down = function (x, y, obj) {
	if (gameState === 'template_selection') {
		var localPos = templateSelector.toLocal({
			x: x,
			y: y
		});
		if (Math.abs(localPos.x + 120) <= 100 && Math.abs(localPos.y) <= 75) {
			startDrawingMode('blank');
		} else if (Math.abs(localPos.x - 120) <= 100 && Math.abs(localPos.y) <= 75) {
			startDrawingMode('house');
		} else if (Math.abs(localPos.x) <= 100 && Math.abs(localPos.y - 200) <= 75) {
			startDrawingMode('nature');
		}
	} else if (gameState === 'drawing') {
		var canvasPos = drawingCanvas.toLocal({
			x: x,
			y: y
		});
		if (Math.abs(canvasPos.x) <= 700 && Math.abs(canvasPos.y) <= 500) {
			isDrawing = true;
			lastDrawX = canvasPos.x;
			lastDrawY = canvasPos.y;
			drawingCanvas.addStroke(canvasPos.x, canvasPos.y, selectedColor);
			LK.getSound('brushStroke').play();
		}
		for (var i = 0; i < colorPalette.colorButtons.length; i++) {
			var button = colorPalette.colorButtons[i];
			var buttonPos = colorPalette.toLocal({
				x: x,
				y: y
			});
			var buttonLocalX = buttonPos.x - button.x;
			var buttonLocalY = buttonPos.y - button.y;
			if (Math.abs(buttonLocalX) <= 40 && Math.abs(buttonLocalY) <= 40) {
				selectedColor = button.colorValue;
				LK.getSound('colorSelect').play();
				break;
			}
		}
		var eraserPos = game.toLocal({
			x: x,
			y: y
		});
		if (Math.abs(eraserPos.x - 200) <= 40 && Math.abs(eraserPos.y - 1600) <= 40) {
			selectedColor = 0xFFFFFF;
			LK.getSound('colorSelect').play();
		}
	}
};
game.up = function (x, y, obj) {
	if (gameState === 'drawing') {
		isDrawing = false;
	}
};
game.update = function () {
	if (LK.ticks % 300 === 0 && gameState === 'template_selection') {
		pango.wave();
	}
	if (LK.ticks % 400 === 0 && gameState === 'drawing') {
		tween(rabbit, {
			y: rabbit.y - 10
		}, {
			duration: 200,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				tween(rabbit, {
					y: rabbit.y + 10
				}, {
					duration: 200,
					easing: tween.easeInOut
				});
			}
		});
	}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,502 @@
-/****
+/**** 
+* Plugins
+****/ 
+var tween = LK.import("@upit/tween.v1");
+
+/**** 
+* Classes
+****/ 
+var ColorPalette = Container.expand(function () {
+	var self = Container.call(this);
+	var colors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFA500, 0x800080, 0xFFC0CB, 0x8B4513, 0x000000, 0xFFFFFF];
+	var colorButtons = [];
+	for (var i = 0; i < colors.length; i++) {
+		var button = LK.getAsset('colorButton', {
+			anchorX: 0.5,
+			anchorY: 0.5,
+			x: i % 6 * 100,
+			y: Math.floor(i / 6) * 100
+		});
+		button.tint = colors[i];
+		button.colorValue = colors[i];
+		colorButtons.push(button);
+		self.addChild(button);
+	}
+	self.colorButtons = colorButtons;
+	return self;
+});
+var DrawingCanvas = Container.expand(function () {
+	var self = Container.call(this);
+	var border = self.attachAsset('canvasBorder', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	var canvas = self.attachAsset('canvas', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	var strokes = [];
+	var templateElements = [];
+	self.addStroke = function (x, y, color) {
+		var stroke = LK.getAsset('brushStroke', {
+			anchorX: 0.5,
+			anchorY: 0.5,
+			x: x,
+			y: y
+		});
+		stroke.tint = color;
+		strokes.push(stroke);
+		self.addChild(stroke);
+	};
+	self.clearCanvas = function () {
+		for (var i = 0; i < strokes.length; i++) {
+			strokes[i].destroy();
+		}
+		strokes = [];
+		for (var j = 0; j < templateElements.length; j++) {
+			templateElements[j].destroy();
+		}
+		templateElements = [];
+	};
+	self.addTemplate = function (templateType) {
+		self.clearCanvas();
+		if (templateType === 'house') {
+			var house = LK.getAsset('houseTemplate', {
+				anchorX: 0.5,
+				anchorY: 0.5,
+				x: 0,
+				y: 50
+			});
+			var roof = LK.getAsset('roofTemplate', {
+				anchorX: 0.5,
+				anchorY: 0.5,
+				x: 0,
+				y: -20
+			});
+			templateElements.push(house);
+			templateElements.push(roof);
+			self.addChild(house);
+			self.addChild(roof);
+		} else if (templateType === 'nature') {
+			var sun = LK.getAsset('sunTemplate', {
+				anchorX: 0.5,
+				anchorY: 0.5,
+				x: -200,
+				y: -200
+			});
+			var tree = LK.getAsset('treeTemplate', {
+				anchorX: 0.5,
+				anchorY: 0.5,
+				x: 100,
+				y: 100
+			});
+			var cloud1 = LK.getAsset('cloudTemplate', {
+				anchorX: 0.5,
+				anchorY: 0.5,
+				x: 0,
+				y: -300
+			});
+			var cloud2 = LK.getAsset('cloudTemplate', {
+				anchorX: 0.5,
+				anchorY: 0.5,
+				x: 150,
+				y: -280
+			});
+			templateElements.push(sun);
+			templateElements.push(tree);
+			templateElements.push(cloud1);
+			templateElements.push(cloud2);
+			self.addChild(sun);
+			self.addChild(tree);
+			self.addChild(cloud1);
+			self.addChild(cloud2);
+		}
+	};
+	return self;
+});
+var Pango = Container.expand(function () {
+	var self = Container.call(this);
+	var body = self.attachAsset('pangoBody', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	var head = self.attachAsset('pangoHead', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: -40
+	});
+	var leftEar = self.attachAsset('pangoEar', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -20,
+		y: -60
+	});
+	var rightEar = self.attachAsset('pangoEar', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 20,
+		y: -60
+	});
+	var leftEye = self.attachAsset('pangoEye', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -15,
+		y: -45
+	});
+	var rightEye = self.attachAsset('pangoEye', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 15,
+		y: -45
+	});
+	var leftPupil = self.attachAsset('pangoPupil', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -15,
+		y: -45
+	});
+	var rightPupil = self.attachAsset('pangoPupil', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 15,
+		y: -45
+	});
+	var nose = self.attachAsset('pangoNose', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: -35
+	});
+	var stripe1 = self.attachAsset('pangoStripe', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: -10
+	});
+	var stripe2 = self.attachAsset('pangoStripe', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: 10
+	});
+	self.wave = function () {
+		tween(self, {
+			rotation: 0.1
+		}, {
+			duration: 500,
+			easing: tween.easeInOut,
+			onFinish: function onFinish() {
+				tween(self, {
+					rotation: -0.1
+				}, {
+					duration: 500,
+					easing: tween.easeInOut,
+					onFinish: function onFinish() {
+						tween(self, {
+							rotation: 0
+						}, {
+							duration: 500,
+							easing: tween.easeInOut
+						});
+					}
+				});
+			}
+		});
+	};
+	return self;
+});
+var Rabbit = Container.expand(function () {
+	var self = Container.call(this);
+	var body = self.attachAsset('rabbitBody', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	var head = self.attachAsset('rabbitHead', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: -35
+	});
+	var leftEar = self.attachAsset('rabbitEar', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -12,
+		y: -55
+	});
+	var rightEar = self.attachAsset('rabbitEar', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 12,
+		y: -55
+	});
+	var leftEye = self.attachAsset('rabbitEye', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -10,
+		y: -40
+	});
+	var rightEye = self.attachAsset('rabbitEye', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 10,
+		y: -40
+	});
+	var nose = self.attachAsset('rabbitNose', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: -30
+	});
+	return self;
+});
+var TemplateSelector = Container.expand(function () {
+	var self = Container.call(this);
+	var blankBorder = self.attachAsset('templateBorder', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -120,
+		y: 0
+	});
+	var blankButton = self.attachAsset('templateButton', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -120,
+		y: 0
+	});
+	var blankText = new Text2('Blank', {
+		size: 24,
+		fill: '#000000'
+	});
+	blankText.anchor.set(0.5, 0.5);
+	blankText.x = -120;
+	blankText.y = 0;
+	self.addChild(blankText);
+	var houseBorder = self.attachAsset('templateBorder', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 120,
+		y: 0
+	});
+	var houseButton = self.attachAsset('templateButton', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 120,
+		y: 0
+	});
+	var houseText = new Text2('House', {
+		size: 24,
+		fill: '#000000'
+	});
+	houseText.anchor.set(0.5, 0.5);
+	houseText.x = 120;
+	houseText.y = 0;
+	self.addChild(houseText);
+	var natureBorder = self.attachAsset('templateBorder', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: 200
+	});
+	var natureButton = self.attachAsset('templateButton', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 0,
+		y: 200
+	});
+	var natureText = new Text2('Nature', {
+		size: 24,
+		fill: '#000000'
+	});
+	natureText.anchor.set(0.5, 0.5);
+	natureText.x = 0;
+	natureText.y = 200;
+	self.addChild(natureText);
+	self.blankButton = blankButton;
+	self.houseButton = houseButton;
+	self.natureButton = natureButton;
+	return self;
+});
+
+/**** 
 * Initialize Game
-****/
+****/ 
 var game = new LK.Game({
-	backgroundColor: 0x000000
-});
\ No newline at end of file
+	backgroundColor: 0x87CEEB
+});
+
+/**** 
+* Game Code
+****/ 
+var gameState = 'template_selection';
+var selectedColor = 0xFF0000;
+var isDrawing = false;
+var lastDrawX = 0;
+var lastDrawY = 0;
+var pango = new Pango();
+pango.x = 200;
+pango.y = 400;
+game.addChild(pango);
+var rabbit = new Rabbit();
+rabbit.x = 1800;
+rabbit.y = 400;
+game.addChild(rabbit);
+var templateSelector = new TemplateSelector();
+templateSelector.x = 1024;
+templateSelector.y = 1200;
+game.addChild(templateSelector);
+var drawingCanvas = new DrawingCanvas();
+drawingCanvas.x = 1024;
+drawingCanvas.y = 800;
+drawingCanvas.visible = false;
+game.addChild(drawingCanvas);
+var colorPalette = new ColorPalette();
+colorPalette.x = 200;
+colorPalette.y = 1400;
+colorPalette.visible = false;
+game.addChild(colorPalette);
+var titleText = new Text2('Choose a Canvas!', {
+	size: 80,
+	fill: '#FFFFFF'
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 1024;
+titleText.y = 300;
+game.addChild(titleText);
+var instructionText = new Text2('Tap to select a template', {
+	size: 40,
+	fill: '#FFFFFF'
+});
+instructionText.anchor.set(0.5, 0.5);
+instructionText.x = 1024;
+instructionText.y = 400;
+game.addChild(instructionText);
+var eraserButton = LK.getAsset('colorButton', {
+	anchorX: 0.5,
+	anchorY: 0.5,
+	x: 200,
+	y: 1600
+});
+eraserButton.tint = 0xFFFFFF;
+eraserButton.visible = false;
+game.addChild(eraserButton);
+var eraserText = new Text2('Eraser', {
+	size: 24,
+	fill: '#000000'
+});
+eraserText.anchor.set(0.5, 0.5);
+eraserText.x = 200;
+eraserText.y = 1600;
+eraserText.visible = false;
+game.addChild(eraserText);
+function startDrawingMode(templateType) {
+	gameState = 'drawing';
+	templateSelector.visible = false;
+	titleText.visible = false;
+	instructionText.visible = false;
+	drawingCanvas.visible = true;
+	colorPalette.visible = true;
+	eraserButton.visible = true;
+	eraserText.visible = true;
+	if (templateType !== 'blank') {
+		drawingCanvas.addTemplate(templateType);
+	}
+	titleText.setText('Start Coloring!');
+	titleText.visible = true;
+	titleText.y = 150;
+	pango.wave();
+	LK.getSound('templateSelect').play();
+}
+function handleMove(x, y, obj) {
+	if (gameState === 'drawing' && isDrawing) {
+		var canvasPos = drawingCanvas.toLocal({
+			x: x,
+			y: y
+		});
+		if (Math.abs(canvasPos.x) <= 700 && Math.abs(canvasPos.y) <= 500) {
+			var distance = Math.sqrt(Math.pow(canvasPos.x - lastDrawX, 2) + Math.pow(canvasPos.y - lastDrawY, 2));
+			if (distance > 15) {
+				drawingCanvas.addStroke(canvasPos.x, canvasPos.y, selectedColor);
+				lastDrawX = canvasPos.x;
+				lastDrawY = canvasPos.y;
+				LK.getSound('brushStroke').play();
+			}
+		}
+	}
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+	if (gameState === 'template_selection') {
+		var localPos = templateSelector.toLocal({
+			x: x,
+			y: y
+		});
+		if (Math.abs(localPos.x + 120) <= 100 && Math.abs(localPos.y) <= 75) {
+			startDrawingMode('blank');
+		} else if (Math.abs(localPos.x - 120) <= 100 && Math.abs(localPos.y) <= 75) {
+			startDrawingMode('house');
+		} else if (Math.abs(localPos.x) <= 100 && Math.abs(localPos.y - 200) <= 75) {
+			startDrawingMode('nature');
+		}
+	} else if (gameState === 'drawing') {
+		var canvasPos = drawingCanvas.toLocal({
+			x: x,
+			y: y
+		});
+		if (Math.abs(canvasPos.x) <= 700 && Math.abs(canvasPos.y) <= 500) {
+			isDrawing = true;
+			lastDrawX = canvasPos.x;
+			lastDrawY = canvasPos.y;
+			drawingCanvas.addStroke(canvasPos.x, canvasPos.y, selectedColor);
+			LK.getSound('brushStroke').play();
+		}
+		for (var i = 0; i < colorPalette.colorButtons.length; i++) {
+			var button = colorPalette.colorButtons[i];
+			var buttonPos = colorPalette.toLocal({
+				x: x,
+				y: y
+			});
+			var buttonLocalX = buttonPos.x - button.x;
+			var buttonLocalY = buttonPos.y - button.y;
+			if (Math.abs(buttonLocalX) <= 40 && Math.abs(buttonLocalY) <= 40) {
+				selectedColor = button.colorValue;
+				LK.getSound('colorSelect').play();
+				break;
+			}
+		}
+		var eraserPos = game.toLocal({
+			x: x,
+			y: y
+		});
+		if (Math.abs(eraserPos.x - 200) <= 40 && Math.abs(eraserPos.y - 1600) <= 40) {
+			selectedColor = 0xFFFFFF;
+			LK.getSound('colorSelect').play();
+		}
+	}
+};
+game.up = function (x, y, obj) {
+	if (gameState === 'drawing') {
+		isDrawing = false;
+	}
+};
+game.update = function () {
+	if (LK.ticks % 300 === 0 && gameState === 'template_selection') {
+		pango.wave();
+	}
+	if (LK.ticks % 400 === 0 && gameState === 'drawing') {
+		tween(rabbit, {
+			y: rabbit.y - 10
+		}, {
+			duration: 200,
+			easing: tween.easeInOut,
+			onFinish: function onFinish() {
+				tween(rabbit, {
+					y: rabbit.y + 10
+				}, {
+					duration: 200,
+					easing: tween.easeInOut
+				});
+			}
+		});
+	}
+};
\ No newline at end of file