/**** 
* Classes
****/ 
// Artifact class
var Artifact = Container.expand(function () {
	var self = Container.call(this);
	var artifactGraphics = self.attachAsset('artifact', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Assets will be automatically generated based on usage in the code.
// Hero class
var Hero = Container.expand(function () {
	var self = Container.call(this);
	var heroGraphics = self.attachAsset('hero', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.speedX = 0;
	self.speedY = 0;
	self.onGround = false;
	self.update = function () {
		// Update hero's position and handle gravity
		if (!self.onGround) {
			self.speedY += 0.5; // gravity
		}
		self.x += self.speedX;
		self.y += self.speedY;
		// Collision with ground
		if (self.y > game.height - heroGraphics.height) {
			self.y = game.height - heroGraphics.height;
			self.onGround = true;
			self.speedY = 0;
		}
	};
	self.jump = function () {
		if (self.onGround) {
			self.speedY = -15;
			self.onGround = false;
		}
	};
});
// ItemDescription class
var ItemDescription = Container.expand(function (itemName, itemDescription) {
	var self = Container.call(this);
	var descriptionGraphics = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		scaleX: 3,
		scaleY: 2,
		lineWidth: 10,
		lineColor: 0x00FF00
	});
	var descriptionText = new Text2(itemName + '\n' + itemDescription, {
		size: 50,
		fill: "#ffffff"
	});
	descriptionText.anchor.set(0.5, 0.5);
	descriptionText.x = descriptionGraphics.x;
	descriptionText.y = descriptionGraphics.y - 50;
	self.addChild(descriptionText);
	self.updateDescription = function (itemName, itemDescription) {
		descriptionText.setText(itemName + '\n' + itemDescription);
	};
});
// Main Menu class
var MainMenu = Container.expand(function () {
	var self = Container.call(this);
	var title = self.attachAsset('title', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	title.x = game.width / 2;
	title.y = game.height / 2 - 100;
	var playButton = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		// Change color to black
		scaleX: 6,
		scaleY: 4,
		lineWidth: 10,
		lineColor: 0x00FF00 // Change border color to green
	});
	playButton.x = game.width / 4;
	playButton.y = game.height * 3 / 4;
	playButton.on('down', function () {
		self.destroy();
		hero.visible = true;
		platforms.forEach(function (platform) {
			platform.visible = true;
		});
		artifacts.forEach(function (artifact) {
			artifact.visible = true;
		});
	});
	playButton.on('over', function () {
		playButton.scaleX = 5.5;
		playButton.scaleY = 3.5;
	});
	playButton.on('out', function () {
		playButton.scaleX = 5;
		playButton.scaleY = 3;
	});
	// Add 'Play' text to the play button
	var playText = new Text2('Play', {
		size: 200,
		// 2x bigger
		fill: "#ffffff"
	});
	playText.anchor.set(0.5, 0.5);
	playText.x = playButton.x;
	playText.y = playButton.y;
	self.addChild(playText);
	// Add a shop button same size as the play button
	var shopButton = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		scaleX: 6,
		scaleY: 4,
		lineWidth: 10,
		lineColor: 0x00FF00 // Change border color to green
	});
	shopButton.x = game.width * 3 / 4;
	shopButton.y = game.height * 3 / 4;
	shopButton.on('down', function () {
		// Show the shop when the shop button is pressed
		var shop = game.addChild(new Shop());
		// Hide the main menu
		self.visible = false;
	});
	shopButton.on('over', function () {
		shopButton.scaleX = 5.5;
		shopButton.scaleY = 3.5;
	});
	shopButton.on('out', function () {
		shopButton.scaleX = 5;
		shopButton.scaleY = 3;
	});
	// Add 'Shop' text to the shop button
	var shopText = new Text2('Shop', {
		size: 200,
		fill: "#ffffff"
	});
	shopText.anchor.set(0.5, 0.5);
	shopText.x = shopButton.x;
	shopText.y = shopButton.y;
	self.addChild(shopText);
});
// Platform class
var Platform = Container.expand(function () {
	var self = Container.call(this);
	var platformGraphics = self.attachAsset('platform', {
		anchorX: 0.5,
		anchorY: 1.0
	});
});
// Shop class
var Shop = Container.expand(function () {
	var self = Container.call(this);
	// Create a scrollable container for the shop items
	var shopContainer = new Container();
	self.addChild(shopContainer);
	// Create an array to store the shop items
	var shopItems = [];
	// Populate the shop with items in a grid layout
	var itemsPerRow = 4; // Number of items per row
	var itemSize = 250; // Size of each item
	var gap = 50; // Increase the gap between items
	for (var i = 0; i < 100; i++) {
		var row = Math.floor(i / itemsPerRow);
		var col = i % itemsPerRow;
		var itemName = 'Item ' + (i + 1);
		var isPack = i % 5 === 0; // Mark every 5th item as a pack
		var shopItem = new ShopItem(itemName, isPack);
		shopItem.x = col * (itemSize + gap) + gap;
		shopItem.y = row * (itemSize + gap) + gap;
		shopContainer.addChild(shopItem);
		shopItems.push(shopItem);
	}
	// Add a points display at the top of the shop
	var pointsDisplay = new Text2('Points: ' + LK.getScore(), {
		size: 100,
		fill: "#ffffff"
	});
	pointsDisplay.anchor.set(0.5, 0);
	pointsDisplay.x = game.width / 2;
	pointsDisplay.y = 20;
	self.addChild(pointsDisplay);
	// Add an item description display at the top right corner of the shop
	var itemDescription = new ItemDescription('', '');
	itemDescription.x = game.width * 3 / 4;
	itemDescription.y = 20;
	self.addChild(itemDescription);
	// Update the points display every tick
	LK.on('tick', function () {
		pointsDisplay.setText('Points: ' + LK.getScore());
	});
	// Make the shop scrollable
	self.on('move', function (obj) {
		var event = obj.event;
		var pos = event.getLocalPosition(self);
		var deltaY = event.data.originalEvent.deltaY;
		if (deltaY > 0) {
			// Scroll down
			shopContainer.y = Math.min(shopContainer.y + 100, 0);
		} else if (deltaY < 0) {
			// Scroll up
			shopContainer.y = Math.max(shopContainer.y - 100, -shopContainer.height + game.height);
		}
		// Add a back button at the bottom of the shop
		var backButton = self.attachAsset('playButton', {
			anchorX: 0.5,
			anchorY: 0.5,
			color: 0x000000,
			scaleX: 6,
			scaleY: 4,
			lineWidth: 10,
			lineColor: 0x00FF00
		});
		backButton.x = game.width / 2;
		backButton.y = game.height - 100;
		backButton.on('down', function () {
			// Hide the shop and show the main menu when the back button is pressed
			self.destroy();
			mainMenu.visible = true;
		});
		// Add 'Back' text to the back button
		var backText = new Text2('Back', {
			size: 200,
			fill: "#ffffff"
		});
		backText.anchor.set(0.5, 0.5);
		backText.x = backButton.x;
		backText.y = backButton.y;
		self.addChild(backText);
	});
});
// ShopItem class
var ShopItem = Container.expand(function (itemName, isPack) {
	var self = Container.call(this);
	var itemGraphics = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		scaleX: 3,
		scaleY: 2,
		lineWidth: 10,
		lineColor: 0x00FF00
	});
	var itemText = new Text2(itemName + (isPack ? ' (PACK)' : ''), {
		size: 50,
		fill: "#ffffff"
	});
	itemText.anchor.set(0.5, 0.5);
	itemText.x = itemGraphics.x;
	itemText.y = itemGraphics.y - 50;
	self.addChild(itemText);
	// Add a description for the item
	var itemDescription = itemName + ' does something cool!';
	self.on('down', function () {
		itemDescription.setText(itemName + '\n' + itemDescription);
	});
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB // Light blue background to represent the sky
});
/**** 
* Game Code
****/ 
var mainMenu = game.addChild(new MainMenu());
function startGame() {
	hero.visible = false;
	platforms.forEach(function (platform) {
		platform.visible = false;
	});
	artifacts.forEach(function (artifact) {
		artifact.visible = false;
	});
}
var hero = game.addChild(new Hero());
hero.x = game.width / 2;
hero.y = game.height - 150;
var platforms = [];
var artifacts = [];
// Create platforms and artifacts
function createLevel() {
	// Example platform and artifact creation
	var platform = game.addChild(new Platform());
	platform.x = game.width / 2;
	platform.y = game.height - 100;
	platforms.push(platform);
	var artifact = game.addChild(new Artifact());
	artifact.x = platform.x;
	artifact.y = platform.y - 50;
	artifacts.push(artifact);
}
createLevel();
// Touch event to make the hero jump
game.on('down', function (obj) {
	hero.jump();
});
game.on('up', function () {
	hero.visible = false;
	platforms.forEach(function (platform) {
		platform.visible = false;
	});
	artifacts.forEach(function (artifact) {
		artifact.visible = false;
	});
});
// Game tick event
LK.on('tick', function () {
	hero.update();
	// Check for artifact collection
	artifacts.forEach(function (artifact, index) {
		if (hero.intersects(artifact)) {
			artifact.destroy(); // Collect the artifact
			artifacts.splice(index, 1);
			// Increase score or trigger some effect
		}
	});
}); /**** 
* Classes
****/ 
// Artifact class
var Artifact = Container.expand(function () {
	var self = Container.call(this);
	var artifactGraphics = self.attachAsset('artifact', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Assets will be automatically generated based on usage in the code.
// Hero class
var Hero = Container.expand(function () {
	var self = Container.call(this);
	var heroGraphics = self.attachAsset('hero', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.speedX = 0;
	self.speedY = 0;
	self.onGround = false;
	self.update = function () {
		// Update hero's position and handle gravity
		if (!self.onGround) {
			self.speedY += 0.5; // gravity
		}
		self.x += self.speedX;
		self.y += self.speedY;
		// Collision with ground
		if (self.y > game.height - heroGraphics.height) {
			self.y = game.height - heroGraphics.height;
			self.onGround = true;
			self.speedY = 0;
		}
	};
	self.jump = function () {
		if (self.onGround) {
			self.speedY = -15;
			self.onGround = false;
		}
	};
});
// ItemDescription class
var ItemDescription = Container.expand(function (itemName, itemDescription) {
	var self = Container.call(this);
	var descriptionGraphics = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		scaleX: 3,
		scaleY: 2,
		lineWidth: 10,
		lineColor: 0x00FF00
	});
	var descriptionText = new Text2(itemName + '\n' + itemDescription, {
		size: 50,
		fill: "#ffffff"
	});
	descriptionText.anchor.set(0.5, 0.5);
	descriptionText.x = descriptionGraphics.x;
	descriptionText.y = descriptionGraphics.y - 50;
	self.addChild(descriptionText);
	self.updateDescription = function (itemName, itemDescription) {
		descriptionText.setText(itemName + '\n' + itemDescription);
	};
});
// Main Menu class
var MainMenu = Container.expand(function () {
	var self = Container.call(this);
	var title = self.attachAsset('title', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	title.x = game.width / 2;
	title.y = game.height / 2 - 100;
	var playButton = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		// Change color to black
		scaleX: 6,
		scaleY: 4,
		lineWidth: 10,
		lineColor: 0x00FF00 // Change border color to green
	});
	playButton.x = game.width / 4;
	playButton.y = game.height * 3 / 4;
	playButton.on('down', function () {
		self.destroy();
		hero.visible = true;
		platforms.forEach(function (platform) {
			platform.visible = true;
		});
		artifacts.forEach(function (artifact) {
			artifact.visible = true;
		});
	});
	playButton.on('over', function () {
		playButton.scaleX = 5.5;
		playButton.scaleY = 3.5;
	});
	playButton.on('out', function () {
		playButton.scaleX = 5;
		playButton.scaleY = 3;
	});
	// Add 'Play' text to the play button
	var playText = new Text2('Play', {
		size: 200,
		// 2x bigger
		fill: "#ffffff"
	});
	playText.anchor.set(0.5, 0.5);
	playText.x = playButton.x;
	playText.y = playButton.y;
	self.addChild(playText);
	// Add a shop button same size as the play button
	var shopButton = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		scaleX: 6,
		scaleY: 4,
		lineWidth: 10,
		lineColor: 0x00FF00 // Change border color to green
	});
	shopButton.x = game.width * 3 / 4;
	shopButton.y = game.height * 3 / 4;
	shopButton.on('down', function () {
		// Show the shop when the shop button is pressed
		var shop = game.addChild(new Shop());
		// Hide the main menu
		self.visible = false;
	});
	shopButton.on('over', function () {
		shopButton.scaleX = 5.5;
		shopButton.scaleY = 3.5;
	});
	shopButton.on('out', function () {
		shopButton.scaleX = 5;
		shopButton.scaleY = 3;
	});
	// Add 'Shop' text to the shop button
	var shopText = new Text2('Shop', {
		size: 200,
		fill: "#ffffff"
	});
	shopText.anchor.set(0.5, 0.5);
	shopText.x = shopButton.x;
	shopText.y = shopButton.y;
	self.addChild(shopText);
});
// Platform class
var Platform = Container.expand(function () {
	var self = Container.call(this);
	var platformGraphics = self.attachAsset('platform', {
		anchorX: 0.5,
		anchorY: 1.0
	});
});
// Shop class
var Shop = Container.expand(function () {
	var self = Container.call(this);
	// Create a scrollable container for the shop items
	var shopContainer = new Container();
	self.addChild(shopContainer);
	// Create an array to store the shop items
	var shopItems = [];
	// Populate the shop with items in a grid layout
	var itemsPerRow = 4; // Number of items per row
	var itemSize = 250; // Size of each item
	var gap = 50; // Increase the gap between items
	for (var i = 0; i < 100; i++) {
		var row = Math.floor(i / itemsPerRow);
		var col = i % itemsPerRow;
		var itemName = 'Item ' + (i + 1);
		var isPack = i % 5 === 0; // Mark every 5th item as a pack
		var shopItem = new ShopItem(itemName, isPack);
		shopItem.x = col * (itemSize + gap) + gap;
		shopItem.y = row * (itemSize + gap) + gap;
		shopContainer.addChild(shopItem);
		shopItems.push(shopItem);
	}
	// Add a points display at the top of the shop
	var pointsDisplay = new Text2('Points: ' + LK.getScore(), {
		size: 100,
		fill: "#ffffff"
	});
	pointsDisplay.anchor.set(0.5, 0);
	pointsDisplay.x = game.width / 2;
	pointsDisplay.y = 20;
	self.addChild(pointsDisplay);
	// Add an item description display at the top right corner of the shop
	var itemDescription = new ItemDescription('', '');
	itemDescription.x = game.width * 3 / 4;
	itemDescription.y = 20;
	self.addChild(itemDescription);
	// Update the points display every tick
	LK.on('tick', function () {
		pointsDisplay.setText('Points: ' + LK.getScore());
	});
	// Make the shop scrollable
	self.on('move', function (obj) {
		var event = obj.event;
		var pos = event.getLocalPosition(self);
		var deltaY = event.data.originalEvent.deltaY;
		if (deltaY > 0) {
			// Scroll down
			shopContainer.y = Math.min(shopContainer.y + 100, 0);
		} else if (deltaY < 0) {
			// Scroll up
			shopContainer.y = Math.max(shopContainer.y - 100, -shopContainer.height + game.height);
		}
		// Add a back button at the bottom of the shop
		var backButton = self.attachAsset('playButton', {
			anchorX: 0.5,
			anchorY: 0.5,
			color: 0x000000,
			scaleX: 6,
			scaleY: 4,
			lineWidth: 10,
			lineColor: 0x00FF00
		});
		backButton.x = game.width / 2;
		backButton.y = game.height - 100;
		backButton.on('down', function () {
			// Hide the shop and show the main menu when the back button is pressed
			self.destroy();
			mainMenu.visible = true;
		});
		// Add 'Back' text to the back button
		var backText = new Text2('Back', {
			size: 200,
			fill: "#ffffff"
		});
		backText.anchor.set(0.5, 0.5);
		backText.x = backButton.x;
		backText.y = backButton.y;
		self.addChild(backText);
	});
});
// ShopItem class
var ShopItem = Container.expand(function (itemName, isPack) {
	var self = Container.call(this);
	var itemGraphics = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: 0x000000,
		scaleX: 3,
		scaleY: 2,
		lineWidth: 10,
		lineColor: 0x00FF00
	});
	var itemText = new Text2(itemName + (isPack ? ' (PACK)' : ''), {
		size: 50,
		fill: "#ffffff"
	});
	itemText.anchor.set(0.5, 0.5);
	itemText.x = itemGraphics.x;
	itemText.y = itemGraphics.y - 50;
	self.addChild(itemText);
	// Add a description for the item
	var itemDescription = itemName + ' does something cool!';
	self.on('down', function () {
		itemDescription.setText(itemName + '\n' + itemDescription);
	});
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB // Light blue background to represent the sky
});
/**** 
* Game Code
****/ 
var mainMenu = game.addChild(new MainMenu());
function startGame() {
	hero.visible = false;
	platforms.forEach(function (platform) {
		platform.visible = false;
	});
	artifacts.forEach(function (artifact) {
		artifact.visible = false;
	});
}
var hero = game.addChild(new Hero());
hero.x = game.width / 2;
hero.y = game.height - 150;
var platforms = [];
var artifacts = [];
// Create platforms and artifacts
function createLevel() {
	// Example platform and artifact creation
	var platform = game.addChild(new Platform());
	platform.x = game.width / 2;
	platform.y = game.height - 100;
	platforms.push(platform);
	var artifact = game.addChild(new Artifact());
	artifact.x = platform.x;
	artifact.y = platform.y - 50;
	artifacts.push(artifact);
}
createLevel();
// Touch event to make the hero jump
game.on('down', function (obj) {
	hero.jump();
});
game.on('up', function () {
	hero.visible = false;
	platforms.forEach(function (platform) {
		platform.visible = false;
	});
	artifacts.forEach(function (artifact) {
		artifact.visible = false;
	});
});
// Game tick event
LK.on('tick', function () {
	hero.update();
	// Check for artifact collection
	artifacts.forEach(function (artifact, index) {
		if (hero.intersects(artifact)) {
			artifact.destroy(); // Collect the artifact
			artifacts.splice(index, 1);
			// Increase score or trigger some effect
		}
	});
});